001
002package com.commercetools.api.predicates.query;
003
004import java.util.Arrays;
005import java.util.Collection;
006import java.util.function.Function;
007
008public class GeoJsonPredicateBuilder<T> {
009    private final BinaryQueryPredicate predicate;
010
011    private final Function<QueryPredicate, CombinationQueryPredicate<T>> combinationFn;
012
013    public GeoJsonPredicateBuilder(final BinaryQueryPredicate predicate,
014            final Function<QueryPredicate, CombinationQueryPredicate<T>> combinationFn) {
015        this.predicate = predicate;
016        this.combinationFn = combinationFn;
017    }
018
019    public CombinationQueryPredicate<T> withinCircle(final Double longitude, final Double latitude,
020            final Long distance) {
021        Collection<QueryPredicate> p = Arrays.asList(ConstantQueryPredicate.of().constant(longitude.toString()),
022            ConstantQueryPredicate.of().constant(latitude.toString()),
023            ConstantQueryPredicate.of().constant(distance.toString()));
024        return combinationFn.apply(predicate.operator(PredicateOperator.WITHIN.toString())
025                .right(ContainerQueryPredicate.of()
026                        .parent(ConstantQueryPredicate.of().constant("circle"))
027                        .inner(CollectionQueryPredicate.of().predicates(p))));
028    }
029}