package com.constellio.model.services.search.query.logical; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.commons.lang3.StringUtils; import com.constellio.model.services.search.query.logical.condition.SolrQueryBuilderParams; public class LogicalSearchQuerySignature implements Serializable { String conditionSignature; String sortSignature; private LogicalSearchQuerySignature(String conditionSignature, String sortSignature) { this.conditionSignature = conditionSignature; this.sortSignature = sortSignature; } public static LogicalSearchQuerySignature signature(LogicalSearchQuery query) { List<String> filterQueries = new ArrayList<>(); filterQueries.addAll(query.getFilterQueries()); Collections.sort(filterQueries); SolrQueryBuilderParams params = new SolrQueryBuilderParams(query.isPreferAnalyzedFields(), "?"); filterQueries.add(query.getFreeTextQuery()); filterQueries.add(query.getCondition().getSolrQuery(params)); String conditionSignature = StringUtils.join(filterQueries, ","); return new LogicalSearchQuerySignature(conditionSignature, query.getSort()); } public boolean isSameCondition(LogicalSearchQuerySignature signature) { return conditionSignature.equals(signature.conditionSignature); } public String toStringSignature() { return conditionSignature + ":" + sortSignature; } public boolean isSameSort(LogicalSearchQuerySignature signature) { return sortSignature.equals(signature.sortSignature); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } LogicalSearchQuerySignature that = (LogicalSearchQuerySignature) o; if (!conditionSignature.equals(that.conditionSignature)) { return false; } if (!sortSignature.equals(that.sortSignature)) { return false; } return true; } @Override public int hashCode() { int result = conditionSignature.hashCode(); result = 31 * result + sortSignature.hashCode(); return result; } }