package com.constellio.model.services.search.query.logical.criteria; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.joda.time.LocalDate; import org.joda.time.LocalDateTime; import com.constellio.model.entities.schemas.DataStoreField; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.services.search.query.logical.LogicalSearchValueCondition; public class IsValueInRangeCriterion extends LogicalSearchValueCondition { private final Object beginValue; private final Object endValue; public IsValueInRangeCriterion(Object beginIndex, Object endIndex) { super(); this.beginValue = beginIndex; this.endValue = endIndex; } public Object getBeginIndex() { return beginValue; } public Object getEndIndex() { return endValue; } @Override public boolean isValidFor(DataStoreField dataStoreField) { return !dataStoreField.getType().equals(MetadataValueType.BOOLEAN); } @Override public String getSolrQuery(DataStoreField dataStoreField) { if (beginValue instanceof Number && endValue instanceof Number) { return dataStoreField.getDataStoreCode() + ":[" + beginValue + " TO " + endValue + "]"; } else if (beginValue instanceof LocalDateTime && endValue instanceof LocalDateTime) { return correctDate(dataStoreField); } else if (beginValue instanceof LocalDate && endValue instanceof LocalDate) { return correctDate(dataStoreField); } else { //FIXME Date? return dataStoreField.getDataStoreCode() + ":[\"" + beginValue + "\" TO \"" + endValue + "\"] AND -" + dataStoreField.getDataStoreCode() + ":\"__NULL__\""; } } private String correctDate(DataStoreField dataStoreField) { String begin = CriteriaUtils.toSolrStringValue(beginValue, dataStoreField); String end = CriteriaUtils.toSolrStringValue(endValue, dataStoreField); return dataStoreField.getDataStoreCode() + ":[" + begin + " TO " + end + "] AND -" + dataStoreField.getDataStoreCode() + ":\"" + CriteriaUtils.getNullDateValue() + "\""; } @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } @Override public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); } @Override public String toString() { return getClass().getSimpleName() + ":[" + beginValue + " TO " + endValue + "] AND -" + getClass().getSimpleName() + ":\"__NULL__\""; } }