package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries;
import com.silverforge.elasticsearchrawclient.exceptions.MandatoryParametersAreMissingException;
import com.silverforge.elasticsearchrawclient.model.QueryTypeItem;
import com.silverforge.elasticsearchrawclient.queryDSL.Constants;
import com.silverforge.elasticsearchrawclient.queryDSL.generator.QueryFactory;
import com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries.common.GeoDistanceBaseQuery;
import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList;
public class GeoDistanceRangeQuery
extends GeoDistanceBaseQuery {
private QueryTypeArrayList<QueryTypeItem> queryBag = new QueryTypeArrayList<>();
GeoDistanceRangeQuery(QueryTypeArrayList<QueryTypeItem> queryBag) {
this.queryBag = queryBag;
}
@Override
public String getQueryString() {
return QueryFactory
.geoDistanceRangeQueryGenerator()
.generate(queryBag);
}
public static Init<?> builder() {
return new GeoDistanceRangeQueryBuilder();
}
public static class GeoDistanceRangeQueryBuilder
extends Init<GeoDistanceRangeQueryBuilder> {
@Override
protected GeoDistanceRangeQueryBuilder self() {
return this;
}
}
public static abstract class Init<T extends Init<T>>
extends GeoInit<T> {
public T from(String distance) {
queryBag.addItem(Constants.FROM, distance);
return self();
}
public T to(String distance) {
queryBag.addItem(Constants.TO, distance);
return self();
}
public T gt(String gt) {
queryBag.addItem(Constants.GT, gt);
return self();
}
public T gte(String gte) {
queryBag.addItem(Constants.GTE, gte);
return self();
}
public T lt(String lt) {
queryBag.addItem(Constants.LT, lt);
return self();
}
public T lte(String lte) {
queryBag.addItem(Constants.LTE, lte);
return self();
}
public GeoDistanceRangeQuery build()
throws MandatoryParametersAreMissingException {
if (!queryBag.containsKey(Constants.FIELD_NAME))
throw new MandatoryParametersAreMissingException(Constants.FIELD_NAME);
if (!queryBag.containsKey(Constants.VALUE))
throw new MandatoryParametersAreMissingException(Constants.VALUE);
return new GeoDistanceRangeQuery(queryBag);
}
}
}