package eu.dnetlib.functionality.index.solr; import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.Set; import javax.xml.parsers.ParserConfigurationException; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; import org.apache.solr.core.CoreContainer; import org.apache.solr.schema.IndexSchema; import org.xml.sax.SAXException; import com.google.common.collect.Sets; public class LocalIndexServer { private static final Log log = LogFactory.getLog(LocalIndexServer.class); // NOPMD by marko on 11/24/08 5:02 PM private CoreContainer container; private IndexSchema schema; private SolrServer server; private String indexName; private Set dsIds; private boolean isFeeding; public LocalIndexServer(final String indexName, final List dsIds, final String solrDataDir, final IndexSchema schema) throws ParserConfigurationException, IOException, SAXException { this.indexName = indexName; this.setSchema(schema); this.dsIds = Collections.synchronizedSet(Sets.newHashSet(dsIds)); this.setFeeding(false); initEmbeddedSolrServer(indexName, solrDataDir); } private void initEmbeddedSolrServer(final String indexName, final String solrDataDir) throws ParserConfigurationException, IOException, SAXException { File home = new File(solrDataDir + IOUtils.DIR_SEPARATOR_UNIX + indexName); container = new CoreContainer(home.getAbsolutePath()); container.load(home.getAbsolutePath(), new File(home, "solr.xml")); server = new EmbeddedSolrServer(container, indexName); } public void restartCore() throws ParserConfigurationException, IOException, SAXException { log.info("restarting core: " + indexName); container.reload(indexName); } public SolrServer getServer() { return server; } public IndexSchema getSchema() { return schema; } public void setSchema(IndexSchema schema) { this.schema = schema; } public Set getDsIds() { return dsIds; } public void setFeeding(boolean isFeeding) { this.isFeeding = isFeeding; } public boolean isFeeding() { return isFeeding; } }