/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.tool.security;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.component.tool.AbstractTool;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;
import com.opengamma.integration.tool.IntegrationToolContext;
import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesLoader;
import com.opengamma.master.security.SecurityLoader;
import com.opengamma.scripts.Scriptable;
/**
* The exchange-traded security loader tool
*/
@Scriptable
public class ExchangeTradedSecurityLoaderTool extends AbstractTool<IntegrationToolContext> {
private static final Logger s_logger = LoggerFactory.getLogger(ExchangeTradedSecurityLoaderTool.class);
/** File name option flag */
private static final String FILE_NAME_OPT = "f";
/** Time series data provider option flag*/
private static final String TIME_SERIES_DATAPROVIDER_OPT = "p";
/** Time series data field option flag*/
private static final String TIME_SERIES_DATAFIELD_OPT = "d";
/** Populate time series */
private static final String POPULATE_TIME_SERIES_OPT = "ts";
private static final String DEFAULT_DATA_PROVIDER = "DEFAULT";
private static final String DEFAULT_DATA_FIELD = "PX_LAST";
//-------------------------------------------------------------------------
/**
* Main method to run the tool.
*
* @param args the standard tool arguments, not null
*/
public static void main(String[] args) { //CSIGNORE
new ExchangeTradedSecurityLoaderTool().invokeAndTerminate(args);
}
//-------------------------------------------------------------------------
/**
* Loads the portfolio into the position master.
*/
@Override
protected void doRun() {
IntegrationToolContext context = getToolContext();
SecurityLoader loader = context.getSecurityLoader();
Set<ExternalIdBundle> externalIdBundles = new LinkedHashSet<>();
Set<ExternalId> externalIds = new LinkedHashSet<>();
File file = new File(getCommandLine().getOptionValue(FILE_NAME_OPT));
if (file.exists()) {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
try {
ExternalId externalId = ExternalId.parse(line);
externalIdBundles.add(externalId.toBundle());
externalIds.add(externalId);
} catch (IllegalArgumentException iae) {
s_logger.error("Couldn't parse identifier {}, skipping", line);
}
}
} catch (IOException ioe) {
s_logger.error("Problem reading file");
System.exit(1);
}
} else {
s_logger.error("File not found");
System.exit(1);
}
s_logger.info("Starting to load securities");
Map<ExternalIdBundle, UniqueId> loadSecurities = loader.loadSecurities(externalIdBundles);
s_logger.info("Loaded {} securities", loadSecurities.size());
s_logger.info("Finished loading securities");
if (getCommandLine().hasOption(POPULATE_TIME_SERIES_OPT)) {
// Load time series
HistoricalTimeSeriesLoader tsLoader = context.getHistoricalTimeSeriesLoader();
String dataProvider = getCommandLine().getOptionValue(TIME_SERIES_DATAPROVIDER_OPT, DEFAULT_DATA_PROVIDER);
String dataField = getCommandLine().getOptionValue(TIME_SERIES_DATAFIELD_OPT, DEFAULT_DATA_FIELD);
s_logger.info("Starting to load time series from data provider {} using field {}", dataProvider, dataField);
Map<ExternalId, UniqueId> loadTimeSeries = tsLoader.loadTimeSeries(externalIds, dataProvider, dataField, null, null);
s_logger.info("Loaded {} time series", loadTimeSeries.size());
s_logger.info("Finished loading time series");
} else {
s_logger.info("Time series load not requested, skipping");
}
s_logger.info("Done.");
}
@Override
protected Options createOptions(boolean contextProvided) {
Options options = super.createOptions(contextProvided);
Option filenameOption = new Option(
FILE_NAME_OPT, "filename", true, "The path to the file containing data to import (Text file, one ID per line)");
filenameOption.setRequired(true);
options.addOption(filenameOption);
Option populateTimeSeriesOption = new Option(
POPULATE_TIME_SERIES_OPT, "time-series");
options.addOption(populateTimeSeriesOption);
populateTimeSeriesOption.setRequired(false);
Option timeSeriesDataProviderOption = new Option(
TIME_SERIES_DATAPROVIDER_OPT, "provider", true, "The name of the time series data provider (default DEFAULT)");
timeSeriesDataProviderOption.setRequired(false);
options.addOption(timeSeriesDataProviderOption);
Option timeSeriesDataFieldOption = new Option(
TIME_SERIES_DATAFIELD_OPT, "field", true, "The name of the time series data field (default PX_LAST)");
timeSeriesDataFieldOption.setRequired(false);
options.addOption(timeSeriesDataFieldOption);
return options;
}
}