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.LocalDateTime;
import com.constellio.data.utils.TimeProvider;
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 IsOldLikeCriterion extends LogicalSearchValueCondition {
private final Object value;
private final MeasuringUnitTime measuringUnitTime;
public IsOldLikeCriterion(Object value, MeasuringUnitTime measuringUnitTime) {
super();
this.value = value;
this.measuringUnitTime = measuringUnitTime;
}
public Object getValue() {
return value;
}
@Override
public boolean isValidFor(DataStoreField dataStoreField) {
return dataStoreField.getType().equals(MetadataValueType.DATE) || dataStoreField.getType()
.equals(MetadataValueType.DATE_TIME);
}
@Override
public String getSolrQuery(DataStoreField dataStoreField) {
//
LocalDateTime now = TimeProvider.getLocalDateTime();
LocalDateTime dateTimeValue;
int intValue = ((Double) value).intValue();
if (measuringUnitTime == MeasuringUnitTime.DAYS) {
dateTimeValue = now.minusDays(intValue);
} else {
dateTimeValue = now.minusYears(intValue);
}
String stringValue;
if (dataStoreField.getType().equals(MetadataValueType.DATE)) {
stringValue = CriteriaUtils.toSolrStringValue(dateTimeValue.toLocalDate(), dataStoreField);
} else {
stringValue = CriteriaUtils.toSolrStringValue(dateTimeValue, dataStoreField);
}
StringBuilder query = new StringBuilder();
query.append(dataStoreField.getDataStoreCode() + ":\"" + stringValue + "\"");
return query.toString();
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
}