Print

Print


Author: [log in to unmask]
Date: Sat Mar  7 14:20:57 2015
New Revision: 2348

Log:
Improvements to conditions initialization in command line tool.  Detector name should no longer be required but can still be supplied.  A default run number of 0 will be used if none is given.

Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/cli/CommandLineTool.java	Sat Mar  7 14:20:57 2015
@@ -4,6 +4,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.HelpFormatter;
@@ -13,6 +14,8 @@
 import org.apache.commons.cli.PosixParser;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
+import org.lcsim.util.log.DefaultLogFormatter;
+import org.lcsim.util.log.LogUtil;
 
 /**
  * <p>
@@ -24,8 +27,9 @@
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
-// TODO: Add detector name and run number as arguments on the basic tool rather than sub-commands.
 public class CommandLineTool {
+    
+    static Logger logger = LogUtil.create(CommandLineTool.class.getSimpleName(), new DefaultLogFormatter(), Level.WARNING);
 
     Options options = new Options();
     Map<String, AbstractCommand> commands = new HashMap<String, AbstractCommand>();
@@ -43,12 +47,12 @@
                 printUsage();
                 exit(0);
             }
-
+            
             CommandLine commandLine = null;
             try {
                 commandLine = parser.parse(options, arguments, true);
             } catch (ParseException e) {
-                e.printStackTrace();
+                logger.log(Level.SEVERE, "error parsing the options", e);
                 printUsage();
                 exit(1);
             }
@@ -58,22 +62,29 @@
                 exit(0);
             }
 
+            // Set verbosity.
             if (commandLine.hasOption("v")) {
+                logger.setLevel(Level.ALL);
+                logger.getHandlers()[0].setLevel(Level.ALL);
                 verbose = true;
+                logger.config("verbose mode enabled");
             }
 
+            // Setup conditions manager from command line options.
             setupConditionsManager(commandLine);
 
+            // Get the sub-command to use.
             String commandName = commandLine.getArgs()[0];
-
             AbstractCommand command = commands.get(commandName);
             if (command == null) {
                 throw new IllegalArgumentException("Unknown command " + commandName);
             }
 
+            // Copy remaining arguments for sub-command.
             String[] commandArguments = new String[commandLine.getArgs().length - 1];
             System.arraycopy(commandLine.getArgs(), 1, commandArguments, 0, commandArguments.length);
 
+            // Excecute the sub-command.
             command.setVerbose(verbose);
             command.execute(commandArguments);
         } catch (Exception e) {
@@ -84,38 +95,64 @@
         }
     }
 
-    private void setupConditionsManager(CommandLine commandLine) {
+    void setupConditionsManager(CommandLine commandLine) {
+
+        logger.info("setting up conditions manager");
+        
+        // Create new manager.
         conditionsManager = new DatabaseConditionsManager();
-        if (verbose) {
-            conditionsManager.setLogLevel(Level.ALL);
-        } else {
-            conditionsManager.setLogLevel(Level.WARNING);
-        }
+
+        // Set log level.
+        conditionsManager.setLogLevel(logger.getLevel());
+
+        // Connection properties.
         if (commandLine.hasOption("p")) {
             File connectionPropertiesFile = new File(commandLine.getOptionValue("p"));
-            if (verbose)
-                System.out.println("using connection properties file " + connectionPropertiesFile.getPath());
             conditionsManager.setConnectionProperties(connectionPropertiesFile);
+            logger.config("connection properties -p " + connectionPropertiesFile);
         } 
+        
+        // XML config.
         if (commandLine.hasOption("x")) {
             File xmlConfigFile = new File(commandLine.getOptionValue("x"));
             conditionsManager.setXmlConfig(xmlConfigFile);
-            if (verbose)
-                System.out.println("using XML config file " + xmlConfigFile.getPath());
-        }         
+            logger.config("XML config -x " + xmlConfigFile);
+        }
         
-        String detectorName = DatabaseConditionsManager.getDefaultEngRunDetectorName();
-        if (commandLine.hasOption("d")) {
-            detectorName = commandLine.getOptionValue("d");
-        }
-        int runNumber = 2000;
-        if (commandLine.hasOption("r")) {
-            runNumber = Integer.parseInt(commandLine.getOptionValue("r"));
-        }
-        try {
-            DatabaseConditionsManager.getInstance().setDetector(detectorName, runNumber);
-        } catch (ConditionsNotFoundException e) {
-            throw new RuntimeException(e);
+        // If there is a run number or detector number then attempt to initialize the conditions system.
+        if (commandLine.hasOption("r") || commandLine.hasOption("d")) {
+            
+            logger.config("detector name or run number supplied so manager will be initialized");
+
+            // Set detector name.
+            String detectorName = null;
+            if (commandLine.hasOption("d")) {
+                detectorName = commandLine.getOptionValue("d");
+                logger.config("detector -d " + detectorName);
+            } else {
+                detectorName = "HPS-ECalCommissioning-v2";
+                logger.config("default detector " + detectorName + " is being used");
+            }
+
+            // Get run number.
+            Integer run = null;
+            if (commandLine.hasOption("r")) {
+                run = Integer.parseInt(commandLine.getOptionValue("r"));
+                logger.config("run -r " + run);
+            } else {
+                run = 0;
+                logger.config("default run number " + run + " is being used");
+            }
+
+            // Setup the conditions manager with user detector name and run number.
+            try {
+                logger.config("initializing conditions manager with detector " + detectorName + " and run " + run);
+                DatabaseConditionsManager.getInstance().setDetector(detectorName, run);
+                logger.config("conditions manager initialized successfully");
+                logger.getHandlers()[0].flush();
+            } catch (ConditionsNotFoundException e) {
+                throw new RuntimeException(e);
+            }
         }
     }
 
@@ -142,15 +179,14 @@
     static CommandLineTool create() {
         CommandLineTool cli = new CommandLineTool();
         cli.options.addOption(new Option("h", false, "Print help and exit"));
-        cli.options.addOption(new Option("v", false, "Enable verbose terminal output"));
-        cli.options.addOption(new Option("p", true, "Set the connection properties file"));
-        cli.options.addOption(new Option("x", true, "Set the conditions database XML configuration file"));
         cli.options.addOption(new Option("d", true, "Set the detector name"));
         cli.options.addOption(new Option("r", true, "Set the run number"));
+        cli.options.addOption(new Option("v", false, "Enable verbose print output"));
+        cli.options.addOption(new Option("p", true, "Set the database connection properties file"));
+        cli.options.addOption(new Option("x", true, "Set the conditions XML configuration file"));
         cli.registerCommand(new LoadCommand());
         cli.registerCommand(new PrintCommand());
         cli.registerCommand(new AddCommand());
         return cli;
     }
-
-}
+}