package org.genedb.crawl.elasticsearch.index; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; import org.apache.log4j.Logger; import org.elasticsearch.client.Client; import org.genedb.crawl.elasticsearch.Connection; import org.genedb.crawl.elasticsearch.LocalConnection; import org.genedb.crawl.elasticsearch.TransportConnection; import org.genedb.crawl.json.JsonIzer; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.Option; public abstract class IndexBuilder { static Logger logger = Logger.getLogger(IndexBuilder.class); @Option(name = "-h", aliases = {"--help"}, usage = "Print help") public boolean help; @Option(name = "-pe", aliases = {"--properties_elasticsearch"}, usage = "A properties file specifying elastic search connection details", required=true) public File elasticSearchPropertiesFile; protected Properties elasticSearchProperties; protected JsonIzer jsonIzer = new JsonIzer(); protected Client client; protected Connection connection; public abstract void run() throws Exception; protected IndexBuilder prerun (String[] args) throws Exception { CmdLineParser parser = new CmdLineParser(this); try { parser.parseArgument(args); if (this.help) { parser.setUsageWidth(80); parser.printUsage(System.out); System.exit(1); } this.run(); } catch (CmdLineException e) { logger.error(e.getMessage()); parser.setUsageWidth(80); parser.printUsage(System.out); System.exit(1); } /*finally { closeIndex(); } */ return this; } protected void setupIndex() throws IOException { elasticSearchProperties = new Properties(); elasticSearchProperties.load(new FileInputStream(elasticSearchPropertiesFile)); // if transport connection if (elasticSearchProperties.getProperty("resource.elasticsearch.address.host") != null) { TransportConnection tc = new TransportConnection(); tc.setHost(elasticSearchProperties.getProperty("resource.elasticsearch.address.host")); if (elasticSearchProperties.getProperty("resource.elasticsearch.address.port") != null) { tc.setPort(Integer.parseInt(elasticSearchProperties.getProperty("resource.elasticsearch.address.port"))); } tc.setClusterName(elasticSearchProperties.getProperty("resource.elasticsearch.cluster.name")); tc.configure(); connection = tc; } else { LocalConnection lc = new LocalConnection(); lc.setPathData(elasticSearchProperties.getProperty("resource.elasticsearch.local.pathdata")); lc.setPathLogs(elasticSearchProperties.getProperty("resource.elasticsearch.local.pathlogs")); lc.configure(); connection = lc; } connection.setIndex(elasticSearchProperties.getProperty("resource.elasticsearch.index")); connection.setOntologyIndex(elasticSearchProperties.getProperty("resource.elasticsearch.ontologyIndex")); connection.setFeatureType(elasticSearchProperties.getProperty("resource.elasticsearch.featureType")); connection.setOrganismType(elasticSearchProperties.getProperty("resource.elasticsearch.organismType")); connection.setRegionType(elasticSearchProperties.getProperty("resource.elasticsearch.regionType")); client = connection.getClient(); } public void closeIndex() { if (connection != null) { connection.close(); } } }