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.definition.SpanQueryable;
import com.silverforge.elasticsearchrawclient.queryDSL.generator.QueryFactory;
import com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries.common.FieldValueQuery;
import com.silverforge.elasticsearchrawclient.utils.QueryTypeArrayList;
public class SpanFirstQuery
extends FieldValueQuery
implements SpanQueryable {
private QueryTypeArrayList<QueryTypeItem> queryBag = new QueryTypeArrayList<>();
SpanFirstQuery(QueryTypeArrayList<QueryTypeItem> queryBag) {
this.queryBag = queryBag;
}
public static SpanFirstQueryBuilder builder() {
return new SpanFirstQueryBuilder();
}
@Override
public String getQueryString() {
return QueryFactory
.spanFirstQueryGenerator()
.generate(queryBag);
}
public static class SpanFirstQueryBuilder
extends Init<SpanFirstQueryBuilder> {
@Override
protected SpanFirstQueryBuilder self() {
return this;
}
}
public static abstract class Init<T extends Init<T>>
extends FieldValueInit<T> {
public T end(int end) {
queryBag.addItem(Constants.END, end);
return self();
}
public SpanFirstQuery 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);
if (!queryBag.containsKey(Constants.END))
queryBag.addItem(Constants.END, 3);
return new SpanFirstQuery(queryBag);
}
}
}