EnumerationTypeRestController.java
package sk.iway.iwcm.components.enumerations.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.Adminlog;
import sk.iway.iwcm.Cache;
import sk.iway.iwcm.components.enumerations.model.EnumerationDataRepository;
import sk.iway.iwcm.components.enumerations.model.EnumerationTypeBean;
import sk.iway.iwcm.components.enumerations.model.EnumerationTypeEditorFields;
import sk.iway.iwcm.components.enumerations.model.EnumerationTypeRepository;
import sk.iway.iwcm.system.datatable.Datatable;
import sk.iway.iwcm.system.datatable.DatatablePageImpl;
import sk.iway.iwcm.system.datatable.DatatableRestControllerV2;
import sk.iway.iwcm.system.datatable.ProcessItemAction;
@RestController
@RequestMapping("/admin/rest/enumeration/enumeration-type")
@PreAuthorize("@WebjetSecurityService.hasPermission('cmp_enumerations')")
@Datatable
public class EnumerationTypeRestController extends DatatableRestControllerV2<EnumerationTypeBean, Long> {
private final EnumerationTypeRepository enumerationTypeRepository;
private final EnumerationDataRepository enumerationDataRepository;
@Autowired
public EnumerationTypeRestController(EnumerationTypeRepository enumerationTypeRepository, EnumerationDataRepository enumerationDataRepository) {
super(enumerationTypeRepository);
this.enumerationTypeRepository = enumerationTypeRepository;
this.enumerationDataRepository = enumerationDataRepository;
}
@Override
public Page<EnumerationTypeBean> getAllItems(Pageable pageable) {
DatatablePageImpl<EnumerationTypeBean> page = new DatatablePageImpl<>(enumerationTypeRepository.findAllByHiddenFalse(pageable));
processFromEntity(page, ProcessItemAction.GETALL);
EnumerationService.prepareEnumTypesOptions(page, getProp());
return page;
}
@Override
public void addSpecSearch(Map<String, String> params, List<Predicate> predicates, Root<EnumerationTypeBean> root, CriteriaBuilder builder) {
//Only hidden = false records (non soft deleted)
predicates.add(builder.isFalse(root.get("hidden")));
//vyhladaj podla searchUserFullName
super.addSpecSearch(params, predicates, root, builder);
}
@Override
public EnumerationTypeBean getOneItem(long id) {
EnumerationTypeBean entity;
if(id == -1) entity = new EnumerationTypeBean();
else entity = enumerationTypeRepository.getNonHiddenByEnumId((int)id, false);
processFromEntity(entity, ProcessItemAction.GETONE);
return entity;
}
@Override
public void beforeSave(EnumerationTypeBean entity) {
Long entityId = entity.getId();
if(entityId != null && entityId != -1) {
//If allowChildEnumerationType was changed to false, remove from data all set child enum type's
if(entity.isAllowChildEnumerationType()==false) {
//Only if in DB is value still true
if(jpaToBoolean(enumerationTypeRepository.isAllowChildEnumerationType(entityId)))
enumerationDataRepository.denyChildEnumerationTypeByTypeId(entityId);
}
//If allowParentEnumerationData was changed to false, remove from data all set parent enum data's
if(entity.isAllowParentEnumerationData()==false) {
//Only if in DB is value still true
if(jpaToBoolean(enumerationTypeRepository.isAllowParentEnumerationData(entityId)))
enumerationDataRepository.denyParentEnumerationDataByTypeId(entityId);
}
}
processToEntity(entity, ProcessItemAction.EDIT);
}
@Override
public EnumerationTypeBean processFromEntity(EnumerationTypeBean entity, ProcessItemAction action) {
if (entity == null) entity = new EnumerationTypeBean();
if(entity.getEditorFields() == null) {
EnumerationTypeEditorFields etef = new EnumerationTypeEditorFields();
etef.fromEnumerationType(entity);
}
return entity;
}
@Override
public EnumerationTypeBean processToEntity(EnumerationTypeBean entity, ProcessItemAction action) {
if(entity != null) {
EnumerationTypeEditorFields etef = entity.getEditorFields();
//If for some reason editorFields is null, return entity
if(etef == null) return entity;
etef.toEnumerationType(entity, enumerationTypeRepository, getProp());
}
return entity;
}
@Override
public boolean deleteItem(EnumerationTypeBean entity, long id) {
enumerationTypeRepository.deleteEnumTypeById(entity.getEnumerationTypeId(), true);
//"Delete" all created EnumerationData's under this EnumerationType
enumerationDataRepository.deleteAllEnumDataByEnumTypeId(entity.getEnumerationTypeId(), true);
Adminlog.add(Adminlog.TYPE_UPDATEDB, "DELETE/HIDE:\nid: "+id+"\nname: "+entity.getTypeName(), (int)id, -1);
Cache.getInstance().removeObjectStartsWithName("enumeration.");
return true;
}
}