blob: a4c326d62a70afc550fa1523a085c05d5611e6dd [file] [log] [blame]
/**
*
*/
package org.eclipse.smila.solr.response;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.response.SolrResponseBase;
import org.apache.solr.common.util.NamedList;
import org.eclipse.smila.datamodel.AnyMap;
import org.eclipse.smila.datamodel.DataFactory;
import org.eclipse.smila.datamodel.Record;
import org.eclipse.smila.search.api.helper.ResultBuilder;
import org.eclipse.smila.solr.SolrConstants;
import org.eclipse.smila.solr.SolrUtils;
import org.eclipse.smila.solr.params.SolrParams;
import org.eclipse.smila.solr.search.ResponseAccessor;
/**
* @author pwissel
*
*/
public abstract class ResponseParser {
protected final ResultBuilder _resultBuilder;
public ResponseParser() {
this(DataFactory.DEFAULT.createRecord("solr-response"));
}
public ResponseParser(final Record record) {
_resultBuilder = new ResultBuilder(record);
}
public Record returnAsRecord() {
return _resultBuilder.getResult();
}
public AnyMap returnAsAnyMap() {
return returnAsRecord().getMetadata();
}
public ResultBuilder getResultBuilder() {
return _resultBuilder;
}
public ResponseParser parse(final SolrResponse response) {
if (response instanceof SolrResponseBase) {
@SuppressWarnings("unchecked")
final NamedList<Object> header = ((SolrResponseBase) response).getResponseHeader();
if (header != null) {
final AnyMap responseHeader = getSolrResponse().getMap(SolrConstants.RESPONSE_HEADER, true);
SolrUtils.parseNamedList(header, responseHeader);
}
}
return this;
}
protected AnyMap getSolrResponse() {
return returnAsAnyMap().getMap(SolrParams.SOLR_PARAMETER_ATTRIBUTE, true).getMap(ResponseAccessor.RESPONSE,
true);
}
}