/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.bbg.cli;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.util.ArgumentChecker;
/**
* Creates common command line options for Bloomberg scripts
*/
public final class BloombergCliOptions {
/** Logger. */
private static final Logger s_logger = LoggerFactory.getLogger(BloombergCliOptions.class);
/**
* Fields option name.
*/
public static final String FIELDS_OPTION = "fields";
/**
* Fields file option name.
*/
public static final String FIELDS_FILE_OPTION = "fieldsFile";
/**
* Data providers option name.
*/
public static final String DATAPROVIDERS_OPTION = "dataproviders";
/**
* Help option name.
*/
public static final String HELP_OPTION = "help";
/**
* Position master option name.
*/
public static final String POSITION_MASTER_OPTION = "pm";
/**
* Reload option name.
*/
public static final String RELOAD_OPTION = "reload";
/**
* Update option name.
*/
public static final String UPDATE_OPTION = "update";
/**
* Start date option name.
*/
public static final String START_OPTION = "start";
/**
* End date option name.
*/
public static final String END_OPTION = "end";
/**
* Unique option name.
*/
public static final String UNIQUE_ID_OPTION = "unique";
/**
* CSV option name.
*/
public static final String CSV_OPTION = "csv";
/**
* Identifiers option name.
*/
public static final String IDENTIFIERS_OPTION = "identifiers";
/**
* Output file option name.
*/
public static final String OUPUT_OPTION = "output";
/**
* Host option name.
*/
public static final String HOST_OPTION = "host";
/**
* Port option name.
*/
public static final String PORT_OPTION = "port";
private boolean _dataFields;
private boolean _dataProviders;
private boolean _help;
private boolean _identifiers;
private boolean _output;
private boolean _dataFieldsRequired;
private boolean _dataProvidersRequired;
private boolean _identifiersRequired;
private boolean _outputRequired;
private boolean _dataFieldsFileRequired;
private boolean _dataFieldsFile;
private Options _options;
private boolean _port;
private boolean _portRequired;
private boolean _hostRequired;
private boolean _host;
/**
* Restricted constructor.
*/
private BloombergCliOptions() {
}
/**
* Checks if options has data fields option.
* @return true or false
*/
public boolean hasFields() {
return _dataFields;
}
/**
* Checks if options has data fields file option.
* @return true or false
*/
public boolean hasFieldsFile() {
return _dataFieldsFile;
}
/**
* Checks if options has dataProviders option.
* @return true or false
*/
public boolean hasDataProviders() {
return _dataProviders;
}
/**
* Checks if options has help option.
* @return true or false
*/
public boolean hasHelp() {
return _help;
}
/**
* Checks if options has identifiers option.
* @return true or false
*/
public boolean hasIdentifiers() {
return _identifiers;
}
/**
* Checks if options has output option.
* @return true or false
*/
public boolean hasOutput() {
return _output;
}
/**
* Checks if options has host option.
* @return true or false
*/
public boolean hasHost() {
return _host;
}
/**
* Checks if options has port option.
* @return true or false
*/
public boolean hasPort() {
return _port;
}
private void createOptions() {
_options = new Options();
if (hasFields()) {
_options.addOption(createFieldsOption());
}
if (hasFieldsFile()) {
_options.addOption(createDataFieldsFileOption());
}
if (hasDataProviders()) {
_options.addOption(createDataProviderOption());
}
if (hasHelp()) {
_options.addOption(createHelpOption());
}
if (hasIdentifiers()) {
_options.addOption(createIdentifiersOption());
}
if (hasOutput()) {
_options.addOption(createOutputOption());
}
if (hasHost()) {
_options.addOption(createHostOption());
}
if (hasPort()) {
_options.addOption(createPortOption());
}
// options.addOption(createReloadOption());
// options.addOption(createLoadPositionMasterOption());
// options.addOption(createUpdateOption());
// options.addOption(createStartOption());
// options.addOption(createEndOption());
// options.addOption(createUniqueOption());
// options.addOption(createCsvOption());
}
public Options getOptions() {
return _options;
}
public void printUsage(Class<?> clazz) {
ArgumentChecker.notNull(clazz, "class");
HelpFormatter formatter = new HelpFormatter();
formatter.setWidth(120);
formatter.printHelp("java " + clazz.getSimpleName() + " [options]... [files]...", _options);
}
private Option createOutputOption() {
Option option = new Option("o", OUPUT_OPTION, true, "output file");
option.setRequired(_outputRequired);
return option;
}
private Option createFieldsOption() {
Option option = new Option("F", FIELDS_OPTION, true, "List of bloomberg fields");
option.setArgName("PX_LAST,VOLUME,LAST_VOLATILITY");
option.setRequired(_dataFieldsRequired);
return option;
}
private Option createDataFieldsFileOption() {
Option option = new Option("f", FIELDS_FILE_OPTION, true, "data fields file");
option.setRequired(_dataFieldsFileRequired);
return option;
}
private Option createDataProviderOption() {
Option option = new Option("p", DATAPROVIDERS_OPTION, true, "List of data providers");
option.setArgName("CMPL,CMPT");
option.setRequired(_dataProvidersRequired);
return option;
}
private Option createIdentifiersOption() {
Option option = new Option("i", IDENTIFIERS_OPTION, true, "identifiers file");
option.setRequired(_identifiersRequired);
return option;
}
private Option createHelpOption() {
return new Option(HELP_OPTION, false, "Print this message");
}
private Option createHostOption() {
Option option = new Option("h", HOST_OPTION, true, "bloomberg server host");
option.setRequired(_hostRequired);
return option;
}
private Option createPortOption() {
Option option = new Option("p", PORT_OPTION, true, "bloomberg server port");
option.setRequired(_portRequired);
return option;
}
private void setDataFields(boolean field) {
_dataFields = field;
}
/**
* @param dataFieldsRequired
*/
private void setDataFieldsRequired(boolean dataFieldsRequired) {
_dataFieldsRequired = dataFieldsRequired;
}
private void setDataProviders(boolean dataProviders) {
_dataProviders = dataProviders;
}
/**
* @param dataProvidersRequired
*/
private void setDataProvidersRequired(boolean dataProvidersRequired) {
_dataProvidersRequired = dataProvidersRequired;
}
private void setHelp(boolean help) {
_help = help;
}
private void setIdentifiers(boolean identifer) {
_identifiers = identifer;
}
/**
* @param identifiersRequired
*/
private void setIdentifiersRequired(boolean identifiersRequired) {
_identifiersRequired = identifiersRequired;
}
private void setOutput(boolean output) {
_output = output;
}
/**
* @param outputRequired
*/
private void setOutputRequired(boolean outputRequired) {
_outputRequired = outputRequired;
}
/**
* @param dataFieldsFileRequired
*/
private void setDataFieldsFileRequired(boolean dataFieldsFileRequired) {
_dataFieldsFileRequired = dataFieldsFileRequired;
}
/**
* @param dataFieldsFile
*/
private void setDataFieldsFile(boolean dataFieldsFile) {
_dataFieldsFile = dataFieldsFile;
}
/**
* @param port
*/
private void setPort(boolean port) {
_port = port;
}
/**
* @param portRequired
*/
private void setPortRequired(boolean portRequired) {
_portRequired = portRequired;
}
/**
* @param hostRequired
*/
private void setHostRequired(boolean hostRequired) {
_hostRequired = hostRequired;
}
/**
* @param host
*/
private void setHost(boolean host) {
_host = host;
}
/**
* Parses the command line arguments with created options
*
* @param args the command line
* @return the commandline or null if it can not be parsed
*/
public CommandLine parse(String[] args) {
CommandLineParser parser = new PosixParser();
CommandLine result = null;
try {
result = parser.parse(_options, args);
} catch (ParseException e) {
s_logger.warn("error parsing command line arguments {}", new Object[]{args});
}
return result;
}
/**
* Builds command line options based on requested parameters
*/
public static class Builder {
private boolean _dataFields;
private boolean _dataFieldsRequired;
private boolean _dataFieldsFile;
private boolean _dataFieldsFileRequired;
private boolean _dataProviders;
private boolean _dataProvidersRequired;
private boolean _help;
private boolean _identifiers;
private boolean _identifiersRequired;
private boolean _output;
private boolean _outputRequired;
private boolean _host;
private boolean _hostRequired;
private boolean _port;
private boolean _portRequired;
public Builder() {
_help = true;
}
/**
* Builds options with data fields
*
* @param required true if required
* @return the builder
*/
public Builder withDataFields(boolean required) {
_dataFields = true;
_dataFieldsRequired = required;
return this;
}
public Builder withDataFieldsFile(boolean required) {
_dataFieldsFile = true;
_dataFieldsFileRequired = required;
return this;
}
/**
* Builds options with data provider
* @param required true if required
* @return the builder
*/
public Builder withDataProviders(boolean required) {
_dataProviders = true;
_dataProvidersRequired = required;
return this;
}
public Builder withHelp() {
_help = true;
return this;
}
public Builder withIdentifiers(boolean required) {
_identifiers = true;
_identifiersRequired = required;
return this;
}
public Builder withOutput(boolean required) {
_output = true;
_outputRequired = required;
return this;
}
public Builder withHost(boolean required) {
_host = true;
_hostRequired = required;
return this;
}
public Builder withPort(boolean required) {
_port = true;
_portRequired = required;
return this;
}
public BloombergCliOptions build() {
BloombergCliOptions builder = new BloombergCliOptions();
builder.setDataFields(_dataFields);
builder.setDataFieldsRequired(_dataFieldsRequired);
builder.setDataFieldsFile(_dataFieldsFile);
builder.setDataFieldsFileRequired(_dataFieldsFileRequired);
builder.setDataProviders(_dataProviders);
builder.setDataProvidersRequired(_dataProvidersRequired);
builder.setHelp(_help);
builder.setIdentifiers(_identifiers);
builder.setIdentifiersRequired(_identifiersRequired);
builder.setOutput(_output);
builder.setOutputRequired(_outputRequired);
builder.setHost(_host);
builder.setHostRequired(_hostRequired);
builder.setPort(_port);
builder.setPortRequired(_portRequired);
builder.createOptions();
return builder;
}
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}