/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.tool.marketdata; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; import com.google.common.collect.Sets; import com.opengamma.component.tool.AbstractDualComponentTool; import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesMaster; import com.opengamma.scripts.Scriptable; /** * The entry point for running OpenGamma batches. */ @Scriptable public class HtsSyncTool extends AbstractDualComponentTool { /** * Main method to run the tool. * No arguments are needed. * * @param args the arguments, unused */ public static void main(String[] args) { // CSIGNORE boolean success = new HtsSyncTool().initAndRun(args); System.exit(success ? 0 : 1); } @Override protected void doRun() throws Exception { Map<String, HistoricalTimeSeriesMaster> srcHtsMasters = getSourceRemoteComponentFactory().getHistoricalTimeSeriesMasters(); Map<String, HistoricalTimeSeriesMaster> destHtsMasters = getDestinationRemoteComponentFactory().getHistoricalTimeSeriesMasters(); boolean fast = getCommandLine().hasOption("fast"); boolean hardSync = getCommandLine().hasOption("hard-sync"); boolean verbose = getCommandLine().hasOption("verbose"); boolean noAdditions = getCommandLine().hasOption("no-additions"); if (hardSync && noAdditions) { System.err.println("Cannot specify both hard-sync and no-additions options"); return; } Set<String> filteredClassifiers = filterClassifiers(srcHtsMasters.keySet(), destHtsMasters.keySet()); for (String classifier : filteredClassifiers) { HistoricalTimeSeriesMaster srcHtsMaster = srcHtsMasters.get(classifier); HistoricalTimeSeriesMaster destHtsMaster = destHtsMasters.get(classifier); HistoricalTimeSeriesMasterCopier copier = new HistoricalTimeSeriesMasterCopier(srcHtsMaster, destHtsMaster); copier.copy(fast, hardSync, verbose, noAdditions); } } private Set<String> filterClassifiers(Set<String> srcMasterClassifiers, Set<String> destMasterClassifiers) { Set<String> commonComponentNames = Sets.newLinkedHashSet(); commonComponentNames.addAll(srcMasterClassifiers); commonComponentNames.retainAll(destMasterClassifiers); if (getCommandLine().hasOption("classifiers")) { List<String> classifiersList = Arrays.asList(getCommandLine().getOptionValues("classifiers")); Set<String> classifiers = Sets.newHashSet(); classifiers.addAll(classifiersList); classifiers.removeAll(classifiers); if (classifiers.size() > 0) { System.err.println("Couldn't find classifiers: " + classifiers.toString() + ", skipping those"); } classifiers.clear(); classifiers.addAll(classifiersList); commonComponentNames.retainAll(classifiers); } return commonComponentNames; } @SuppressWarnings("static-access") private Option createClassifiersOption() { return OptionBuilder.hasArgs() .withArgName("classifier name") .withDescription("specify classifiers for masters to sync") .isRequired(false) .withLongOpt("classifiers") .create("c"); } @SuppressWarnings("static-access") private Option createFastOption() { return OptionBuilder.hasArg(false) .withDescription("assume only new data needs copying") .isRequired(false) .withLongOpt("fast") .create("f"); } @SuppressWarnings("static-access") private Option createHardSyncOption() { return OptionBuilder.hasArg(false) .withDescription("remove time series at destination not present in source") .isRequired(false) .withLongOpt("hard-sync") .create("h"); } @SuppressWarnings("static-access") private Option createNoAdditionsOption() { return OptionBuilder.hasArg(false) .withDescription("don't add any time series to the destination, only update what's there") .isRequired(false) .withLongOpt("no-additions") .create("n"); } @SuppressWarnings("static-access") private Option createVerboseOption() { return OptionBuilder.hasArg(false) .withDescription("show extra messages") .isRequired(false) .withLongOpt("verbose") .create("v"); } //------------------------------------------------------------------------- @Override protected Options createOptions() { Options options = super.createOptions(); options.addOption(createClassifiersOption()); options.addOption(createVerboseOption()); options.addOption(createFastOption()); options.addOption(createHardSyncOption()); options.addOption(createNoAdditionsOption()); return options; } }