package com.brahalla.PhotoAlbum.domain.predicate.builder; import com.brahalla.PhotoAlbum.domain.predicate.PhotoPredicate; import com.brahalla.PhotoAlbum.domain.predicate.SearchCriteria; import com.mysema.query.types.expr.BooleanExpression; import java.util.ArrayList; import java.util.List; public class PhotoPredicateBuilder { private List<SearchCriteria> criteria; public PhotoPredicateBuilder() { this.setCriteria(new ArrayList<SearchCriteria>()); } public List<SearchCriteria> getCriteria() { return this.criteria; } public void setCriteria(List<SearchCriteria> criteria) { this.criteria = criteria; } public PhotoPredicateBuilder with(String key, String operation, Object value) { this.criteria.add(new SearchCriteria(key, operation, value)); return this; } public BooleanExpression build() { if (this.getCriteria().size() == 0) { return null; } List<BooleanExpression> predicates = new ArrayList<BooleanExpression>(); PhotoPredicate predicate; for (SearchCriteria c : this.getCriteria()) { predicate = new PhotoPredicate(c); BooleanExpression exp = predicate.getPredicate(); if (exp != null) { predicates.add(exp); } } BooleanExpression result = predicates.get(0); for (int i = 1; i < predicates.size(); i++) { result = result.and(predicates.get(i)); } return result; } }