package org.legrog.entities; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Implementation of PublisherSearchRepository using SolrJ */ public class PublisherSearchRepositorySolrj implements PublisherSearchRepository { Logger logger = LoggerFactory.getLogger(getClass()); SolrClient solrClient; @Inject PublisherSearchRepositorySolrj(SolrClient solrClient) { this.solrClient = solrClient; } //no args constructor to make it proxyable PublisherSearchRepositorySolrj() { } @Override public IndexedPublisher save(IndexedPublisher indexedPublisher) throws IndexingException { try { UpdateResponse updateResponse = solrClient.addBean(indexedPublisher, 1); logger.trace("validatePublisherVersion SolrJ UpdateResponse {}", updateResponse); } catch (IOException ioe) { throw new IndexingException(ioe); } catch (SolrServerException sse) { logger.error("SolrServerException {}", sse); throw new IndexingException(sse.getRootCause()); } return indexedPublisher; } @Override public List<IndexedPublisher> search(String string) throws SearchingException { SolrQuery solrQuery = new SolrQuery(string); QueryResponse queryResponse; try { queryResponse = solrClient.query("publishers", solrQuery); } catch (IOException ioe) { throw new SearchingException(ioe); } catch (SolrServerException sse) { logger.error("SolrServerException {}", sse); throw new SearchingException(sse.getRootCause()); } if (queryResponse != null) { return queryResponse.getBeans(IndexedPublisher.class); } else { return new ArrayList<>(); } } }