Package com.opengamma.integration.tool.config

Source Code of com.opengamma.integration.tool.config.ConfigImportExportTool

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.integration.tool.config;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
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.master.config.ConfigMaster;
import com.opengamma.master.portfolio.PortfolioMaster;
import com.opengamma.scripts.Scriptable;

/**
* Tool to read currency pairs from a text file and store them in the config master.
* The pairs must be in the format AAA/BBB, one per line in the file.
*/
@Scriptable
public class ConfigImportExportTool extends AbstractTool<ToolContext> {
  private static final Logger s_logger = LoggerFactory.getLogger(ConfigImportExportTool.class);

  /**
   * Main method to run the tool.
   */
  public static void main(String[] args) {  // CSIGNORE
    new ConfigImportExportTool().initAndRun(args, ToolContext.class);
    System.exit(0);
  }

  //-------------------------------------------------------------------------
  @Override
  protected void doRun() {
    ToolContext toolContext = getToolContext();
    ConfigMaster configMaster = toolContext.getConfigMaster();
    PortfolioMaster portfolioMaster = toolContext.getPortfolioMaster();
    CommandLine commandLine = getCommandLine();
    @SuppressWarnings("unchecked")
    List<String> fileList = commandLine.getArgList();
    boolean portPortfolioRefs = commandLine.hasOption("portable-portfolios");
    boolean verbose = commandLine.hasOption("verbose");
    if (commandLine.hasOption("load")) {
      checkForInvalidOption("type");
      checkForInvalidOption("name");
      checkForInvalidOption("save");
      boolean persist = !commandLine.hasOption("do-not-persist"); // NOTE: inverted logic here
      ConfigLoader configLoader = new ConfigLoader(configMaster, portfolioMaster, portPortfolioRefs, persist, verbose);
      if (fileList.size() > 0) {
        boolean problems = false;
        for (String fileName : fileList) {
          File file = new File(fileName);
          if (!file.exists()) {
            s_logger.error("Could not find file:" + fileName);
            problems = true;
          }
          if (!file.canRead()) {
            s_logger.error("Not able to read file (permissions?):" + fileName);
            problems = true;
          }
        }
        if (problems) {
          s_logger.error("Problems with one or more files, aborting.");
          System.exit(1);
        }
        try {
          for (String fileName : fileList) {
            if (verbose) {
              s_logger.info("Processing " + fileName);
            }
            FileInputStream inputStream = new FileInputStream(fileName);
            configLoader.loadConfig(inputStream);
          }
        } catch (IOException ioe) {
          if (verbose) {
            s_logger.error("An I/O error occurred while processing a file (run with -v to see stack trace)");
          } else {
            s_logger.error("An I/O error occurred while processing a file", ioe);
          }
        }
      } else {
        if (verbose) {
          s_logger.info("No file name given, assuming STDIN");
        }
        configLoader.loadConfig(System.in);
      }
    } else if (commandLine.hasOption("save")) {
      if (verbose) {
        s_logger.info("Save option active");
      }
      checkForInvalidOption("do-not-persist");
      List<String> types = getTypes();
      List<String> names = getNames();
      PrintStream outputStream;
      if (fileList.size() == 1) {
        try {
          outputStream = new PrintStream(new FileOutputStream(fileList.get(0)));
        } catch (FileNotFoundException ex) {
          s_logger.error("Couldn't file file " + fileList.get(0));
          System.exit(1);
          return;
        }
      } else {
        outputStream = System.out;
      }
      ConfigSaver configSaver = new ConfigSaver(configMaster, portfolioMaster, names, types, portPortfolioRefs, verbose);
      configSaver.saveConfigs(outputStream);
      System.out.println("Warning: file may have been created in installation base directory");
    }
  }
 
  private List<String> getTypes() {
    if (getCommandLine().hasOption("type")) {
      String[] typeValues = getCommandLine().getOptionValues("type");
      return Arrays.asList(typeValues);
    } else {
      return Collections.emptyList();
    }   
  }

  private List<String> getNames() {
    if (getCommandLine().hasOption("name")) {
      String[] nameValues = getCommandLine().getOptionValues("name");
      return Arrays.asList(nameValues);
    } else {
      return Collections.emptyList();
    }
  }

 
  private void checkForInvalidOption(String longOpt) {
    if (getCommandLine().hasOption(longOpt)) {
      System.err.println("Option " + longOpt + " is invalid in this context");
      System.exit(1);
    }
  }

  @Override
  protected Options createOptions(boolean mandatoryConfig) {
    Options options = super.createOptions(mandatoryConfig);
    options.addOption(createTypeOption());
    options.addOption(createSearchOption());
    options.addOption(createLoadOption());
    options.addOption(createSaveOption());
    options.addOption(createPortablePortfolioReferencesOption());
    options.addOption(createDoNotPersistOption());
    options.addOption(createVerboseOption());
    return options;
  }

  @SuppressWarnings("static-access")
  private Option createTypeOption() {
    return OptionBuilder.isRequired(false)
                        .hasArgs()
                        .withArgName("full class name")
                        .withDescription("The type(s) you want to export")
                        .withLongOpt("type")
                        .create("t");
  }
 
  @SuppressWarnings("static-access")
  private Option createSearchOption() {
    return OptionBuilder.isRequired(false)
                        .hasArgs()
                        .withArgName("name search string")
                        .withDescription("The name(s) you want to search for (globbing available)")
                        .withLongOpt("name")
                        .create("n");
  }

  @SuppressWarnings("static-access")
  private Option createLoadOption() {
    return OptionBuilder.isRequired(false)
                        .hasArg(false)
                        .withDescription("Load from file to config database")
                        .withLongOpt("load")
                        .create("load");
  }
 
  @SuppressWarnings("static-access")
  private Option createSaveOption() {
    return OptionBuilder.isRequired(false)
                        .hasArg(false)
                        .withDescription("Save to file from config database")
                        .withLongOpt("save")
                        .create("save");
  }
 
  @SuppressWarnings("static-access")
  private Option createPortablePortfolioReferencesOption() {
    return OptionBuilder.isRequired(false)
                        .hasArg(false)
                        .withDescription("Attempt to port portfolio reference ids")
                        .withLongOpt("portable-portfolios")
                        .create("p");
  }
 
  @SuppressWarnings("static-access")
  private Option createDoNotPersistOption() {
    return OptionBuilder.isRequired(false)
                        .hasArg(false)
                        .withDescription("Simulate writing rather than actually writing to DB")
                        .withLongOpt("do-not-persist")
                        .create("d");
  }
 
  @SuppressWarnings("static-access")
  private Option createVerboseOption() {
    return OptionBuilder.isRequired(false)
                        .hasArg(false)
                        .withDescription("Display extra error messages")
                        .withLongOpt("verbose")
                        .create("v");
  }
 
  protected Class<?> getEntryPointClass() {
    return getClass();
  }

  @Override
  protected void usage(Options options) {
    HelpFormatter formatter = new HelpFormatter();
    formatter.setWidth(120);
    formatter.printHelp("config-import-export-tool.sh [file...]", options, true);
  }
 
}
TOP

Related Classes of com.opengamma.integration.tool.config.ConfigImportExportTool

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.