package com.smilonet.common.dao.jpa; import java.io.Serializable; import java.util.List; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; 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.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import com.smilonet.common.entity.IValidable; public class BaseValidableDaoImpl<T extends IValidable<ID>, ID extends Serializable> extends BaseDaoImpl<T, ID> implements BaseValidableDao<T, ID> { @Override public List<T> findAllValid() { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.equal(root.get(IValidable.P_IS_VALID), true); } }); } @Override public List<T> findAllInvalid() { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.equal(root.get(IValidable.P_IS_VALID), false); } }); } @Override public List<T> findAllValid(Sort sort) { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.equal(root.get(IValidable.P_IS_VALID), true); } }, sort); } @Override public List<T> findAllInvalid(Sort sort) { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.equal(root.get(IValidable.P_IS_VALID), false); } }, sort); } @Override public Page<T> findValid(Pageable pageable) { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.equal(root.get(IValidable.P_IS_VALID), true); } }, pageable); } @Override public Page<T> findInvalid(Pageable pageable) { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.equal(root.get(IValidable.P_IS_VALID), false); } }, pageable); } @Override public long countAllValid() { return super.count(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.equal(root.get(IValidable.P_IS_VALID), true); } }); } @Override public long countAllInvalid() { return super.count(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.equal(root.get(IValidable.P_IS_VALID), false); } }); } @Override public void setInvalid(T entity) { if (entity == null) { return; } entity.setIsValid(false); super.save(entity); } @Override public void setInvalid(Iterable<? extends T> entities) { for (T entity : entities) { entity.setIsValid(false); } super.save(entities); } @Override public void setValid(T entity) { if (entity == null) { return; } entity.setIsValid(true); super.save(entity); } @Override public void setValid(Iterable<? extends T> entities) { for (T entity : entities) { entity.setIsValid(true); } super.save(entities); } @Override public T findOneValid(final Specification<T> spec) { return super.findOne(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.and(cb.equal(root.get(IValidable.P_IS_VALID), true), spec.toPredicate(root, query, cb)); } }); } @Override public List<T> findValid(final Specification<T> spec) { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.and(cb.equal(root.get(IValidable.P_IS_VALID), true), spec.toPredicate(root, query, cb)); } }); } @Override public Page<T> findValid(final Specification<T> spec, Pageable pageable) { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.and(cb.equal(root.get(IValidable.P_IS_VALID), true), spec.toPredicate(root, query, cb)); } }, pageable); } @Override public List<T> findValid(final Specification<T> spec, Sort sort) { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.and(cb.equal(root.get(IValidable.P_IS_VALID), true), spec.toPredicate(root, query, cb)); } }, sort); } @Override public long countValid(final Specification<T> spec) { return super.count(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.and(cb.equal(root.get(IValidable.P_IS_VALID), true), spec.toPredicate(root, query, cb)); } }); } @Override public Page<T> findInValid(final Specification<T> spec, Pageable pageable) { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.and(cb.equal(root.get(IValidable.P_IS_VALID), false), spec.toPredicate(root, query, cb)); } }, pageable); } @Override public List<T> findInValid(final Specification<T> spec) { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.and(cb.equal(root.get(IValidable.P_IS_VALID), false), spec.toPredicate(root, query, cb)); } }); } @Override public List<T> findInValid(final Specification<T> spec, Sort sort) { return super.find(new Specification<T>() { @Override public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) { return cb.and(cb.equal(root.get(IValidable.P_IS_VALID), false), spec.toPredicate(root, query, cb)); } }, sort); } @Override public void setInvalid(ID... ids) { for (ID id : ids) { this.setInvalid(this.find(id)); } } @Override public void setValid(ID... ids) { for (ID id : ids) { this.setValid(this.find(id)); } } }