001
002package com.commercetools.api.predicates.query;
003
004import java.util.ArrayList;
005import java.util.Collection;
006import java.util.stream.Collectors;
007
008import com.commercetools.api.predicates.CollectionPredicate;
009
010public class CollectionQueryPredicate implements CollectionPredicate<QueryPredicate>, QueryPredicate {
011    private final Collection<QueryPredicate> predicates;
012
013    public CollectionQueryPredicate(Collection<QueryPredicate> predicates) {
014        this.predicates = predicates;
015    }
016
017    public CollectionQueryPredicate() {
018        this.predicates = new ArrayList<>();
019    }
020
021    @Override
022    public Collection<QueryPredicate> predicates() {
023        return predicates;
024    }
025
026    public CollectionQueryPredicate predicates(Collection<QueryPredicate> predicates) {
027        return new CollectionQueryPredicate(new ArrayList<>(predicates));
028    }
029
030    public CollectionQueryPredicate addPredicate(QueryPredicate predicate) {
031        ArrayList<QueryPredicate> predicates = new ArrayList<>(this.predicates);
032        predicates.add(predicate);
033        return new CollectionQueryPredicate(predicates);
034    }
035
036    @Override
037    public String render() {
038        return predicates().stream().map(QueryPredicate::render).collect(Collectors.joining(", "));
039    }
040
041    public static CollectionQueryPredicate of() {
042        return new CollectionQueryPredicate();
043    }
044}