Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.63 KB | None | 0 0
  1. public Specification<GrievanceForwarding> getListViewSpecification(Long officeOrganogramId,
  2.                                                                        Long officeId,
  3.                                                                        ListViewType listType) {
  4.  
  5.         Specification<GrievanceForwarding> specification = new Specification<GrievanceForwarding>() {
  6.             public Predicate toPredicate(Root<GrievanceForwarding> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  7.                 List<Predicate> predicates = new ArrayList<Predicate>();
  8.                 predicates.add(builder.equal(root.get("isCurrent"), true));
  9.  
  10.                 if (listType.toString().contains("OUTBOX")) {
  11.                     predicates.add(builder.equal(root.get("fromGROPost").<Long>get("id"), officeOrganogramId));
  12.                     predicates.add(builder.equal(root.get("fromOffice").<Long>get("id"), officeId));
  13.                     predicates.add(builder.notEqual(root.get("toGROPost").<Long>get("id"), officeOrganogramId));
  14.  
  15.                     //SELECT COUNT(*) FROM complaint_movements c WHERE c.complaint_id = cm.complaint_id and c.to_office_id = ?1 and c.to_office_unit_organogram_id = ?2 and is_current = 1
  16.  
  17.                     Subquery<Long> subquery = query.subquery(Long.class);
  18.                     Root<GrievanceForwarding> subqueryRoot = subquery.from(GrievanceForwarding.class);
  19.  
  20.                     subquery.select(builder.count(subqueryRoot.get("grievance").get("id")));
  21.                     subquery.where(
  22.                             builder.and(
  23.                                     builder.equal(subqueryRoot.get("toGROPost").<Long>get("id"), officeOrganogramId),
  24.                                     builder.equal(subqueryRoot.get("toOffice").<Long>get("id"), officeId),
  25.                                     builder.equal(subqueryRoot.get("isCurrent"), true),
  26.                                     builder.equal(subqueryRoot.get("grievance").get("id"),root.get("grievance").get("id"))
  27.                             )
  28.  
  29.                     );
  30.                     predicates.add(builder.equal(subquery.getSelection(),0L));
  31.  
  32.                 } else if (listType.toString().contains("INBOX")) {
  33.                     predicates.add(builder.equal(root.get("toGROPost").<Long>get("id"), officeOrganogramId));
  34.                     predicates.add(builder.equal(root.get("toOffice").<Long>get("id"), officeId));
  35.                 } else {
  36.                     predicates.add(builder.or(
  37.                             builder.and(
  38.                                     builder.equal(root.get("toGROPost").<Long>get("id"), officeOrganogramId),
  39.                                     builder.equal(root.get("toOffice").<Long>get("id"), officeId)),
  40.                             builder.and(
  41.                                     builder.equal(root.get("fromGROPost").<Long>get("id"), officeOrganogramId),
  42.                                     builder.equal(root.get("fromOffice").<Long>get("id"), officeId))
  43.                             )
  44.                     );
  45.                 }
  46.  
  47.                 if (listType.toString().contains("EXPIRED")) {
  48.                     Date date = new Date();
  49.                     predicates.add(builder.lessThan(root.<Date>get("deadlineDate"), date));
  50.                 }
  51.  
  52.                 ListViewConditionOnCurrentStatusGenerator statusGenerator = new ListViewConditionOnCurrentStatusGenerator();
  53.                 List<GrievanceCurrentStatus> grievanceCurrentStatusList = statusGenerator.getCurrentStatusListBasedOnListViewType(listType);
  54.                 predicates.add(builder.in(root.get("grievance").get("grievanceCurrentStatus")).value(grievanceCurrentStatusList));
  55.  
  56.                 query.orderBy(builder.desc(root.get("createdAt")));
  57.                 query.groupBy(root.get("grievance"));
  58.  
  59.                 return builder.and(predicates.toArray(new Predicate[predicates.size()]));
  60.             }
  61.         };
  62.         return specification;
  63.     }
  64.  
  65.  
  66.     public Specification<GrievanceForwarding> getListViewSpecificationWithSearch(Long officeOrganogramId,
  67.                                                                                  Long officeId,
  68.                                                                                  ListViewType listType,
  69.                                                                                  Map<String, String> searchCriterias) {
  70.  
  71.         Specification<GrievanceForwarding> specification = new Specification<GrievanceForwarding>() {
  72.             public Predicate toPredicate(Root<GrievanceForwarding> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  73.                 List<Predicate> predicates = new ArrayList<Predicate>();
  74.                 predicates.add(builder.equal(root.get("isCurrent"), true));
  75.  
  76.                 if (listType.toString().contains("OUTBOX")) {
  77.                     predicates.add(builder.equal(root.get("fromGROPost").<Long>get("id"), officeOrganogramId));
  78.                     predicates.add(builder.equal(root.get("fromOffice").<Long>get("id"), officeId));
  79.                     predicates.add(builder.notEqual(root.get("toGROPost").<Long>get("id"), officeOrganogramId));
  80.  
  81.                     //SELECT COUNT(*) FROM complaint_movements c WHERE c.complaint_id = cm.complaint_id and c.to_office_id = ?1 and c.to_office_unit_organogram_id = ?2 and is_current = 1
  82.  
  83.                     Subquery<Long> subquery = query.subquery(Long.class);
  84.                     Root<GrievanceForwarding> subqueryRoot = subquery.from(GrievanceForwarding.class);
  85.  
  86.                     subquery.select(builder.count(subqueryRoot.get("grievance").get("id")));
  87.                     subquery.where(
  88.                             builder.and(
  89.                                     builder.equal(subqueryRoot.get("toGROPost").<Long>get("id"), officeOrganogramId),
  90.                                     builder.equal(subqueryRoot.get("toOffice").<Long>get("id"), officeId),
  91.                                     builder.equal(subqueryRoot.get("isCurrent"), true),
  92.                                     builder.equal(subqueryRoot.get("grievance").get("id"),root.get("grievance").get("id"))
  93.                             )
  94.  
  95.                     );
  96.                     predicates.add(builder.equal(subquery.getSelection(),0L));
  97.  
  98.                 } else if (listType.toString().contains("INBOX")) {
  99.                     predicates.add(builder.equal(root.get("toGROPost").<Long>get("id"), officeOrganogramId));
  100.                     predicates.add(builder.equal(root.get("toOffice").<Long>get("id"), officeId));
  101.                 } else {
  102.                     predicates.add(builder.or(
  103.                             builder.and(
  104.                                     builder.equal(root.get("toGROPost").<Long>get("id"), officeOrganogramId),
  105.                                     builder.equal(root.get("toOffice").<Long>get("id"), officeId)),
  106.                             builder.and(
  107.                                     builder.equal(root.get("fromGROPost").<Long>get("id"), officeOrganogramId),
  108.                                     builder.equal(root.get("fromOffice").<Long>get("id"), officeId))
  109.                             )
  110.                     );
  111.                 }
  112.  
  113.                 if (listType.toString().contains("EXPIRED")) {
  114.                     Date date = new Date();
  115.                     predicates.add(builder.lessThan(root.<Date>get("deadlineDate"), date));
  116.                 }
  117.  
  118.                 ListViewConditionOnCurrentStatusGenerator statusGenerator = new ListViewConditionOnCurrentStatusGenerator();
  119.                 List<GrievanceCurrentStatus> grievanceCurrentStatusList = statusGenerator.getCurrentStatusListBasedOnListViewType(listType);
  120.                 predicates.add(builder.in(root.get("grievance").get("grievanceCurrentStatus")).value(grievanceCurrentStatusList));
  121.  
  122.  
  123.                 for (Map.Entry<String, String> entry : searchCriterias.entrySet()) {
  124.                     String searchType = entry.getKey();
  125.                     String searchValue = entry.getValue();
  126.  
  127.                     //TODO:, , , , , serviceName, designation, , closeStartDate, closeEndDate,
  128.                     if (searchType.equals("caseNumber")) {
  129.                         if (BanglaConverter.isABanglaDigit(searchValue)) {
  130.                             searchValue = BanglaConverter.convertToEnglish(searchValue);
  131.                         }
  132.                         predicates.add(builder.like(root.join("grievance").<String>get("caseNumber"), searchValue + "%"));
  133.                     } else if (searchType.equals("trackingNumber")) {
  134.                         if (BanglaConverter.isABanglaDigit(searchValue)) {
  135.                             searchValue = BanglaConverter.convertToEnglish(searchValue);
  136.                         }
  137.                         predicates.add(builder.like(root.join("grievance").<String>get("trackingNumber"), searchValue + "%"));
  138.                     } else if (searchType.equals("serviceType")) {
  139.                         ServiceType serviceType;
  140.                         try {
  141.                             serviceType = ServiceType.valueOf(searchValue);
  142.                             predicates.add(builder.equal(root.join("grievance").<ServiceType>get("grievanceType"), serviceType));
  143.                         } catch (Exception e) {
  144.                         }
  145.                     } else if (searchType.equals("status")) {
  146.                         GrievanceCurrentStatus searchStatus;
  147.                         try {
  148.                             searchStatus = GrievanceCurrentStatus.valueOf(searchValue);
  149.                             predicates.add(builder.equal(root.join("grievance").<GrievanceCurrentStatus>get("grievanceCurrentStatus"), searchStatus));
  150.                         } catch (Exception e) {
  151.                         }
  152.                     } else if (searchType.equals("subject")) {
  153.                         predicates.add(builder.like(root.join("grievance").<String>get(searchType), "%" + searchValue + "%"));
  154.                     } else if (searchType.equals("createdAtStart")) {
  155.                         predicates.add(builder.greaterThanOrEqualTo(root.join("grievance").<Date>get("createdAt"), DateTimeConverter.convertToDate(searchValue)));
  156.                     } else if (searchType.equals("createdAtEnd")) {
  157.                         predicates.add(builder.lessThanOrEqualTo(root.join("grievance").<Date>get("createdAt"), DateTimeConverter.convertToDate(searchValue)));
  158.                     }
  159.                 }
  160.                 query.orderBy(builder.desc(root.get("createdAt")));
  161.                 query.groupBy(root.get("grievance"));
  162.                 return builder.and(predicates.toArray(new Predicate[predicates.size()]));
  163.             }
  164.         };
  165.         return specification;
  166.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement