package eu.europeana.cloud.service.dls.solr.mock_impl;
import eu.europeana.cloud.service.dls.solr.SolrConnectionProvider;
import java.io.File;
import java.net.URL;
import javax.annotation.PreDestroy;
import org.apache.commons.io.FileUtils;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.core.CoreContainer;
import org.springframework.stereotype.Service;
/**
* Establishes connection to embedded Solr.
*/
@Service
public class EmbeddedSolrConnectionProvider implements SolrConnectionProvider {
/**
* Instance used for connecting with Solr server.
*/
private SolrServer solrServer;
/**
* Creates EmbeddedSolrServer instance using config files from solr_home directory.
*/
public EmbeddedSolrConnectionProvider() {
File solrConfig = findFile("/solr_home/solr.xml");
File solrHome = findFile("/solr_home/");
CoreContainer container = CoreContainer.createAndLoad(solrHome.getAbsolutePath(), solrConfig);
solrServer = new EmbeddedSolrServer(container, "");
}
private File findFile(String filePath) {
URL resource = this.getClass().getResource(filePath);
if (resource == null) {
throw new IllegalStateException("File " + filePath + " not found!");
}
File file = FileUtils.toFile(resource);
if (file == null) {
throw new IllegalStateException("File " + resource + " not found!");
}
if (!file.exists()) {
throw new IllegalStateException("File " + file + " does not exist!");
}
return file;
}
/**
* Return solr server instance.
*
* @return instance of Solr server
*/
@Override
public SolrServer getSolrServer() {
return solrServer;
}
/**
* Disconnects from Solr server.
*/
@PreDestroy
public void disconnect() {
solrServer.shutdown();
solrServer = null;
}
}