GroupSchedulerRestController.java

package sk.iway.iwcm.editor.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.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.Tools;
import sk.iway.iwcm.system.datatable.Datatable;
import sk.iway.iwcm.system.datatable.DatatablePageImpl;
import sk.iway.iwcm.system.datatable.DatatableRestControllerV2;

@RestController
@Datatable
@RequestMapping(value = "/admin/rest/group-scheduler")
@PreAuthorize(value = "@WebjetSecurityService.hasPermission('menuWebpages')")
public class GroupSchedulerRestController extends DatatableRestControllerV2<GroupSchedulerDto, Long>{

    private final GroupSchedulerDtoRepository repository;

    public GroupSchedulerRestController(GroupSchedulerDtoRepository repository) {
        super(repository);
        this.repository = repository;
    }

    @Override
    public Page<GroupSchedulerDto> getAllItems(Pageable pageable) {

        String selectType = getRequest().getParameter("selectType");
        DatatablePageImpl<GroupSchedulerDto> page = null;
        Long groupId = Long.parseLong(getRequest().getParameter("groupId"));

        //if selectType is "plannedChanges", get all records by groupId and whenToPublish is NOT NULL
        //else if selectType is "changeHistory", get all records by groupId and whenToPublish is less that actual Date or is NULL
        if(selectType.equals("plannedChanges")) {
            page = new DatatablePageImpl<>(repository.findAllByGroupIdAndWhenToPublishIsNotNull(pageable, groupId));
            return page;
        } else if(selectType.equals("changeHistory")) {
            page = new DatatablePageImpl<>(repository.findAllByGroupIdAndWhenToPublishIsNull(pageable, groupId));
            return page;
        }

        return null;
    }

    @Override
    public void addSpecSearch(Map<String, String> params, List<Predicate> predicates, Root<GroupSchedulerDto> root, CriteriaBuilder builder) {
        //vyhladaj podla searchUserFullName
        super.addSpecSearch(params, predicates, root, builder);

        String selectType = getRequest().getParameter("selectType");
        if(selectType.equals("plannedChanges")) predicates.add(builder.isNotNull(root.get("whenToPublish")));
        else predicates.add(builder.isNull(root.get("whenToPublish")));
    }

    @Override
	public void beforeSave(GroupSchedulerDto entity) {
		throwError("datatables.error.recordIsNotEditable");
	}

	@Override
    public boolean beforeDelete(GroupSchedulerDto entity) {
		//zmazat je mozne len planovany zaznam v buducnosti
		if (entity.getId()>0 && entity.getWhenToPublish()!=null && entity.getWhenToPublish().getTime()>Tools.getNow()) return true;

		throwError("admin.cong_editor.youCanOnlyDeleteFutureRecords");
		return false;
    }
}