Advertisement
Guest User

SpecBuilder

a guest
Jun 25th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.69 KB | None | 0 0
  1. public class ItemSpecificationBuilder {
  2.  
  3.     //uzycie w CustomItemRepositoryImpl
  4.  
  5.     private List<Specification<Item>> specs;
  6.  
  7.     {
  8.         specs = new ArrayList<>();
  9.     }
  10.  
  11.     public ItemSpecificationBuilder withNameLike(String name) {
  12.         if (name == null || name.trim().equals("")) return this;
  13.         specs.add(
  14.                 (root, criteriaQuery, criteriaBuilder) ->
  15.                         criteriaBuilder.like(root.get("name"), "%" + name + "%")
  16.         );
  17.         return this;
  18.     }
  19.  
  20.     public ItemSpecificationBuilder withDescriptionLike(String description) {
  21.         if (description == null) return this;
  22.         specs.add(
  23.                 (root, criteriaQuery, criteriaBuilder) ->
  24.                         criteriaBuilder.like(root.get("description"), "%" + description + "%")
  25.         );
  26.         return this;
  27.     }
  28.  
  29.     public ItemSpecificationBuilder withCategoriesIdsIn(Collection<Long> categoriesIds) {
  30.         if (categoriesIds == null || categoriesIds.isEmpty()) return this;
  31.         specs.add(
  32.                 (root, criteriaQuery, criteriaBuilder) ->
  33.                         criteriaBuilder.and(root.join("categories").get("id").in(categoriesIds))
  34.         );
  35.         return this;
  36.     }
  37.  
  38.     public Specification<Item> build() {
  39.         if (specs.isEmpty()) {
  40.             return null;
  41.         } else {
  42.             Iterator<Specification<Item>> iterator = specs.iterator();
  43.             Specification<Item> finalSpecification = iterator.next();
  44.             while (iterator.hasNext()) {
  45.                 finalSpecification = Specifications.where(finalSpecification).and(iterator.next());
  46.             }
  47.             return finalSpecification;
  48.         }
  49.     }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement