3e1b6eab7562efceb9e728ff6fe2d9ea1e840266
[institute/sw-backend.git] /
1 package com.supwisdom.institute.backend.base.domain.repo;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6
7 import javax.persistence.criteria.CriteriaBuilder;
8 import javax.persistence.criteria.CriteriaQuery;
9 import javax.persistence.criteria.Predicate;
10 import javax.persistence.criteria.Root;
11
12 import org.springframework.data.jpa.domain.Specification;
13 import org.springframework.stereotype.Repository;
14 import org.springframework.util.StringUtils;
15
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;
19
20 @Repository
21 public interface ApplicationRepository extends BaseJpaRepository<Application> {
22   
23   @Override
24   public default Specification<Application> convertToSpec(Map<String, Object> mapBean) {
25     
26     Specification<Application> spec = new Specification<Application>() {
27
28       /**
29        * 
30        */
31       private static final long serialVersionUID = -263282246904382286L;
32
33       @Override
34       public Predicate toPredicate(Root<Application> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
35         List<Predicate> predicates = new ArrayList<>();
36         
37         if (mapBean != null) {
38
39           if (MapBeanUtils.getBoolean(mapBean, "deleted") != null) {
40             predicates.add(criteriaBuilder.equal(root.get("deleted"), MapBeanUtils.getBoolean(mapBean, "deleted")));
41           }
42
43           if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "code"))) {
44             predicates.add(criteriaBuilder.like(root.get("code"), "%" + MapBeanUtils.getString(mapBean, "code") + "%"));
45           }
46           if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "name"))) {
47             predicates.add(criteriaBuilder.like(root.get("name"), "%" + MapBeanUtils.getString(mapBean, "name") + "%"));
48           }
49           
50           if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "status"))) {
51             predicates.add(criteriaBuilder.equal(root.get("status"), MapBeanUtils.getString(mapBean, "status")));
52           }
53
54           if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "url"))) {
55             predicates.add(criteriaBuilder.like(root.get("url"), "%" + MapBeanUtils.getString(mapBean, "url") + "%"));
56           }
57           
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") + "%"));
63             
64             predicates.add(criteriaBuilder.or(predicatesKeyword.toArray(new Predicate[predicatesKeyword.size()])));
65           }
66         }
67         
68         return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
69       }
70       
71     };
72     
73     return spec;
74   }
75
76 }