/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.tool.marketdata;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.component.tool.AbstractTool;
import com.opengamma.financial.tool.ToolContext;
import com.opengamma.id.UniqueId;
import com.opengamma.integration.copier.sheet.SheetFormat;
import com.opengamma.integration.copier.snapshot.copier.SimpleSnapshotCopier;
import com.opengamma.integration.copier.snapshot.copier.SnapshotCopier;
import com.opengamma.integration.copier.snapshot.reader.MasterSnapshotReader;
import com.opengamma.integration.copier.snapshot.reader.SnapshotReader;
import com.opengamma.integration.copier.snapshot.writer.CsvSnapshotWriter;
import com.opengamma.integration.copier.snapshot.writer.SnapshotWriter;
import com.opengamma.integration.copier.snapshot.writer.XlsSnapshotWriter;
import com.opengamma.master.marketdatasnapshot.MarketDataSnapshotMaster;
import com.opengamma.scripts.Scriptable;
/** The entry point for running OpenGamma batches. */
@Scriptable
public class MarketDataSnapshotExportTool extends AbstractTool<ToolContext> {
/** Logger. */
private static final Logger s_logger = LoggerFactory.getLogger(MarketDataSnapshotExportTool.class);
/** File name option flag */
private static final String FILE_NAME_OPTION = "f";
/** Snapshot uid option flag */
private static final String SNAPSHOT_UID_OPTION = "uid";
/** Snapshot name option flag */
private static final String SNAPSHOT_NAME_OPTION = "n";
/** Snapshot version date option flag */
private static final String SNAPSHOT_DATE_OPTION = "d";
private static ToolContext s_context;
//-------------------------------------------------------------------------
/**
* Main method to run the tool.
*
* @param args the standard tool arguments, not null
*/
public static void main(final String[] args) { // CSIGNORE
new MarketDataSnapshotExportTool().invokeAndTerminate(args);
}
//-------------------------------------------------------------------------
@Override
protected void doRun() throws Exception {
s_context = getToolContext();
SnapshotUtils snapshotUtils = SnapshotUtils.of(s_context.getMarketDataSnapshotMaster());
if (!MarketDataSnapshotToolUtils.handleQueryOptions(snapshotUtils, getCommandLine())) {
SnapshotReader snapshotReader = constructSnapshotReader(UniqueId.parse(getCommandLine().getOptionValue(
SNAPSHOT_UID_OPTION)));
SnapshotWriter snapshotWriter = constructSnapshotWriter(getCommandLine().getOptionValue(FILE_NAME_OPTION));
SnapshotCopier snapshotCopier = new SimpleSnapshotCopier();
snapshotCopier.copy(snapshotReader, snapshotWriter);
// close the reader and writer
snapshotReader.close();
snapshotWriter.close();
}
System.exit(0);
}
private static SnapshotReader constructSnapshotReader(UniqueId uniqueId) {
MarketDataSnapshotMaster marketDataSnapshotMaster = s_context.getMarketDataSnapshotMaster();
if (marketDataSnapshotMaster == null) {
s_logger.warn("No market data snapshot masters found at {}", s_context);
}
return new MasterSnapshotReader(uniqueId, marketDataSnapshotMaster);
}
private static SnapshotWriter constructSnapshotWriter(String filename) {
MarketDataSnapshotMaster marketDataSnapshotMaster = s_context.getMarketDataSnapshotMaster();
if (marketDataSnapshotMaster == null) {
s_logger.warn("No market data snapshot masters found at {}", s_context);
}
if (SheetFormat.of(filename) == SheetFormat.CSV) {
return new CsvSnapshotWriter(filename);
} else if (SheetFormat.of(filename) == SheetFormat.XLS) {
return new XlsSnapshotWriter(filename);
} else {
throw new OpenGammaRuntimeException("Input filename should end in .CSV or .XLS");
}
}
//-------------------------------------------------------------------------
@Override
protected Options createOptions(boolean mandatoryConfig) {
final Options options = super.createOptions(mandatoryConfig);
options.addOption(createSnapshotUidOption());
options.addOption(createFilenameOption());
options.addOption(createSnapshotNameOption());
options.addOption(createSnapshotDateOption());
options.addOption(MarketDataSnapshotToolUtils.createSnapshotListOption());
options.addOption(MarketDataSnapshotToolUtils.createSnapshotQueryOption());
options.addOption(MarketDataSnapshotToolUtils.createSnapshotVersionListOption());
return options;
}
private static Option createFilenameOption() {
final Option option = new Option(FILE_NAME_OPTION, "filename", true, "The path to the file to create and export to");
//option.setRequired(true);
option.setArgName("file path/name");
return option;
}
private static Option createSnapshotUidOption() {
final Option option = new Option(SNAPSHOT_UID_OPTION, "snapshotUid", true, "The snapshot unique identifier to export");
option.setArgName("snapshot uid");
return option;
}
private static Option createSnapshotNameOption() {
final Option option = new Option(SNAPSHOT_NAME_OPTION, "snapshot-name", true, "The snapshot name to export");
option.setArgName("snapshot name");
return option;
}
private static Option createSnapshotDateOption() {
final Option option = new Option(SNAPSHOT_DATE_OPTION, "snapshot-date", true, "Specify a version date for a named snapshot");
option.setArgName("snapshot name");
return option;
}
}