Java tutorial
/** * 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 java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.component.tool.AbstractTool; import com.opengamma.integration.copier.portfolio.PortfolioCopierVisitor; import com.opengamma.integration.copier.portfolio.QuietPortfolioCopierVisitor; import com.opengamma.integration.copier.portfolio.ResolvingPortfolioCopier; import com.opengamma.integration.copier.portfolio.VerbosePortfolioCopierVisitor; import com.opengamma.integration.copier.portfolio.reader.PortfolioReader; import com.opengamma.integration.copier.portfolio.reader.SingleSheetSimplePortfolioReader; import com.opengamma.integration.copier.portfolio.rowparser.ExchangeTradedRowParser; import com.opengamma.integration.copier.portfolio.writer.MasterPortfolioWriter; import com.opengamma.integration.copier.portfolio.writer.PortfolioWriter; import com.opengamma.integration.copier.portfolio.writer.PrettyPrintingPortfolioWriter; import com.opengamma.integration.copier.sheet.SheetFormat; import com.opengamma.integration.tool.IntegrationToolContext; import com.opengamma.master.portfolio.PortfolioMaster; import com.opengamma.master.position.PositionMaster; import com.opengamma.master.security.SecurityMaster; import com.opengamma.provider.security.SecurityProvider; import com.opengamma.scripts.Scriptable; /** * The portfolio loader tool */ @Scriptable public class ResolvingPortfolioLoaderTool extends AbstractTool<IntegrationToolContext> { /** File name option flag */ private static final String FILE_NAME_OPT = "f"; /** Portfolio name option flag*/ private static final String PORTFOLIO_NAME_OPT = "n"; /** Write option flag */ private static final String WRITE_OPT = "w"; /** Overwrite option flag */ private static final String OVERWRITE_OPT = "o"; /** Verbose option flag */ private static final String VERBOSE_OPT = "v"; /** 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"; //------------------------------------------------------------------------- /** * Main method to run the tool. * * @param args the arguments, not null */ public static void main(String[] args) { //CSIGNORE new ResolvingPortfolioLoaderTool().initAndRun(args, IntegrationToolContext.class); System.exit(0); } //------------------------------------------------------------------------- /** * Loads the portfolio into the position master. */ @Override protected void doRun() { IntegrationToolContext context = getToolContext(); // Create portfolio writer PortfolioWriter portfolioWriter = constructPortfolioWriter( getCommandLine().getOptionValue(PORTFOLIO_NAME_OPT), context.getPortfolioMaster(), context.getPositionMaster(), context.getSecurityMaster(), getCommandLine().hasOption(WRITE_OPT), getCommandLine().hasOption(OVERWRITE_OPT)); // Construct portfolio reader PortfolioReader portfolioReader = constructPortfolioReader(getCommandLine().getOptionValue(FILE_NAME_OPT), context.getSecurityProvider()); // Create portfolio copier ResolvingPortfolioCopier portfolioCopier = new ResolvingPortfolioCopier( context.getHistoricalTimeSeriesMaster(), context.getHistoricalTimeSeriesProvider(), context.getBloombergReferenceDataProvider(), getOptionValue(TIME_SERIES_DATAPROVIDER_OPT, "CMPL"), getCommandLine().getOptionValues(TIME_SERIES_DATAFIELD_OPT) == null ? new String[] { "PX_LAST" } : getCommandLine().getOptionValues(TIME_SERIES_DATAFIELD_OPT)); // Create visitor for verbose/quiet mode PortfolioCopierVisitor portfolioCopierVisitor; if (getCommandLine().hasOption(VERBOSE_OPT)) { portfolioCopierVisitor = new VerbosePortfolioCopierVisitor(); } else { portfolioCopierVisitor = new QuietPortfolioCopierVisitor(); } // Call the portfolio loader with the supplied arguments portfolioCopier.copy(portfolioReader, portfolioWriter, portfolioCopierVisitor); // close stuff portfolioReader.close(); portfolioWriter.close(); } private static PortfolioWriter constructPortfolioWriter(String portfolioName, PortfolioMaster portfolioMaster, PositionMaster positionMaster, SecurityMaster securityMaster, boolean write, boolean overwrite) { if (write) { if (overwrite) { System.out.println("Write and overwrite options specified, will persist to OpenGamma masters"); } else { System.out.println("Write option specified, persisting to OpenGamma masters"); } // Check that the portfolio name was specified on the command line if (portfolioName == null) { throw new OpenGammaRuntimeException("Portfolio name omitted, cannot persist to OpenGamma masters"); } // Create a portfolio writer to persist imported positions, trades and securities to the OG masters return new MasterPortfolioWriter(portfolioName, portfolioMaster, positionMaster, securityMaster, false, false, false); } else { // Create a dummy portfolio writer to pretty-print instead of persisting return new PrettyPrintingPortfolioWriter(true); } } // TODO take a stream as well as the file name, BBG master private static PortfolioReader constructPortfolioReader(String filename, SecurityProvider securityProvider) { InputStream stream; try { stream = new BufferedInputStream(new FileInputStream(filename)); } catch (FileNotFoundException e) { throw new OpenGammaRuntimeException("Could not open file " + filename + " for reading: " + e); } SheetFormat sheetFormat = SheetFormat.of(filename); switch (sheetFormat) { case XLS: case CSV: // Check that the asset class was specified on the command line return new SingleSheetSimplePortfolioReader(sheetFormat, stream, new ExchangeTradedRowParser(securityProvider)); default: throw new OpenGammaRuntimeException("Input filename should end in .CSV or .XLS"); } } private String getOptionValue(String optionName, String defaultValue) { return getCommandLine().getOptionValue(optionName) == null ? defaultValue : getCommandLine().getOptionValue(optionName); } @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, XLS or ZIP)"); filenameOption.setRequired(true); options.addOption(filenameOption); Option portfolioNameOption = new Option(PORTFOLIO_NAME_OPT, "name", true, "The name of the destination OpenGamma portfolio"); options.addOption(portfolioNameOption); Option writeOption = new Option(WRITE_OPT, "write", false, "Actually persists the portfolio to the database if specified, otherwise pretty-prints without persisting"); options.addOption(writeOption); Option overwriteOption = new Option(OVERWRITE_OPT, "overwrite", false, "Deletes any existing matching securities, positions and portfolios and recreates them from input data"); options.addOption(overwriteOption); Option verboseOption = new Option(VERBOSE_OPT, "verbose", false, "Displays progress messages on the terminal"); options.addOption(verboseOption); 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); return options; } }