/** * 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.util.ArrayList; import java.util.List; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionGroup; import org.apache.commons.cli.Options; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.component.tool.AbstractTool; import com.opengamma.financial.tool.ToolContext; import com.opengamma.id.ObjectId; import com.opengamma.integration.copier.portfolio.DeletingPortfolioCopier; import com.opengamma.integration.copier.portfolio.reader.MasterPositionReader; import com.opengamma.integration.copier.portfolio.writer.PrettyPrintingPositionWriter; import com.opengamma.master.portfolio.PortfolioDocument; import com.opengamma.master.portfolio.PortfolioSearchRequest; import com.opengamma.master.portfolio.PortfolioSearchResult; /** * The portfolio loader tool */ //@Scriptable disabled because this tool basically doesn't work properly and leaves orphaned positions. public class PortfolioDeleteTool extends AbstractTool<ToolContext> { private static final Logger s_logger = LoggerFactory.getLogger(PortfolioDeleteTool.class); /** Delete portfolio names option flag */ private static final String PORTFOLIO_NAMES_OPT = "n"; /** Delete portfolio ids option flag */ private static final String PORTFOLIO_IDS_OPT = "i"; /** Delete positions option flag */ private static final String DELETE_POSITIONS_OPT = "dp"; /** Delete securities option flag */ private static final String DELETE_SECURITIES_OPT = "ds"; /** Delete portfolios option flag */ private static final String DELETE_PORTFOLIOS_OPT = "d"; /** Write option flag */ private static final String WRITE_OPT = "w"; /** Verbose option flag */ private static final String VERBOSE_OPT = "v"; //------------------------------------------------------------------------- /** * Main method to run the tool. * * @param args the standard tool arguments, not null */ public static void main(String[] args) { //CSIGNORE new PortfolioDeleteTool().invokeAndTerminate(args); } //------------------------------------------------------------------------- @Override protected void doRun() { PortfolioSearchRequest portfolioSearchRequest = new PortfolioSearchRequest(); if (getCommandLine().hasOption(PORTFOLIO_NAMES_OPT)) { portfolioSearchRequest.setName( getCommandLine().getOptionValue(PORTFOLIO_NAMES_OPT)); } if (getCommandLine().hasOption(PORTFOLIO_IDS_OPT)) { List<ObjectId> ids = new ArrayList<ObjectId>(); for (String s : getCommandLine().getOptionValues(PORTFOLIO_IDS_OPT)) { ids.add(ObjectId.parse(s)); } portfolioSearchRequest.setPortfolioObjectIds(ids); } PortfolioSearchResult portSearchResult = getToolContext().getPortfolioMaster().search(portfolioSearchRequest); for (PortfolioDocument portfolioDocument : portSearchResult.getDocuments()) { DeletingPortfolioCopier deletingPortfolioCopier = new DeletingPortfolioCopier( getToolContext().getSecurityMaster(), getToolContext().getPositionMaster(), getCommandLine().hasOption(WRITE_OPT)); deletingPortfolioCopier.copy( new MasterPositionReader( portfolioDocument.getPortfolio().getName(), getToolContext().getPortfolioMaster(), getToolContext().getPositionMaster(), getToolContext().getSecuritySource()), new PrettyPrintingPositionWriter(false), getCommandLine().hasOption(DELETE_POSITIONS_OPT), getCommandLine().hasOption(DELETE_SECURITIES_OPT)); if (getCommandLine().hasOption(DELETE_PORTFOLIOS_OPT)) { if (getCommandLine().hasOption(WRITE_OPT)) { getToolContext().getPortfolioMaster().remove(portfolioDocument.getUniqueId()); s_logger.warn("Deleted " + portfolioDocument.getPortfolio().getUniqueId() + " (" + portfolioDocument.getPortfolio().getName() + ")"); } else { s_logger.warn("Matched " + portfolioDocument.getPortfolio().getUniqueId() + " (" + portfolioDocument.getPortfolio().getName() + ")"); } } } } @Override protected Options createOptions(boolean contextProvided) { Options options = super.createOptions(contextProvided); Option portfolioNamesOption = new Option( PORTFOLIO_NAMES_OPT, "name", true, "Regular expression to match portfolio names"); // options.addOption(portfolioNamesOption); Option deletePortfolioIdsOption = new Option( PORTFOLIO_IDS_OPT, "portfolioid", true, "Portfolio IDs to match"); // options.addOption(deletePortfolioIdsOption); OptionGroup group = new OptionGroup(); group.addOption(deletePortfolioIdsOption); group.addOption(portfolioNamesOption); group.setRequired(true); options.addOptionGroup(group); Option deletePositionsOption = new Option( DELETE_POSITIONS_OPT, "delpositions", false, "Match/delete positions referenced in matching portfolios"); options.addOption(deletePositionsOption); Option deleteSecuritiesOption = new Option( DELETE_SECURITIES_OPT, "delsecurities", false, "Match/delete securities referenced in matching portfolios"); options.addOption(deleteSecuritiesOption); Option deletePortfoliosOption = new Option( DELETE_PORTFOLIOS_OPT, "delportfolios", false, "Actually delete matching portfolios"); options.addOption(deletePortfoliosOption); Option writeOption = new Option( WRITE_OPT, "write", false, "Actually persist the deletions"); options.addOption(writeOption); Option verboseOption = new Option( VERBOSE_OPT, "verbose", false, "Displays progress messages on the terminal"); options.addOption(verboseOption); return options; } }