/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.component.tool;
import java.io.File;
import java.util.Set;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;
import com.opengamma.scripts.Scriptable;
import com.opengamma.util.db.tool.DbCreateOperation;
import com.opengamma.util.db.tool.DbToolContext;
/**
* Tool for creating database objects using the installation scripts.
*/
@Scriptable
public class DbCreateTool extends AbstractDbTool<DbToolContext> {
/**
* Drop existing contents command line option.
*/
private static final String DROP_EXISTING_OPTION = "d";
/**
* A comma-separated list of schema groups to filter by.
*/
private static final String SCHEMA_NAME_FILTER = "s";
@Override
protected Options createOptions() {
Options options = super.createOptions();
options.addOption(createDropExistingOption());
options.addOption(createIncludeSchemaGroupOption());
return options;
}
private static Option createDropExistingOption() {
return new Option(DROP_EXISTING_OPTION, "drop", false, "whether to drop any existing contents");
}
private static Option createIncludeSchemaGroupOption() {
Option schemaGroupOption = new Option(SCHEMA_NAME_FILTER, "schema-name", false, "a schema group name to include; includes all schemas if none specified");
schemaGroupOption.setArgs(Option.UNLIMITED_VALUES);
return schemaGroupOption;
}
//-------------------------------------------------------------------------
@Override
protected void doRun(boolean write, File outputFile) throws Exception {
boolean dropExisting = getCommandLine().hasOption(DROP_EXISTING_OPTION);
if (getCommandLine().hasOption(SCHEMA_NAME_FILTER)) {
String[] nameArgs = getCommandLine().getOptionValues(SCHEMA_NAME_FILTER);
Set<String> includeNames = ImmutableSet.copyOf(nameArgs);
Set<String> allNames = getDbToolContext().getSchemaNames();
SetView<String> filteredNames = Sets.intersection(allNames, includeNames);
if (write) {
System.out.println("Filtered " + allNames + " to " + filteredNames);
}
getDbToolContext().setSchemaNames(filteredNames);
}
if (getDbToolContext().getSchemaNames().isEmpty()) {
System.out.println("No schemas specified, or all filtered out");
} else {
new DbCreateOperation(getDbToolContext(), write, outputFile, dropExisting).execute();
if (write) {
System.out.println("Database objects created successfully");
}
}
}
//-------------------------------------------------------------------------
/**
* Main method to run the tool.
*
* @param args the arguments, not null
*/
public static void main(String[] args) { //CSIGNORE
boolean success = new DbCreateTool().initAndRun(args, DbToolContext.class);
System.exit(success ? 0 : 1);
}
}