package fr.mcc.ginco.solr; import java.io.IOException; import java.util.Arrays; import java.util.List; import javax.inject.Inject; import javax.inject.Named; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.common.SolrInputDocument; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import fr.mcc.ginco.beans.SplitNonPreferredTerm; import fr.mcc.ginco.exceptions.TechnicalException; @Service("complexConceptIndexerService") public class ComplexConceptIndexerServiceImpl implements IComplexConceptIndexerService { private static Logger logger = LoggerFactory.getLogger(ComplexConceptIndexerServiceImpl.class); @Inject private ComplexConceptSolrConverter complexConceptSolrConverter; @Inject @Named("solrServer") private SolrServer solrServer; @Override @Async public void addComplexConcept(SplitNonPreferredTerm complexConcept) throws TechnicalException { try { addComplexConcepts(Arrays.asList(complexConcept)); } catch (TechnicalException ex) { logger.error(ex.getMessage(), ex.getCause().getMessage()); throw ex; } } @Override public void addComplexConcepts(List<SplitNonPreferredTerm> complexConcepts) throws TechnicalException { for (SplitNonPreferredTerm complexConcept : complexConcepts) { SolrInputDocument doc = complexConceptSolrConverter.convertSolrComplexConcept(complexConcept); if (doc != null) { try { logger.info("Indexing complex concept :" + complexConcept.getIdentifier()); solrServer.add(doc); } catch (SolrServerException e) { throw new TechnicalException( "Error during adding to SOLR!", e); } catch (IOException e) { throw new TechnicalException("IO error!", e); } } } try { solrServer.commit(); } catch (SolrServerException e) { throw new TechnicalException("Error during adding to SOLR!", e); } catch (IOException e) { throw new TechnicalException("IO error!", e); } } @Override @Async public void removeComplexConcept(SplitNonPreferredTerm complexConcept) throws TechnicalException { try { solrServer.deleteById(complexConcept.getIdentifier()); solrServer.commit(); } catch (SolrServerException e) { throw new TechnicalException( "Error executing query for removing complex concept from index!", e); } catch (IOException e) { throw new TechnicalException( "IO error during executing query for removing complex concept from index!", e); } } }