/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.tool.portfolio;
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 com.opengamma.integration.copier.portfolio.rowparser.JodaBeanRowParser;
import com.opengamma.integration.copier.portfolio.writer.PositionWriter;
import com.opengamma.integration.copier.portfolio.writer.SingleSheetSimplePositionWriter;
import com.opengamma.scripts.Scriptable;
/**
* The portfolio saver tool
*/
@Scriptable
public class PortfolioTemplateCreationTool {
/** Help command line option. */
private static final String HELP_OPTION = "h";
/** Asset class flag */
private static final String SECURITY_TYPE_OPT = "s";
/** Logback flag (ignored) */
private static final String LOGBACK_OPTION = "l";
/** The list of security types - needs to be updated whenever a new sec type is added to the system */
private static final String[] s_securityTypes = {
"CorporateBond", "GovernmentBond", "MunicipalBond",
"CapFloorCMSSpread", "CapFloor",
"Cash",
"CDS", "LegacyFixedRecoveryCDS", "LegacyRecoveryLockCDS", "LegacyVanillaCDS", "StandardFixedRecoveryCDS", "StandardRecoveryLockCDS", "StandardVanillaCDS",
"ContinuousZeroDeposit", "PeriodicZeroDeposit", "SimpleZeroDeposit",
"Equity", "EquityVarianceSwap",
"AgricultureForward", "CommodityForward", "EnergyForward", "MetalForward",
"FRA",
"AgricultureFuture", "BondFuture", "CommodityFuture", "EnergyFuture", "EquityFuture", "EquityIndexDividendFuture", "Future", "FXFuture",
"IndexFuture", "InterestRateFuture", "MetalFuture", "StockFuture",
"FXForward", "NonDeliverableFXForward",
"BondFutureOption", "CommodityFutureOption", "EquityBarrierOption", "EquityIndexDividendFutureOption", "EquityIndexFutureOption", "EquityIndexOption", "EquityOption", "FXBarrierOption",
"FXDigitalOption", "FXOption", "IRFutureOption", "NonDeliverableFXDigitalOption", "NonDeliverableFXOption",
"ForwardSwap", "Swap"
};
/**
* The command line.
*/
private CommandLine _commandLine;
//-------------------------------------------------------------------------
/**
* Main method to run the tool.
*
* @param args the arguments, not null
*/
public static void main(String[] args) { //CSIGNORE
new PortfolioTemplateCreationTool().doRun(args);
System.exit(0);
}
//-------------------------------------------------------------------------
/**
* Loads the test portfolio into the position master.
* @param args the arguments to run with, not null
*/
protected void doRun(String[] args) {
Options options = createOptions();
CommandLineParser parser = new PosixParser();
CommandLine line;
try {
line = parser.parse(options, args);
} catch (ParseException e) {
usage(options);
return;
}
_commandLine = line;
if (line.hasOption(HELP_OPTION)) {
usage(options);
return;
}
String[] securityTypes = getCommandLine().getOptionValues(SECURITY_TYPE_OPT)[0].equals("all")
? s_securityTypes
: getCommandLine().getOptionValues(SECURITY_TYPE_OPT);
// Create portfolio writers to write header rows
for (String securityType : securityTypes) {
PositionWriter positionWriter = new SingleSheetSimplePositionWriter(securityType + ".csv",
JodaBeanRowParser.newJodaBeanRowParser(securityType));
positionWriter.close();
}
}
protected Options createOptions() {
Options options = new Options();
String securityTypes = "";
for (String s : s_securityTypes) {
securityTypes += " " + s;
}
Option assetClassOption = new Option(
SECURITY_TYPE_OPT, "securitytype", true,
"The security type(s) for which to generate a template, or 'all' to create a template for each available security type: "
+ securityTypes);
assetClassOption.setRequired(true);
options.addOption(assetClassOption);
Option helpOption = new Option(
HELP_OPTION, "help", false,
"prints this message");
options.addOption(helpOption);
Option logbackOption = new Option(
LOGBACK_OPTION, "logback", true,
"Logback (ignored)");
options.addOption(logbackOption);
return options;
}
protected void usage(Options options) {
HelpFormatter formatter = new HelpFormatter();
formatter.setWidth(120);
formatter.printHelp("java " + getClass().getName(), options, true);
}
protected CommandLine getCommandLine() {
return _commandLine;
}
}