package edu.harvard.iq.dataverse.search;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import javax.json.Json;
import javax.json.JsonObjectBuilder;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.FacetField;
public class SolrQueryResponse {
private static final Logger logger = Logger.getLogger(SolrQueryResponse.class.getCanonicalName());
private List<SolrSearchResult> solrSearchResults;
private Long numResultsFound;
private Long resultsStart;
private Map<String, List<String>> spellingSuggestionsByToken;
private List<FacetCategory> facetCategoryList;
private List<FacetCategory> typeFacetCategories;
Map<String, String> datasetfieldFriendlyNamesBySolrField = new HashMap<>();
private Map<String, String> staticSolrFieldFriendlyNamesBySolrField;
private List<String> filterQueriesActual = new ArrayList<String>();
private String error;
private Map<String, Long> dvObjectCounts = new HashMap<>();
private Map<String, Long> publicationStatusCounts = new HashMap<>();
public static String DATAVERSES_COUNT_KEY = "dataverses_count";
public static String DATASETS_COUNT_KEY = "datasets_count";
public static String FILES_COUNT_KEY = "files_count";
public static String[] DVOBJECT_COUNT_KEYS = { DATAVERSES_COUNT_KEY, DATASETS_COUNT_KEY, FILES_COUNT_KEY};
SolrQuery solrQuery;
public SolrQueryResponse(SolrQuery solrQuery) {
this.solrQuery = solrQuery;
}
public List<SolrSearchResult> getSolrSearchResults() {
return solrSearchResults;
}
public void setPublicationStatusCounts(FacetField facetField){
setFacetFieldCounts(facetField, this.publicationStatusCounts);
}
public Map<String, Long> getPublicationStatusCounts(){
return this.publicationStatusCounts;
}
public void setDvObjectCounts(FacetField facetField){
setFacetFieldCounts(facetField, this.dvObjectCounts);
}
public Map<String, Long> getDvObjectCounts(){
return this.dvObjectCounts;
}
private void setFacetFieldCounts(FacetField facetField, Map<String, Long> countMap){
if ((facetField ==null)||(countMap==null)){
return;
}
for (FacetField.Count fcnt : facetField.getValues()){
countMap.put(fcnt.getName().toLowerCase().replace(" ", "_") + "_count", fcnt.getCount());
}
}
public JsonObjectBuilder getPublicationStatusCountsAsJSON(){
if (this.publicationStatusCounts == null){
return null;
}
// requiredVars = If one of these is not returned in the query,
// add it with a count of 0 (zero)
// - e.g. You always want these variable to show up in the JSON,
// even if they're not returned via Solr
//
String[] requiredVars = { "in_review_count", "unpublished_count", "published_count", "draft_count", "deaccessioned_count"};
for (String var : requiredVars){
if (!publicationStatusCounts.containsKey(var)){
publicationStatusCounts.put(var, new Long(0));
}
}
return this.getMapCountsAsJSON(publicationStatusCounts);
}
public JsonObjectBuilder getDvObjectCountsAsJSON(){
if (this.dvObjectCounts == null){
return null;
}
//String[] requiredVars = { "dataverses_count", "datasets_count", "files_count"};
for (String var : SolrQueryResponse.DVOBJECT_COUNT_KEYS){
if (!dvObjectCounts.containsKey(var)){
dvObjectCounts.put(var, new Long(0));
}
}
return this.getMapCountsAsJSON(dvObjectCounts);
}
public JsonObjectBuilder getMapCountsAsJSON(Map<String, Long> countMap){
if (countMap == null){
return null;
}
JsonObjectBuilder jsonData = Json.createObjectBuilder();
for (Map.Entry<String, Long> entry : countMap.entrySet()) {
jsonData.add(entry.getKey(), entry.getValue());
}
return jsonData;
}
public void setSolrSearchResults(List<SolrSearchResult> solrSearchResults) {
this.solrSearchResults = solrSearchResults;
}
public Map<String, List<String>> getSpellingSuggestionsByToken() {
return spellingSuggestionsByToken;
}
public Long getNumResultsFound() {
return numResultsFound;
}
public void setNumResultsFound(Long numResultsFound) {
this.numResultsFound = numResultsFound;
}
public Long getResultsStart() {
return resultsStart;
}
public void setResultsStart(Long resultsStart) {
this.resultsStart = resultsStart;
}
public void setSpellingSuggestionsByToken(Map<String, List<String>> spellingSuggestionsByToken) {
this.spellingSuggestionsByToken = spellingSuggestionsByToken;
}
public List<FacetCategory> getFacetCategoryList() {
return facetCategoryList;
}
public void setFacetCategoryList(List<FacetCategory> facetCategoryList) {
this.facetCategoryList = facetCategoryList;
}
public List<FacetCategory> getTypeFacetCategories() {
return typeFacetCategories;
}
public void setTypeFacetCategories(List<FacetCategory> typeFacetCategories) {
this.typeFacetCategories = typeFacetCategories;
}
public Map<String, String> getDatasetfieldFriendlyNamesBySolrField() {
return datasetfieldFriendlyNamesBySolrField;
}
void setDatasetfieldFriendlyNamesBySolrField(Map<String, String> datasetfieldFriendlyNamesBySolrField) {
this.datasetfieldFriendlyNamesBySolrField = datasetfieldFriendlyNamesBySolrField;
}
public Map<String, String> getStaticSolrFieldFriendlyNamesBySolrField() {
return staticSolrFieldFriendlyNamesBySolrField;
}
void setStaticSolrFieldFriendlyNamesBySolrField(Map<String, String> staticSolrFieldFriendlyNamesBySolrField) {
this.staticSolrFieldFriendlyNamesBySolrField = staticSolrFieldFriendlyNamesBySolrField;
}
public List<String> getFilterQueriesActual() {
return filterQueriesActual;
}
public void setFilterQueriesActual(List<String> filterQueriesActual) {
this.filterQueriesActual = filterQueriesActual;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
public SolrQuery getSolrQuery() {
return solrQuery;
}
}