package com.qprogramming.tasq.task; import com.qprogramming.tasq.account.Account_; import com.qprogramming.tasq.projects.Project_; import org.apache.commons.lang3.StringUtils; import org.springframework.data.jpa.domain.Specification; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; /** * Created by jromaniszyn on 24.06.2016. */ public class TaskSpecification implements Specification<Task> { private final TaskFilter taskFilter; public TaskSpecification(TaskFilter task) { this.taskFilter = task; } @Override public Predicate toPredicate(Root<Task> task, CriteriaQuery<?> cq, CriteriaBuilder cb) { Predicate predicate = cb.conjunction(); //project predicate = cb.and(predicate, cb.equal(task.get(Task_.project).get(Project_.id), taskFilter.getProject().getId())); // no subtasks predicate = cb.and(predicate, task.get(Task_.parent).isNull()); if (StringUtils.isNotBlank(taskFilter.getByState())) { if (TaskFilter.OPEN.equals(taskFilter.getByState())) { predicate = cb.and(predicate, task.get(Task_.state).in(TaskState.TO_DO, TaskState.ONGOING, TaskState.COMPLETE, TaskState.BLOCKED)); } else { predicate = cb.and(predicate, task.get(Task_.state).in(TaskState.valueOf(taskFilter.getByState()))); } } if (taskFilter.getType() != null) { predicate = cb.and(predicate, task.get(Task_.type).in(taskFilter.getType())); } if (taskFilter.getPriority() != null) { predicate = cb.and(predicate, task.get(Task_.priority).in(taskFilter.getPriority())); } if (taskFilter.getAssignee() != null) { predicate = cb.and(predicate, task.get(Task_.assignee).get(Account_.id).in(taskFilter.getAssignee().getId())); } return predicate; } }