ProductListRestController.java
package sk.iway.iwcm.components.basket.rest;
import java.util.List;
import java.util.Map;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import sk.iway.iwcm.RequestBean;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.components.basket.rest.ProductListService.AddingStatus;
import sk.iway.iwcm.doc.DocDB;
import sk.iway.iwcm.doc.DocDetails;
import sk.iway.iwcm.doc.DocDetailsRepository;
import sk.iway.iwcm.doc.attributes.jpa.DocAtrDefRepository;
import sk.iway.iwcm.editor.facade.EditorFacade;
import sk.iway.iwcm.editor.rest.WebpagesDatatable;
import sk.iway.iwcm.editor.rest.GetAllItemsDocOptions;
import sk.iway.iwcm.system.datatable.Datatable;
import sk.iway.iwcm.system.datatable.NotifyBean;
import sk.iway.iwcm.system.datatable.json.LabelValue;
import sk.iway.iwcm.system.datatable.json.LabelValueInteger;
import sk.iway.iwcm.users.UserDetails;
@Datatable
@RestController
@RequestMapping(value = "/admin/rest/eshop/product-list")
@PreAuthorize(value = "@WebjetSecurityService.hasPermission('cmp_basket')")
public class ProductListRestController extends WebpagesDatatable {
private static final String NOTIFY_TITLE_KEY = "apps.product-list.add_group.title";
@Autowired
public ProductListRestController(DocDetailsRepository docDetailsRepository, EditorFacade editorFacade, DocAtrDefRepository docAtrDefRepository) {
super(docDetailsRepository, editorFacade, docAtrDefRepository);
}
@Override
public Page<DocDetails> getAllItems(Pageable pageable) {
GetAllItemsDocOptions options = new GetAllItemsDocOptions(getRequest());
options.setPageable(pageable);
options.setDocAtrDefRepository(super.docAtrDefRepository);
options.setDocDetailsRepository(super.docDetailsRepository);
int groupId = Tools.getIntValue(getRequest().getParameter("groupId"), -1);
options.setGroupId(groupId);
return ProductListService.getAllItems(options);
}
@Override
public boolean processAction(DocDetails entity, String action) {
if("addProductGroup".equals(action)) {
String customData = getRequest().getParameter("customData");
AddingStatus status = ProductListService.addProductGroup(getUser(), customData, editorFacade);
if(status == AddingStatus.SUCCESS)
addNotify( new NotifyBean(getProp().getText(NOTIFY_TITLE_KEY), getProp().getText("apps.product-list.add_new_group.success"), NotifyBean.NotifyType.SUCCESS, 60000) );
else if(status == AddingStatus.ALREADY_EXIST)
addNotify( new NotifyBean(getProp().getText(NOTIFY_TITLE_KEY), getProp().getText("apps.product-list.add_new_group.already_added"), NotifyBean.NotifyType.ERROR, 60000) );
else
addNotify( new NotifyBean(getProp().getText(NOTIFY_TITLE_KEY), getProp().getText("apps.product-list.add_new_group.failed"), NotifyBean.NotifyType.ERROR, 60000) );
return true;
}
return false;
}
@Override
public DocDetails editItem(DocDetails entity, long id) {
DocDetails original = DocDB.getInstance().getDoc(entity.getDocId(), -1, false);
if(super.isImporting()) {
original = getOne(id);
//Only fields, that can be edited during import
original.setFieldJ( entity.getFieldJ() );
original.setFieldK( entity.getFieldK() );
original.setFieldL( entity.getFieldL() );
original.setFieldM( entity.getFieldM() );
original.setFieldN( entity.getFieldN() );
original.setFieldO( entity.getFieldO() );
//swap
entity = original;
}
DocDetails saved = editorFacade.save(entity);
List<UserDetails> approveByUsers = editorFacade.getApprovers();
super.addInsertEditNotify(false, approveByUsers);
if (editorFacade.isForceReload()) setForceReload(true);
if (super.isRefreshMenuRequired(original, saved)) setForceReload(true);
addNotify(editorFacade.getNotify());
if (RequestBean.getAttribute("forceReloadTree")!=null) setForceReload(true);
return saved;
}
@Override
public void addSpecSearch(Map<String, String> params, List<Predicate> predicates, Root<DocDetails> root, CriteriaBuilder builder) {
//This order is important
int rootGroupId = Tools.getIntValue(params.get("groupId"), -1);
List<Integer> groupIds = ProductListService.getGroupTreeIds( rootGroupId, super.docDetailsRepository );
params.remove("groupId");
super.addSpecSearch(params, predicates, root, builder);
predicates.add(root.get("groupId").in(groupIds));
predicates.add(root.get("fieldK").isNotNull());
predicates.add(builder.greaterThan(builder.length(root.get("fieldK")), 0));
}
@RequestMapping(value="/product-groups")
public List<LabelValueInteger> getListOfProductsGroups() {
return ProductListService.getListOfProductsGroups(super.docDetailsRepository);
}
@RequestMapping(value="/supported-currencies")
public List<LabelValue> getListOfSupportedCurrencies() {
return ProductListService.getListOfSupportedCurrencies();
}
}