package pl.edu.icm.saos.search.search.service;
import org.apache.commons.lang3.StringUtils;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.common.params.FacetParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pl.edu.icm.saos.search.util.FieldValuePrefixAdder;
import com.google.common.base.Preconditions;
/**
* Applier of range facet request to {@link SolrQuery}
*
* @author madryk
*/
@Service
public class RangeFacetToQueryApplier {
private FieldValuePrefixAdder fieldValuePrefixAdder;
//------------------------ LOGIC --------------------------
/**
* Applies range facet request to {@link SolrQuery}
*/
public void applyRangeFacet(SolrQuery query, String fieldName, String start, String end, String gap) {
checkArguments(query, fieldName, start, end, gap);
query.setFacet(true);
String fieldParamPrefix = "f." + fieldName + ".";
query.add(FacetParams.FACET_RANGE, fieldName);
query.add(fieldParamPrefix + FacetParams.FACET_RANGE_START, start);
query.add(fieldParamPrefix + FacetParams.FACET_RANGE_END, end);
query.add(fieldParamPrefix + FacetParams.FACET_RANGE_GAP, gap);
}
//------------------------ PRIVATE --------------------------
private void checkArguments(SolrQuery query, String fieldName, String start, String end, String gap) {
Preconditions.checkNotNull(query);
Preconditions.checkNotNull(fieldName);
Preconditions.checkArgument(StringUtils.isNotBlank(fieldName));
Preconditions.checkNotNull(start);
Preconditions.checkArgument(StringUtils.isNotBlank(start));
Preconditions.checkNotNull(end);
Preconditions.checkArgument(StringUtils.isNotBlank(end));
Preconditions.checkNotNull(gap);
Preconditions.checkArgument(StringUtils.isNotBlank(gap));
}
//------------------------ SETTERS --------------------------
@Autowired
public void setFieldValuePrefixAdder(FieldValuePrefixAdder fieldValuePrefixAdder) {
this.fieldValuePrefixAdder = fieldValuePrefixAdder;
}
}