package com.constellio.model.services.search.cache;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.constellio.model.entities.records.Record;
import com.constellio.model.services.search.query.logical.LogicalSearchQuery;
import com.constellio.model.services.search.query.logical.LogicalSearchQuerySignature;
public class SerializableSearchCache implements Serializable {
Map<String, Map<String, List<String>>> highlights = new HashMap<>();
private LogicalSearchQuerySignature previousQuery;
private List<Record> results = new ArrayList<>();
private List<String> resultIds = new ArrayList<>();
private int size = -1;
public Record getCachedRecord(int index) {
if (index < results.size()) {
return results.get(index);
}
return null;
}
public String getCachedId(int index) {
if (index < resultIds.size()) {
return resultIds.get(index);
}
return null;
}
public void setRecord(int i, Record record) {
while (results.size() <= i) {
results.add(null);
}
results.set(i, record
);
}
public void setRecordId(int i, String id) {
while (resultIds.size() <= i) {
resultIds.add(null);
}
resultIds.set(i, id);
}
public void setRecordHighLighting(String id, Map<String, List<String>> recordHighlighting) {
highlights.put(id, recordHighlighting);
}
public void setSize(int size) {
this.size = size;
}
public int getSize() {
return size;
}
public void clear() {
resultIds = new ArrayList<>();
highlights.clear();
size = -1;
}
public void initializeFor(LogicalSearchQuery query) {
LogicalSearchQuerySignature querySignature = LogicalSearchQuerySignature.signature(query);
if (previousQuery == null || !querySignature.equals(previousQuery)) {
previousQuery = querySignature;
clear();
}
}
public Map<String, Map<String, List<String>>> getHighlightingMap() {
return highlights;
}
}