/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.viewer.status; import java.io.File; import java.io.IOException; import java.util.Collection; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.io.FileUtils; 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.viewer.status.impl.BloombergReferencePortfolioMaker; import com.opengamma.integration.viewer.status.impl.ViewStatusCalculationWorker; import com.opengamma.master.portfolio.PortfolioSearchRequest; import com.opengamma.master.portfolio.PortfolioSearchResult; import com.opengamma.scripts.Scriptable; /** * The view status tool */ @Scriptable public class ViewStatusTool extends AbstractTool<ToolContext> { /** Logger. */ private static final Logger s_logger = LoggerFactory.getLogger(ViewStatusTool.class); //------------------------------------------------------------------------- /** * Main method to run the tool. * * @param args the standard tool arguments, not null */ public static void main(String[] args) { //CSIGNORE new ViewStatusTool().invokeAndTerminate(args); } //------------------------------------------------------------------------- @Override protected void doRun() throws Exception { ViewStatusOption option = ViewStatusOption.getViewStatusReporterOption(getCommandLine(), getToolContext()); String portfolioName = option.getPortfolioName(); UniqueId portfolioId = null; if (portfolioName == null) { portfolioId = createReferencePortfolio(); } else { portfolioId = findPortfolioId(portfolioName); } if (portfolioId == null) { throw new OpenGammaRuntimeException("Couldn't find portfolio " + portfolioName); } generateViewStatusReport(portfolioId, option); } private void generateViewStatusReport(final UniqueId portfolioId, final ViewStatusOption option) { ViewStatusCalculationWorker calculationWorker = new ViewStatusCalculationWorker(getToolContext(), portfolioId, option); ViewStatusResultAggregator resultAggregator = calculationWorker.run(); ViewStatusResultProducer resultProducer = new ViewStatusResultProducer(); String statusResult = resultProducer.statusResult(resultAggregator, option.getFormat(), option.getAggregateType()); try { File outputFile = option.getOutputFile(); s_logger.debug("Writing status report into : {}", outputFile.getPath()); FileUtils.writeStringToFile(outputFile, statusResult); } catch (IOException ex) { throw new OpenGammaRuntimeException("Error writing view-status report to " + option.getOutputFile().toString(), ex); } } private UniqueId findPortfolioId(final String portfolioName) { final PortfolioSearchRequest searchRequest = new PortfolioSearchRequest(); searchRequest.setName(portfolioName); final PortfolioSearchResult searchResult = getToolContext().getPortfolioMaster().search(searchRequest); UniqueId portfolioId = null; if (searchResult.getFirstPortfolio() != null) { portfolioId = searchResult.getFirstPortfolio().getUniqueId().toLatest(); } return portfolioId; } private UniqueId createReferencePortfolio() { ToolContext toolContext = getToolContext(); BloombergReferencePortfolioMaker portfolioMaker = new BloombergReferencePortfolioMaker(toolContext.getPortfolioMaster(), toolContext.getPositionMaster(), toolContext.getSecurityMaster()); portfolioMaker.run(); return findPortfolioId(BloombergReferencePortfolioMaker.PORTFOLIO_NAME); } @SuppressWarnings("unchecked") @Override protected Options createOptions(boolean contextProvided) { final Options toolOptions = super.createOptions(contextProvided); Options viewStatusOptions = ViewStatusOption.createOptions(); for (Option option : (Collection<Option>) viewStatusOptions.getOptions()) { s_logger.debug("adding {} to tool options", option); toolOptions.addOption(option); } return toolOptions; } }