package org.nextprot.api.solr;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import org.nextprot.api.commons.exception.SearchConfigException;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Lazy
@Component
public class SolrConfiguration {
private Map<String, SolrIndex> indexes = new HashMap<String, SolrIndex>();
private List<Class<? extends SolrIndex>> indexClasses;
@PostConstruct
public void init() throws InstantiationException, IllegalAccessException {
SolrIndex instance = null;
for(Class<? extends SolrIndex> clazz : this.indexClasses) {
instance = clazz.newInstance();
addIndex(instance);
}
}
public void setIndexes(List<Class<? extends SolrIndex>> indexClasses) {
this.indexClasses = indexClasses;
}
private void addIndex(SolrIndex index) {
if (index.getFields() != null && (index.getFields().isMemberClass() || index.getFields().isEnum()))
this.indexes.put(index.getName(), index);
else throw new SearchConfigException("Didn't setup fields for index "+index.getName());
}
/**
*
* @param indexName
* @return
*/
public SolrIndex getIndexByName(String indexName) {
if(this.indexes.containsKey(indexName))
return this.indexes.get(indexName);
else throw new SearchConfigException("Index "+indexName+" does not exist. Available indexes: "+this.indexes.entrySet());
}
public List<SolrIndex> getIndexes() {
return new ArrayList<SolrIndex>(this.indexes.values());
}
public boolean hasIndex(String indexName) {
return this.indexes.containsKey(indexName);
}
}