Author: [log in to unmask] Date: Sat Mar 7 17:07:08 2015 New Revision: 2362 Log: Improvements to add command argument parsing and handling. Modified: java/trunk/conditions/src/main/java/org/hps/conditions/cli/AddCommand.java Modified: java/trunk/conditions/src/main/java/org/hps/conditions/cli/AddCommand.java ============================================================================= --- java/trunk/conditions/src/main/java/org/hps/conditions/cli/AddCommand.java (original) +++ java/trunk/conditions/src/main/java/org/hps/conditions/cli/AddCommand.java Sat Mar 7 17:07:08 2015 @@ -6,6 +6,7 @@ import org.hps.conditions.api.ConditionsObjectException; import org.hps.conditions.api.ConditionsRecord; import org.hps.conditions.api.FieldValueMap; +import org.hps.conditions.database.DatabaseConditionsManager; /** * This is a command for the conditions CLI that will add a conditions record, @@ -19,52 +20,114 @@ PrintStream ps = System.out; AddCommand() { - super("add", "Add a conditions record"); - options.addOption("r", true, "The starting run number"); + super("add", "Add a conditions record to associate a collection to a run range"); + options.addOption("r", true, "The starting run number (required)"); options.getOption("r").setRequired(true); - options.addOption("e", true, "The ending run number"); - options.addOption("k", true, "The conditions key"); - options.addOption("t", true, "The table name"); + options.addOption("e", true, "The ending run number (default is starting run number)"); + options.addOption("t", true, "The table name (required)"); options.getOption("t").setRequired(true); - options.addOption("T", true, "A tag value"); - options.addOption("u", true, "Your user name"); - options.addOption("c", true, "The collection ID"); + options.addOption("c", true, "The collection ID (required)"); options.getOption("c").setRequired(true); - options.addOption("m", true, "The notes"); + options.addOption("T", true, "A tag value (optional)"); + options.addOption("u", true, "Your user name (optional)"); + options.addOption("m", true, "The notes about this conditions set (optional)"); } void execute(String[] arguments) { super.execute(arguments); - - int runStart = Integer.parseInt(commandLine.getOptionValue("r")); + + // This command has 3 required options. + if (commandLine.getOptions().length == 0) { + this.printUsage(); + System.exit(1); + } + + // Run start (required). + int runStart; + if (commandLine.hasOption("r")) { + runStart = Integer.parseInt(commandLine.getOptionValue("r")); + } else { + throw new RuntimeException("Missing required -r option with run number."); + } + + // Run end. int runEnd = runStart; if (commandLine.hasOption("e")) { runEnd = Integer.parseInt(commandLine.getOptionValue("e")); } - - String tableName = commandLine.getOptionValue("t"); + + // Name of table (required). + String tableName; + if (commandLine.hasOption("t")) { + tableName = commandLine.getOptionValue("t"); + } else { + throw new RuntimeException("Missing required -t argument with table name"); + } String name = tableName; - if (commandLine.hasOption("k")) { - name = commandLine.getOptionValue("k"); + + // Collection ID (required). + int collectionId; + if (commandLine.hasOption("c")) { + collectionId = Integer.parseInt(commandLine.getOptionValue("c")); + } else { + throw new RuntimeException("Missing required -c argument with collection ID"); } + // User name. String createdBy = System.getProperty("user.name"); if (commandLine.hasOption("u")) { createdBy = commandLine.getOptionValue("u"); } + // Tag to assign (optional). String tag = null; if (commandLine.hasOption("T")) { tag = commandLine.getOptionValue("T"); } + // Notes (optional). String notes = null; if (commandLine.hasOption("m")) { notes = commandLine.getOptionValue("m"); } - int collectionId = Integer.parseInt(commandLine.getOptionValue("c")); + // Create the conditions record to insert. + ConditionsRecord conditionsRecord = createConditionsRecord( + runStart, + runEnd, + tableName, + name, + collectionId, + createdBy, + tag, + notes); + try { + boolean createdConnection = false; + DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance(); + if (!DatabaseConditionsManager.getInstance().isConnected()) { + createdConnection = manager.openConnection(); + } + conditionsRecord.insert(); + manager.closeConnection(createdConnection); + } catch (ConditionsObjectException e) { + throw new RuntimeException("An error occurred while adding a conditions record.", e); + } + ps.println("successfully added conditions record ..."); + ps.println(conditionsRecord); + } + /** + * @param runStart + * @param runEnd + * @param tableName + * @param name + * @param collectionId + * @param createdBy + * @param tag + * @param notes + * @return + */ + private ConditionsRecord createConditionsRecord(int runStart, int runEnd, String tableName, String name, int collectionId, String createdBy, String tag, String notes) { ConditionsRecord conditionsRecord = new ConditionsRecord(); FieldValueMap fieldValues = new FieldValueMap(); fieldValues.put("run_start", runStart); @@ -81,13 +144,6 @@ } conditionsRecord.setFieldValues(fieldValues); fieldValues.put("created", new Date()); - try { - conditionsRecord.insert(); - } catch (ConditionsObjectException e) { - throw new RuntimeException("An error occurred while adding a conditions record.", e); - } - ps.println("successfully added conditions record ..."); - ps.println(conditionsRecord); + return conditionsRecord; } - -} +}