/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.tool.marketdata; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.Map; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.threeten.bp.LocalDate; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.component.tool.AbstractTool; import com.opengamma.core.historicaltimeseries.impl.RedisSimulationSeriesSource; import com.opengamma.financial.tool.ToolContext; import com.opengamma.id.ExternalId; import com.opengamma.id.UniqueId; import com.opengamma.integration.copier.sheet.SheetFormat; import com.opengamma.integration.copier.timeseries.reader.SingleSheetMultiTimeSeriesReader; import com.opengamma.integration.copier.timeseries.reader.TimeSeriesReader; import com.opengamma.integration.copier.timeseries.writer.TimeSeriesWriter; import com.opengamma.scripts.Scriptable; import com.opengamma.timeseries.date.localdate.LocalDateDoubleEntryIterator; import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries; /** * The timeseries loader tool */ @Scriptable public class RedisSimulationSeriesLoaderTool extends AbstractTool<ToolContext> { /** File name option flag */ public static final String FILE_NAME_OPT = "f"; /** Time series data source option flag*/ public static final String TIME_SERIES_DATASOURCE_OPT = "s"; /** Time series data provider option flag*/ public static final String TIME_SERIES_DATAPROVIDER_OPT = "p"; /** Time series data field option flag*/ public static final String TIME_SERIES_DATAFIELD_OPT = "d"; /** Time series observation time option flag*/ public static final String TIME_SERIES_OBSERVATIONTIME_OPT = "o"; /** Time series ID scheme option flag*/ public static final String TIME_SERIES_IDSCHEME_OPT = "i"; /** Time series date format option flag*/ public static final String TIME_SERIES_DATEFORMAT_OPT = "t"; /** Write option flag */ public static final String WRITE_OPT = "w"; //------------------------------------------------------------------------- /** * Main method to run the tool. * * @param args the standard tool arguments, not null */ public static void main(String[] args) { //CSIGNORE new RedisSimulationSeriesLoaderTool().invokeAndTerminate(args); } //------------------------------------------------------------------------- /** * Loads the test portfolio into the position master. */ @Override protected void doRun() { if (!(getToolContext().getHistoricalTimeSeriesSource() instanceof RedisSimulationSeriesSource)) { throw new OpenGammaRuntimeException("HistoricalTimeSeriesSource from conrtext is not a RedisSimulationSeriesSource, got " + getToolContext().getHistoricalTimeSeriesSource() + ": note this tool must be run with a toolcontext config file not via -c http://localhost"); } final RedisSimulationSeriesSource source = (RedisSimulationSeriesSource) getToolContext().getHistoricalTimeSeriesSource(); String fileName = getCommandLine().getOptionValue(FILE_NAME_OPT); SheetFormat sheetFormat = SheetFormat.of(fileName); // most of these fields are dropped in redis - used here to allow us to use existing machinery String dataSource = getCommandLine().getOptionValue(TIME_SERIES_DATASOURCE_OPT); String dataProvider = getCommandLine().getOptionValue(TIME_SERIES_DATAPROVIDER_OPT); String dataField = getCommandLine().getOptionValue(TIME_SERIES_DATAFIELD_OPT); String observationTime = getCommandLine().getOptionValue(TIME_SERIES_OBSERVATIONTIME_OPT); String idScheme = getCommandLine().getOptionValue(TIME_SERIES_IDSCHEME_OPT); String dateFormat = getCommandLine().getOptionValue(TIME_SERIES_DATEFORMAT_OPT); // boolean write = getCommandLine().hasOption(WRITE_OPT); try { InputStream portfolioFileStream = new BufferedInputStream(new FileInputStream(fileName)); TimeSeriesReader timeSeriesReader = new SingleSheetMultiTimeSeriesReader(sheetFormat, portfolioFileStream, dataSource, dataProvider, dataField, observationTime, idScheme, dateFormat); timeSeriesReader.writeTo(new TimeSeriesWriter() { @Override public LocalDateDoubleTimeSeries writeDataPoints(ExternalId htsId, String dataSource, String dataProvider, String dataField, String observationTime, LocalDateDoubleTimeSeries series) { final LocalDateDoubleEntryIterator iterator = series.iterator(); while (iterator.hasNext()) { final Map.Entry<LocalDate, Double> entry = iterator.next(); final UniqueId id = UniqueId.of(htsId.getScheme().getName(), htsId.getValue()); source.updateTimeSeriesPoint(id, source.getCurrentSimulationExecutionDate(), entry.getKey(), entry.getValue()); } return series; } @Override public void flush() { return; } }); } catch (FileNotFoundException e) { throw new OpenGammaRuntimeException("Could not find timeseries file", e); } } @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 (CSV or ZIP)"); filenameOption.setRequired(true); options.addOption(filenameOption); Option timeSeriesDataSourceOption = new Option( TIME_SERIES_DATASOURCE_OPT, "source", true, "The name of the time series data source"); options.addOption(timeSeriesDataSourceOption); Option timeSeriesDataProviderOption = new Option( TIME_SERIES_DATAPROVIDER_OPT, "provider", true, "The name of the time series data provider"); options.addOption(timeSeriesDataProviderOption); Option timeSeriesDataFieldOption = new Option( TIME_SERIES_DATAFIELD_OPT, "field", true, "The name of the time series data field"); options.addOption(timeSeriesDataFieldOption); Option timeSeriesObservationTimeOption = new Option( TIME_SERIES_OBSERVATIONTIME_OPT, "time", true, "The time series observation time"); options.addOption(timeSeriesObservationTimeOption); Option timeSeriesIdSchemeOption = new Option( TIME_SERIES_IDSCHEME_OPT, "scheme", true, "The time series ID scheme (e.g. RIC)"); options.addOption(timeSeriesIdSchemeOption); Option timeSeriesDateFormatOption = new Option( TIME_SERIES_DATEFORMAT_OPT, "date", true, "The JodaTime date format (e.g. yyyyMMdd)"); options.addOption(timeSeriesDateFormatOption); Option writeOption = new Option( WRITE_OPT, "write", false, "Actually persists the time series to the database if specified, otherwise pretty-prints without persisting"); options.addOption(writeOption); return options; } }