package com.constellio.model.services.search.query.logical.criteria; import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import com.constellio.model.entities.schemas.DataStoreField; import com.constellio.model.services.search.SearchServicesRuntimeException.TooManyElementsInCriterion; import com.constellio.model.services.search.query.logical.LogicalSearchValueCondition; public class IsNotInCriterion extends LogicalSearchValueCondition { private final List<Object> elements; @SuppressWarnings({ "unchecked", "rawtypes" }) public IsNotInCriterion(List<?> values) { super(); this.elements = (List) values; if (values.size() > 1000) { throw new TooManyElementsInCriterion(values.size()); } } public List<Object> getValues() { return elements; } @Override public boolean isValidFor(DataStoreField dataStoreField) { return true; } @Override public String getSolrQuery(DataStoreField dataStoreField) { StringBuilder solrQuery = new StringBuilder("(*:* "); List<Object> queryValues = elements; if (queryValues.isEmpty()) { queryValues = Arrays.asList((Object) "_impossible_value_a38_"); } String nullValue = CriteriaUtils.getNullValueForDataStoreField(dataStoreField); for (Object element : queryValues) { element = CriteriaUtils.toSolrStringValue(element, dataStoreField); solrQuery.append("-"); solrQuery.append(dataStoreField.getDataStoreCode()); solrQuery.append(":\""); solrQuery.append(element); solrQuery.append("\" "); } solrQuery.append(") AND ("); solrQuery.append(dataStoreField.getDataStoreCode()); solrQuery.append(":*)"); return solrQuery.toString(); } @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() + ":" + elements; } }