package pl.edu.icm.saos.search.search.service;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import pl.edu.icm.saos.search.search.model.SearchResults;
import pl.edu.icm.saos.search.search.model.Searchable;
/**
* @author madryk
* @see SearchResultsTranslator
*/
public class SearchResultsTranslatorImpl<S extends Searchable> implements SearchResultsTranslator<S> {
private SearchResultTranslator<S> searchResultTranslator;
//------------------------ LOGIC --------------------------
@Override
public SearchResults<S> translate(QueryResponse response) {
SolrDocumentList documents = response.getResults();
SearchResults<S> results = new SearchResults<S>();
for (int i=0; i<documents.size(); ++i) {
SolrDocument document = documents.get(i);
S result = searchResultTranslator.translateSingle(document);
checkAndApplyHighlighting(response.getHighlighting(), result);
results.addResult(result);
}
results.setTotalResults(documents.getNumFound());
return results;
}
//------------------------ PRIVATE --------------------------
private void checkAndApplyHighlighting(Map<String, Map<String, List<String>>> highlighting, S result) {
if (highlighting != null && highlighting.containsKey(String.valueOf(result.getId()))) {
Map<String, List<String>> documentHighlighting = highlighting.get(String.valueOf(result.getId()));
searchResultTranslator.applyHighlighting(documentHighlighting, result);
}
}
//------------------------ SETTERS --------------------------
public void setSearchResultTranslator(
SearchResultTranslator<S> searchResultTranslator) {
this.searchResultTranslator = searchResultTranslator;
}
}