1 package com.supwisdom.institute.backend.base.domain.repo;
3 import java.util.ArrayList;
7 import javax.persistence.criteria.CriteriaBuilder;
8 import javax.persistence.criteria.CriteriaQuery;
9 import javax.persistence.criteria.Predicate;
10 import javax.persistence.criteria.Root;
12 import org.springframework.data.jpa.domain.Specification;
13 import org.springframework.stereotype.Repository;
14 import org.springframework.util.StringUtils;
16 import com.supwisdom.institute.backend.base.domain.entity.Application;
17 import com.supwisdom.institute.backend.common.framework.repo.BaseJpaRepository;
18 import com.supwisdom.institute.backend.common.util.MapBeanUtils;
21 public interface ApplicationRepository extends BaseJpaRepository<Application> {
24 public default Specification<Application> convertToSpec(Map<String, Object> mapBean) {
26 Specification<Application> spec = new Specification<Application>() {
31 private static final long serialVersionUID = -263282246904382286L;
34 public Predicate toPredicate(Root<Application> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
35 List<Predicate> predicates = new ArrayList<>();
37 if (mapBean != null) {
39 if (MapBeanUtils.getBoolean(mapBean, "deleted") != null) {
40 predicates.add(criteriaBuilder.equal(root.get("deleted"), MapBeanUtils.getBoolean(mapBean, "deleted")));
43 if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "code"))) {
44 predicates.add(criteriaBuilder.like(root.get("code"), "%" + MapBeanUtils.getString(mapBean, "code") + "%"));
46 if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "name"))) {
47 predicates.add(criteriaBuilder.like(root.get("name"), "%" + MapBeanUtils.getString(mapBean, "name") + "%"));
50 if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "status"))) {
51 predicates.add(criteriaBuilder.equal(root.get("status"), MapBeanUtils.getString(mapBean, "status")));
54 if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "url"))) {
55 predicates.add(criteriaBuilder.like(root.get("url"), "%" + MapBeanUtils.getString(mapBean, "url") + "%"));
58 List<Predicate> predicatesKeyword = new ArrayList<>();
59 if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "keyword"))) {
60 predicatesKeyword.add(criteriaBuilder.like(root.get("code"), "%" + MapBeanUtils.getString(mapBean, "keyword") + "%"));
61 predicatesKeyword.add(criteriaBuilder.like(root.get("name"), "%" + MapBeanUtils.getString(mapBean, "keyword") + "%"));
62 predicatesKeyword.add(criteriaBuilder.like(root.get("memo"), "%" + MapBeanUtils.getString(mapBean, "keyword") + "%"));
64 predicates.add(criteriaBuilder.or(predicatesKeyword.toArray(new Predicate[predicatesKeyword.size()])));
68 return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));