All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hmsonline.virgil.cli.VirgilCommand Maven / Gradle / Ivy

The newest version!
package com.hmsonline.virgil.cli;

import org.apache.cassandra.thrift.CassandraDaemon;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.OptionGroup;
import org.apache.commons.cli.Options;

import com.hmsonline.virgil.CassandraStorage;
import com.hmsonline.virgil.VirgilService;
import com.hmsonline.virgil.config.VirgilConfiguration;
import com.hmsonline.virgil.index.SolrIndexer;
import com.yammer.dropwizard.AbstractService;
import com.yammer.dropwizard.cli.ServerCommand;

public class VirgilCommand extends ServerCommand {
	public VirgilCommand(String name) {
		super(VirgilConfiguration.class);
	}

	@SuppressWarnings("static-access")
	@Override
	public Options getOptions() {
		Options options = new Options();
		OptionGroup runMode = new OptionGroup();
		Option host = OptionBuilder.withArgName("h").hasArg().withDescription("Host name for Cassandra.")
				.create("host");
		Option embedded = OptionBuilder.withArgName("e").withDescription("Run in embedded mode").create("embedded");
		runMode.addOption(host);
		runMode.addOption(embedded);
		options.addOptionGroup(runMode);		
		return options;
	}

	private CassandraStorage createCassandraStorage(CommandLine params, VirgilConfiguration config)
			throws Exception {
		SolrIndexer indexer = new SolrIndexer(config);

		if (params.hasOption("embedded")) {
			System.out.println("Starting virgil with embedded cassandra server.");
			String yamlFile = config.getCassandraYaml();
			if (yamlFile == null)
				yamlFile = "cassandra.yaml";
			System.setProperty("cassandra.config", yamlFile);
			System.setProperty("cassandra-foreground", "true");
			System.setProperty(VirgilConfiguration.CASSANDRA_PORT_PROPERTY, "9160");
			System.setProperty(VirgilConfiguration.CASSANDRA_HOST_PROPERTY, "localhost");
            System.setProperty(VirgilConfiguration.CASSANDRA_EMBEDDED, "1");
			CassandraDaemon.main(null);
			return new CassandraStorage(config, indexer);
		} else {
			String cassandraHost = params.getOptionValue("host");
			if (cassandraHost == null)
				throw new RuntimeException("Need to specify a host if not running in embedded mode. (-e)");
			String cassandraPort = params.getOptionValue("port");
			if (cassandraPort == null)
				cassandraPort = "9160";
            System.setProperty(VirgilConfiguration.CASSANDRA_HOST_PROPERTY, cassandraHost);
			System.setProperty(VirgilConfiguration.CASSANDRA_PORT_PROPERTY, cassandraPort);
            System.setProperty(VirgilConfiguration.CASSANDRA_EMBEDDED, "0");
			System.out.println("Starting virgil against remote cassandra server [" + cassandraHost + ":"
					+ cassandraPort + "]");
			return new CassandraStorage(config, indexer);
		}
	}

	@Override
	protected void run(AbstractService service, VirgilConfiguration config, CommandLine params)
			throws Exception {
		assert (service instanceof VirgilService);
		VirgilService virgil = (VirgilService) service;
		CassandraStorage storage = this.createCassandraStorage(params, config);
		virgil.setStorage(storage);
		virgil.setConfig(config);
		super.run(service, config, params);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy