/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.tool.holiday;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.threeten.bp.LocalDate;
import org.threeten.bp.format.DateTimeFormatter;
import com.opengamma.component.tool.AbstractTool;
import com.opengamma.financial.tool.ToolContext;
import com.opengamma.scripts.Scriptable;
import com.opengamma.util.money.Currency;
/**
* Tool to return whether or not today is a holiday in a given ccy.
*/
@Scriptable
public class HolidayQueryTool extends AbstractTool<ToolContext> {
/**
* Main method to run the tool.
*
* @param args the standard tool arguments, not null
*/
public static void main(String[] args) { // CSIGNORE
new HolidayQueryTool().invokeAndTerminate(args);
}
//-------------------------------------------------------------------------
@Override
protected void doRun() {
ToolContext toolContext = getToolContext();
CommandLine commandLine = getCommandLine();
boolean verbose = commandLine.hasOption("verbose");
if ((commandLine.hasOption("today") && commandLine.hasOption("yesterday")) ||
(commandLine.hasOption("date") && commandLine.hasOption("today")) ||
(commandLine.hasOption("date") && commandLine.hasOption("yesterday"))) {
System.err.println("Can only return today OR yesterday OR date!");
System.exit(2);
}
String ccyStr = commandLine.getOptionValue("ccy");
try {
Currency ccy = Currency.of(ccyStr);
LocalDate date = null;
if (commandLine.hasOption("yesterday")) {
date = LocalDate.now().minusDays(1);
} else if (commandLine.hasOption("today")) {
date = LocalDate.now();
} else if (commandLine.hasOption("date")) {
try {
date = (LocalDate) DateTimeFormatter.BASIC_ISO_DATE.parse(commandLine.getOptionValue("date"));
} catch (Exception e) {
System.err.println("Could not parse date, should be YYYYMMDD format");
System.exit(2);
}
} else {
System.err.println("Must specify either today or yesterday option");
System.exit(2);
}
boolean isHoliday = toolContext.getHolidaySource().isHoliday(date, ccy);
if (isHoliday) {
if (verbose) {
System.out.println("Day was a holiday");
}
System.exit(0);
} else {
if (verbose) {
System.out.println("Day was not a holiday");
}
System.exit(1);
}
} catch (IllegalArgumentException iae) {
System.err.println("Invalid currency code");
System.exit(2);
}
}
@Override
protected Options createOptions(boolean mandatoryConfig) {
Options options = super.createOptions(mandatoryConfig);
options.addOption(createCurrencyOption());
options.addOption(createTodayOption());
options.addOption(createYesterdayOption());
options.addOption(createDateOption());
options.addOption(createVerboseOption());
return options;
}
@SuppressWarnings("static-access")
private Option createCurrencyOption() {
return OptionBuilder.isRequired(true)
.hasArg()
.withArgName("currency code")
.withDescription("The currency you want to look up")
.withLongOpt("currency")
.create("ccy");
}
@SuppressWarnings("static-access")
private Option createTodayOption() {
return OptionBuilder.isRequired(false)
.withDescription("Return if today is a holiday")
.withLongOpt("today")
.create("t");
}
@SuppressWarnings("static-access")
private Option createYesterdayOption() {
return OptionBuilder.isRequired(false)
.hasArg(false)
.withDescription("Return if yesterday is a holiday")
.withLongOpt("yesterday")
.create("y");
}
@SuppressWarnings("static-access")
private Option createDateOption() {
return OptionBuilder.isRequired(false)
.hasArg(true)
.withArgName("date")
.withDescription("Return if date (YYYYMMDD) is a holiday")
.withLongOpt("yesterday")
.create("y");
}
@SuppressWarnings("static-access")
private Option createVerboseOption() {
return OptionBuilder.isRequired(false)
.hasArg(false)
.withDescription("Verbose output")
.withLongOpt("verbose")
.create("v");
}
protected Class<?> getEntryPointClass() {
return getClass();
}
@Override
protected void usage(Options options) {
HelpFormatter formatter = new HelpFormatter();
formatter.setWidth(120);
formatter.printHelp("config-import-export-tool.sh [file...]", options, true);
}
}