package pl.edu.icm.saos.search.config.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ApplicationContextEvent;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Service;
import pl.edu.icm.saos.search.config.model.IndexConfiguration;
/**
* Class responsible for loading and performing shutdown of all indexes.
* @author madryk
*/
@Service
public class SolrLoader implements ApplicationListener<ApplicationContextEvent> {
private SolrHomeLocationPolicy solrHomeLocationPolicy;
private SolrIndexConfigurationCopier indexConfigurationCopier;
private IndexReloader indexReloader;
private List<IndexConfiguration> indexesConfigurations;
@Value("${solr.index.configuration.copy}")
private boolean copyConfiguration = false;
//------------------------ LOGIC --------------------------
/**
* Handles loading of all indexes. Should be run before using search module.
*/
public void load() {
for (IndexConfiguration indexConfiguration : indexesConfigurations) {
if (copyConfiguration) {
indexConfigurationCopier.copyIndexConfiguration(indexConfiguration, solrHomeLocationPolicy.getSolrHome());
}
indexReloader.reloadIndex(indexConfiguration);
}
}
/**
* Performs cleanup of all indexes. Should be run when search module
* is no longer needed.
*/
public void shutdown() {
for (IndexConfiguration indexConfiguration : indexesConfigurations) {
if (copyConfiguration) {
indexConfigurationCopier.cleanupIndexConfiguration(indexConfiguration, solrHomeLocationPolicy.getSolrHome());
}
}
solrHomeLocationPolicy.cleanup();
}
@Override
public void onApplicationEvent(ApplicationContextEvent event) {
if (event instanceof ContextRefreshedEvent) {
load();
} else if (event instanceof ContextClosedEvent) {
shutdown();
}
}
//------------------------ SETTERS --------------------------
@Autowired
public void setSolrHomeLocationPolicy(
SolrHomeLocationPolicy solrHomeLocationPolicy) {
this.solrHomeLocationPolicy = solrHomeLocationPolicy;
}
@Autowired
public void setIndexConfigurationCopier(
SolrIndexConfigurationCopier indexConfigurationCopier) {
this.indexConfigurationCopier = indexConfigurationCopier;
}
@Autowired
public void setIndexReloader(IndexReloader indexReloader) {
this.indexReloader = indexReloader;
}
@Autowired
public void setIndexesConfigurations(
List<IndexConfiguration> indexesConfigurations) {
this.indexesConfigurations = indexesConfigurations;
}
public void setCopyConfiguration(boolean copyConfiguration) {
this.copyConfiguration = copyConfiguration;
}
}