/**
* 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.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.master.security.SecurityDocument;
import com.opengamma.master.security.SecurityMaster;
import com.opengamma.master.security.SecuritySearchRequest;
import com.opengamma.master.security.impl.SecuritySearchIterator;
import com.opengamma.scripts.Scriptable;
/**
* The portfolio loader tool
*/
@Scriptable
public class SecurityDeleteTool extends AbstractTool<ToolContext> {
/** Logger. */
private static final Logger s_logger = LoggerFactory.getLogger(SecurityDeleteTool.class);
/** Delete securities option flag */
private static final String SECURITY_NAMES_OPT = "n";
/** Delete security ids option flag */
private static final String SECURITY_IDS_OPT = "i";
/** External Id scheme wildcard search flag */
private static final String EXTERNAL_ID_SCHEMES_OPT = "es";
/** External Id value wildcard search flag */
private static final String EXTERNAL_ID_VALUES_OPT = "ev";
/** 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 SecurityDeleteTool().invokeAndTerminate(args);
}
//-------------------------------------------------------------------------
/**
* Deletes securities from the specified sec master.
*/
@Override
protected void doRun() {
SecuritySearchRequest securitySearchRequest = new SecuritySearchRequest();
if (getCommandLine().hasOption(SECURITY_NAMES_OPT)) {
securitySearchRequest.setName(
getCommandLine().getOptionValue(SECURITY_NAMES_OPT));
}
if (getCommandLine().hasOption(SECURITY_IDS_OPT)) {
List<ObjectId> ids = new ArrayList<ObjectId>();
for (String s : getCommandLine().getOptionValues(SECURITY_IDS_OPT)) {
ids.add(ObjectId.parse(s));
}
securitySearchRequest.setObjectIds(ids);
}
if (getCommandLine().hasOption(EXTERNAL_ID_SCHEMES_OPT)) {
securitySearchRequest.setExternalIdScheme(
getCommandLine().getOptionValue(EXTERNAL_ID_SCHEMES_OPT));
}
if (getCommandLine().hasOption(EXTERNAL_ID_VALUES_OPT)) {
securitySearchRequest.setExternalIdValue(
getCommandLine().getOptionValue(EXTERNAL_ID_VALUES_OPT));
}
SecurityMaster securityMaster = getToolContext().getSecurityMaster();
for (SecurityDocument securityDocument : SecuritySearchIterator.iterable(securityMaster, securitySearchRequest)) {
if (getCommandLine().hasOption(WRITE_OPT)) {
securityMaster.remove(securityDocument.getUniqueId());
s_logger.warn("Deleted " + securityDocument.getSecurity().getUniqueId() +
" (" + securityDocument.getSecurity().getName() + ")");
} else {
s_logger.warn("Matched " + securityDocument.getSecurity().getUniqueId() +
" (" + securityDocument.getSecurity().getName() + ")");
}
}
}
@Override
protected Options createOptions(boolean contextProvided) {
Options options = super.createOptions(contextProvided);
Option securityNamesOption = new Option(
SECURITY_NAMES_OPT, "name", true, "Regular expression to match security names");
options.addOption(securityNamesOption);
Option securityIdsOption = new Option(
SECURITY_IDS_OPT, "securityid", true, "Security IDs to match");
options.addOption(securityIdsOption);
// OptionGroup group = new OptionGroup();
// group.addOption(securityIdsOption);
// group.addOption(securityNamesOption);
// group.setRequired(true);
// options.addOptionGroup(group);
Option externalIdSchemesOption = new Option(
EXTERNAL_ID_SCHEMES_OPT, "extscheme", true,
"Regular expression to match external ID schemes");
options.addOption(externalIdSchemesOption);
Option externalIdValuesOption = new Option(
EXTERNAL_ID_VALUES_OPT, "extvalue", true,
"Regular expression to match external ID values");
options.addOption(externalIdValuesOption);
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;
}
}