package com.senseidb.clue;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import com.senseidb.clue.api.BytesRefDisplay;
import com.senseidb.clue.api.DefaultDirectoryBuilder;
import com.senseidb.clue.api.DefaultIndexReaderFactory;
import com.senseidb.clue.api.DefaultQueryBuilder;
import com.senseidb.clue.api.DirectoryBuilder;
import com.senseidb.clue.api.IndexReaderFactory;
import com.senseidb.clue.api.QueryBuilder;
import com.senseidb.clue.api.RawBytesRefDisplay;
import com.senseidb.clue.api.StringBytesRefDisplay;
public class ClueConfiguration {
private static final String CLUE_CONF_FILE = "clue.conf";
private static final String DIRECTORY_BUILDER_PARAM = "directory.builder";
private static final String ANALYZER_QUERY_PARAM = "analyzer.query";
private static final String INDEX_READER_FACTORY_PARAM = "indexreader.factory";
private static final String QUERY_BUILDER_PARAM = "query.builder";
private static final String TERM_BYTESREF_DISPLAY = "term.bytesref.display";
private static final String PAYLOAD_BYTESREF_DISPLAY = "payload.bytesref.display";
private final Analyzer analyzerQuery;
private final DirectoryBuilder dirBuilder;
private final QueryBuilder queryBuilder;
private final IndexReaderFactory indexReaderFactory;
private final BytesRefDisplay termBytesRefDisplay;
private final BytesRefDisplay payloadBytesRefDisplay;
private final Properties config;
private static <T> T getInstance(String className, T defaultInstance) {
try {
if (className == null) {
return defaultInstance;
}
T obj = (T) (Class.forName(className).newInstance());
return obj;
} catch (Exception e) {
System.out.println("unable to obtain instance of class: " + className);
return defaultInstance;
}
}
public Properties getProperties() {
return config;
}
private ClueConfiguration(Properties config) {
this.config = config;
analyzerQuery = getInstance(config.getProperty(ANALYZER_QUERY_PARAM),
new StandardAnalyzer());
dirBuilder = getInstance(config.getProperty(DIRECTORY_BUILDER_PARAM),
new DefaultDirectoryBuilder());
queryBuilder = getInstance(config.getProperty(QUERY_BUILDER_PARAM),
new DefaultQueryBuilder());
indexReaderFactory = getInstance(config.getProperty(INDEX_READER_FACTORY_PARAM),
new DefaultIndexReaderFactory());
termBytesRefDisplay = getInstance(config.getProperty(TERM_BYTESREF_DISPLAY),
StringBytesRefDisplay.INSTANCE);
payloadBytesRefDisplay = getInstance(config.getProperty(PAYLOAD_BYTESREF_DISPLAY),
RawBytesRefDisplay.INSTANCE);
System.out.println("Analyzer: \t\t" + analyzerQuery.getClass());
System.out.println("Query Builder: \t\t" + queryBuilder.getClass());
System.out.println("Directory Builder: \t" + dirBuilder.getClass());
System.out.println("IndexReader Factory: \t" + indexReaderFactory.getClass());
System.out.println("Term Bytesref Display: \t" + termBytesRefDisplay.getClass());
System.out.println("Payload Bytesref Display: \t" + payloadBytesRefDisplay.getClass());
}
public Analyzer getAnalyzerQuery() {
return analyzerQuery;
}
public DirectoryBuilder getDirBuilder() {
return dirBuilder;
}
public QueryBuilder getQueryBuilder() {
return queryBuilder;
}
public IndexReaderFactory getIndexReaderFactory() {
return indexReaderFactory;
}
public BytesRefDisplay getTermBytesRefDisplay() {
return termBytesRefDisplay;
}
public BytesRefDisplay getPayloadBytesRefDisplay() {
return payloadBytesRefDisplay;
}
public static ClueConfiguration load() throws IOException {
String confDirPath = System.getProperty("config.dir");
if (confDirPath == null) {
confDirPath = "config";
}
File confFile = new File(confDirPath, CLUE_CONF_FILE);
if (confFile.exists() && confFile.isFile()) {
System.out.println("using configuration file found at: " + confFile.getAbsolutePath());
Properties props = new Properties();
FileReader freader = new FileReader(confFile);
props.load(freader);
freader.close();
return new ClueConfiguration(props);
} else {
// use default
System.out.println("no configuration found, using default configuration");
return new ClueConfiguration(new Properties());
}
}
}