Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ItemSpecificationBuilder {
- //uzycie w CustomItemRepositoryImpl
- private List<Specification<Item>> specs;
- {
- specs = new ArrayList<>();
- }
- public ItemSpecificationBuilder withNameLike(String name) {
- if (name == null || name.trim().equals("")) return this;
- specs.add(
- (root, criteriaQuery, criteriaBuilder) ->
- criteriaBuilder.like(root.get("name"), "%" + name + "%")
- );
- return this;
- }
- public ItemSpecificationBuilder withDescriptionLike(String description) {
- if (description == null) return this;
- specs.add(
- (root, criteriaQuery, criteriaBuilder) ->
- criteriaBuilder.like(root.get("description"), "%" + description + "%")
- );
- return this;
- }
- public ItemSpecificationBuilder withCategoriesIdsIn(Collection<Long> categoriesIds) {
- if (categoriesIds == null || categoriesIds.isEmpty()) return this;
- specs.add(
- (root, criteriaQuery, criteriaBuilder) ->
- criteriaBuilder.and(root.join("categories").get("id").in(categoriesIds))
- );
- return this;
- }
- public Specification<Item> build() {
- if (specs.isEmpty()) {
- return null;
- } else {
- Iterator<Specification<Item>> iterator = specs.iterator();
- Specification<Item> finalSpecification = iterator.next();
- while (iterator.hasNext()) {
- finalSpecification = Specifications.where(finalSpecification).and(iterator.next());
- }
- return finalSpecification;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement