Print

Print


Commit in lcsim/src/org/lcsim/job on MAIN
JobControlManager.java+112-651.64 -> 1.65
add reading of steering file from embedded resource using additional command line option

lcsim/src/org/lcsim/job
JobControlManager.java 1.64 -> 1.65
diff -u -r1.64 -r1.65
--- JobControlManager.java	10 Jul 2012 00:10:43 -0000	1.64
+++ JobControlManager.java	14 Feb 2013 22:30:07 -0000	1.65
@@ -72,11 +72,12 @@
  * matching settings should be left out of the XML job file. This is not the case, however, for input files
  * specified by the "-i" option, which are appended to the ones listed in the steering file.
  * 
- * @version $Id: JobControlManager.java,v 1.64 2012/07/10 00:10:43 jeremy Exp $
+ * @version $Id: JobControlManager.java,v 1.65 2013/02/14 22:30:07 jeremy Exp $
  * @author Jeremy McCormick
  */
 // TODO: Do proper logging using Java Logger class rather than just a PrintStream.
-public class JobControlManager {
+public class JobControlManager
+{
     // The LCIO record loop.
     private LCSimLoop loop;
 
@@ -98,6 +99,7 @@
     // Boolean job options.
     private boolean performDryRun;
     private boolean rewrite;
+    private boolean useSteeringResource;
 
     // Settings effecting logging verbosity.
     private boolean printInputFiles;
@@ -139,7 +141,8 @@
     /**
      * The default constructor.
      */
-    public JobControlManager() {
+    public JobControlManager()
+    {
         try {
             fileCache = new FileCache();
         } catch (IOException x) {
@@ -153,7 +156,8 @@
      * 
      * @param args The command line arguments.
      */
-    public static void main(String args[]) {
+    public static void main(String args[])
+    {
         JobControlManager mgr = new JobControlManager();
         if (args.length == 0) {
             mgr.logStream.println("java -jar lcsim-bin.jar [options] steeringFile.xml");
@@ -170,7 +174,8 @@
      * 
      * @return The command line options for the manager.
      */
-    private static Options createCommandLineOptions() {
+    private static Options createCommandLineOptions()
+    {
         Options options = new Options();
         options.addOption(new Option("p", true, "Load a properties file containing variable definitions"));
         options.addOption(new Option("D", true, "Define a variable with form [name]=[value]"));
@@ -181,6 +186,7 @@
         options.addOption(new Option("x", false, "Perform a dry run which does not process events"));
         options.addOption(new Option("q", false, "Turn on quiet mode."));
         options.addOption(new Option("i", true, "Add an LCIO input file to process."));
+        options.addOption(new Option("r", false, "Use a steering resource rather than a file."));
         return options;
     }
 
@@ -191,7 +197,8 @@
      * 
      * @param args The command line arguments.
      */
-    private void parseCommandLineOptions(String args[]) {
+    private void parseCommandLineOptions(String args[])
+    {
         // Setup parser.
         CommandLineParser parser = new PosixParser();
 
@@ -276,6 +283,10 @@
         if (cl.hasOption("x")) {
             this.performDryRun = true;
         }
+        
+        if (cl.hasOption("r")) {
+            this.useSteeringResource = true;
+        }
 
         // Check that there is exactly one extra argument for the XML steering file.
         if (cl.getArgList().size() == 0) {
@@ -283,13 +294,7 @@
         } else if (cl.getArgList().size() > 1) {
             throw new RuntimeException("Too many extra arguments.");
         }
-
-        // Setup the XML steering file and check for its existence.
-        File xmlRunControlFile = new File((String) cl.getArgList().get(0));
-        if (!xmlRunControlFile.exists()) {
-            throw new RuntimeException("The steering file " + args[0] + " does not exist!");
-        }
-
+        
         // Local LCIO files to process.
         if (cl.hasOption("i")) {
             String[] files = cl.getOptionValues("i");
@@ -301,9 +306,21 @@
                 inputFiles.add(new File(fileName));
             }
         }
-
-        // Setup job parameters from XML now that CL options are all processed.
-        setup(xmlRunControlFile);
+                
+        // Steering argument points to either a file or embedded resource.
+        String steering = (String) cl.getArgList().get(0);                
+        
+        // Using an embedded resource in the jar for steering.
+        if (this.useSteeringResource) {
+            setup(steering);        
+        // Steering from a local file. 
+        } else {
+            File xmlRunControlFile = new File(steering);
+            if (!xmlRunControlFile.exists()) {
+                throw new RuntimeException("The steering file " + args[0] + " does not exist!");
+            }
+            setup(xmlRunControlFile);
+        }
     }
 
     /**
@@ -313,7 +330,8 @@
      * @param key The variable name.
      * @param value The variable's value.
      */
-    public void addVariableDefinition(String key, String value) {
+    public void addVariableDefinition(String key, String value)
+    {
         if (verbose) {
             logStream.println(key + " = " + value);
         }
@@ -327,7 +345,8 @@
     /**
      * Execute a job using the current parameters.
      */
-    public boolean run() {
+    public boolean run()
+    {
         // If setup was not called first, then abort the job.
         if (!wasSetup) {
             logStream.println("Aborting job!  Setup was never called.");
@@ -373,7 +392,7 @@
             // Execute the loop.
             long processedEvents = loop.loop(maxEvents, statsStream);
             if (processedEvents != maxEvents) {
-              logStream.println("End of file reached");
+                logStream.println("End of file reached");
             } else if (verbose) {
                 logStream.println();
                 logStream.println("End time: " + (new Date()));
@@ -397,7 +416,8 @@
      * 
      * @return The LCSimLoop.
      */
-    public LCSimLoop getLCSimLoop() {
+    public LCSimLoop getLCSimLoop()
+    {
         if (loop == null) {
             loop = new LCSimLoop();
             // Add the drivers to the loop.
@@ -414,7 +434,8 @@
      * 
      * @return A <code>List</code> of <code>Drivers</code>.
      */
-    public List<Driver> getDriverExecList() {
+    public List<Driver> getDriverExecList()
+    {
         return this.driverExec;
     }
 
@@ -423,7 +444,8 @@
      * 
      * @param file
      */
-    public void setup(File file) {
+    public void setup(File file)
+    {
         try {
             setup((new FileInputStream(file)));
         } catch (FileNotFoundException x) {
@@ -434,7 +456,8 @@
     /**
      * Setup job parameters from an embedded resource. This method calls {@link #setup(InputStream)}.
      */
-    public void setup(String resourceURL) {
+    public void setup(String resourceURL)
+    {
         setup(this.getClass().getResourceAsStream(resourceURL));
     }
 
@@ -443,7 +466,8 @@
      * 
      * @param in The XML input stream.
      */
-    public void setup(InputStream in) {
+    public void setup(InputStream in)
+    {
 
         // Make the Document builder.
         SAXBuilder builder = new SAXBuilder();
@@ -476,7 +500,8 @@
      * 
      * @param doc The lcsim recon XML document describing the job.
      */
-    private void setup(Document doc) {
+    private void setup(Document doc)
+    {
         if (wasSetup) {
             logStream.println("Ignoring call to setup as it was already called.");
             return;
@@ -538,7 +563,8 @@
      * 
      * @param doc The XML document.
      */
-    private void substituteVariables(Document doc) {
+    private void substituteVariables(Document doc)
+    {
         substituteVariables(doc.getRootElement());
     }
 
@@ -549,7 +575,8 @@
      * @param element The XML element.
      * @throw RuntimeException If a variable does not exist in the <code>variableMap</code>.
      */
-    private void substituteVariables(Element element) {
+    private void substituteVariables(Element element)
+    {
         String text = element.getTextNormalize();
         if (text.length() != 0) {
             // Create a new matcher.
@@ -602,7 +629,8 @@
      * 
      * @param doc The XML steering doc with variables substituted.
      */
-    private void rewriteXMLSteering(Document doc) {
+    private void rewriteXMLSteering(Document doc)
+    {
         if (verbose) {
             logStream.println("Rewriting XML to " + this.rewriteFile + " ...");
         }
@@ -620,7 +648,8 @@
     /**
      * Setup the drivers from the XML job file, adding them to the JobManager's <code>driverMap</code> .
      */
-    private void setupDrivers() {
+    private void setupDrivers()
+    {
         if (printDriversDetailed) {
             logStream.println("--- Drivers ---");
         }
@@ -660,11 +689,9 @@
             try {
                 newDriver = (Driver) driverClass.newInstance();
             } catch (InstantiationException x) {
-                throw new RuntimeException("Failed to create a Driver of class " + type + ".  "
-                        + "This class might be missing a public constructor with no arguments.", x);
+                throw new RuntimeException("Failed to create a Driver of class " + type + ".  " + "This class might be missing a public constructor with no arguments.", x);
             } catch (IllegalAccessException x) {
-                throw new RuntimeException("Cannot access Driver type " + type + ". " + "You may need to make this class or its constructor public.",
-                        x);
+                throw new RuntimeException("Cannot access Driver type " + type + ". " + "You may need to make this class or its constructor public.", x);
             }
 
             // Get a list of Driver parameters.
@@ -705,8 +732,7 @@
                 // Found several, overloaded methods. Try to disambiguate them.
                 else if (methodCandidates.size() > 1) {
                     if (parameterElement.getAttribute("type") == null)
-                        throw new RuntimeException("Parameter " + pname + " in Driver " + driverClass.getCanonicalName()
-                                + " is overloaded, but a type field is missing from the parameter's XML element.");
+                        throw new RuntimeException("Parameter " + pname + " in Driver " + driverClass.getCanonicalName() + " is overloaded, but a type field is missing from the parameter's XML element.");
                     try {
                         // Try a primitive type first.
                         propertyType = getPrimitiveType(parameterElement.getAttribute("type").getValue());
@@ -716,8 +742,7 @@
                         if (propertyType == null)
                             propertyType = Class.forName(parameterElement.getAttribute("type").getValue());
                     } catch (ClassNotFoundException x) {
-                        throw new RuntimeException("Bad user type: " + parameterElement.getAttribute("type").getValue() + " for parameter " + pname
-                                + ".");
+                        throw new RuntimeException("Bad user type: " + parameterElement.getAttribute("type").getValue() + " for parameter " + pname + ".");
                     }
                     // Find a method that matches the user type.
                     for (Method candidateMethod : methodCandidates) {
@@ -740,8 +765,7 @@
                 // Convert the parameter to the appropriate type.
                 IParameterConverter converter = paramConverter.getConverterForType(propertyType);
                 if (converter == null) {
-                    throw new RuntimeException("No converter found for parameter " + parameterElement.getName() + " with type "
-                            + propertyType.getName() + ".");
+                    throw new RuntimeException("No converter found for parameter " + parameterElement.getName() + " with type " + propertyType.getName() + ".");
                 }
                 Object nextParameter = converter.convert(factory, parameterElement);
 
@@ -787,14 +811,16 @@
      * @param name The unique name of the Driver.
      * @param driver The instance of the Driver.
      */
-    private void addDriver(String name, Driver driver) {
+    private void addDriver(String name, Driver driver)
+    {
         if (driverMap.containsKey(name)) {
             throw new RuntimeException("Duplicate driver name: " + name);
         }
         driverMap.put(name, driver);
     }
 
-    private void printSystemProperties(PrintStream ps) {
+    private void printSystemProperties(PrintStream ps)
+    {
         logStream.println("--- System Properties ---");
         for (Entry<Object, Object> entry : System.getProperties().entrySet()) {
             logStream.println(entry.getKey() + " = " + entry.getValue());
@@ -810,7 +836,8 @@
      * @param fileList The list files to which new file will be appended.
      * @return The file that was created from the text.
      */
-    private File processFileText(String fileText, List<File> fileList) {
+    private File processFileText(String fileText, List<File> fileList)
+    {
         Element fileElement = new Element("file");
         fileElement.setText(fileText.trim());
         return processFileElement(fileElement, fileList);
@@ -823,7 +850,8 @@
      * @param fileList List to append new <code>File</code>.
      * @return The <code>File</code> object.
      */
-    private File processFileElement(Element fileElement, List<File> fileList) {
+    private File processFileElement(Element fileElement, List<File> fileList)
+    {
         String fileLoc = processPath(fileElement.getText().trim());
         File file = null;
 
@@ -861,7 +889,8 @@
      * Setup the list of input files to be processed from the XML job file.
      */
     @SuppressWarnings("unchecked")
-    private void setupInputFiles() {
+    private void setupInputFiles()
+    {
         if (root.getChild("inputFiles") == null) {
             logStream.println("No input files in XML file.");
             // this.performDryRun = true;
@@ -973,7 +1002,8 @@
      * 
      * @param verbose True to turn on verbose mode; false to turn on quiet mode.
      */
-    private void setVerbose(boolean verbose) {
+    private void setVerbose(boolean verbose)
+    {
         this.verbose = verbose;
         this.printInputFiles = verbose;
         this.printDriversDetailed = verbose;
@@ -986,7 +1016,8 @@
     /**
      * Setup the job control parameters using the XML steering document.
      */
-    private void setupJobControlParameters() {
+    private void setupJobControlParameters()
+    {
 
         Element control = root.getChild("control");
         if (control == null)
@@ -1115,7 +1146,8 @@
     /**
      * Setup the manager's class loader.
      */
-    private void setupClassLoader() {
+    private void setupClassLoader()
+    {
         Element classpath = root.getChild("classpath");
         List<URL> urlList = new ArrayList<URL>();
         if (classpath != null) {
@@ -1174,7 +1206,8 @@
     /**
      * Setup the file cache.
      */
-    private void setupFileCache() {
+    private void setupFileCache()
+    {
         if (cacheDirectory == null)
             return;
         try {
@@ -1189,7 +1222,8 @@
     /**
      * Create the constants from the XML file.
      */
-    private void processConstants() {
+    private void processConstants()
+    {
         Element define = root.getChild("define");
         if (define != null) {
             for (Object o : define.getChildren()) {
@@ -1205,7 +1239,8 @@
     /**
      * Setup the system of units.
      */
-    private void setupUnits() {
+    private void setupUnits()
+    {
         Constants constants = Constants.getInstance();
         for (Entry<String, Double> unit : constants.entrySet()) {
             factory.addConstant(unit.getKey(), unit.getValue());
@@ -1218,7 +1253,8 @@
      * @param name The name of the type.
      * @return The primitive type class.
      */
-    private static Class getPrimitiveType(String name) {
+    private static Class getPrimitiveType(String name)
+    {
         if (name.equals("byte"))
             return byte.class;
         if (name.equals("short"))
@@ -1246,7 +1282,8 @@
      * @param klass The class.
      * @return A list of setter methods.
      */
-    private List<Method> getSetterMethods(Class klass) {
+    private List<Method> getSetterMethods(Class klass)
+    {
         List<Method> methods = new ArrayList<Method>();
         Class currentClass = klass;
         while (currentClass != null) {
@@ -1267,7 +1304,8 @@
      * @param path The original path.
      * @return The path with home dir substitution.
      */
-    private String processPath(String path) {
+    private String processPath(String path)
+    {
         if (path.startsWith("~")) {
             return path.replaceFirst("~", System.getProperty("user.home"));
         } else {
@@ -1276,7 +1314,8 @@
     }
 
     // Wrap Drivers with a DriverAdapter. Only one will be created per job.
-    public DriverAdapter getDriverAdapter() {
+    public DriverAdapter getDriverAdapter()
+    {
         if (driverAdapter == null) {
             Driver topDriver = new Driver();
             for (Driver driver : getDriverExecList()) {
@@ -1288,14 +1327,16 @@
     }
 
     // Process a single LCSim event using the DriverAdapter.
-    public void processEvent(EventHeader event) {
+    public void processEvent(EventHeader event)
+    {
         getDriverAdapter().recordSupplied(new RecordEvent(loop, event));
     }
 
     /**
      * Reset the class's state so another job can be run.
      */
-    public synchronized void reset() {
+    public synchronized void reset()
+    {
 
         driverAdapter = null;
         loop = null;
@@ -1348,27 +1389,33 @@
         wasSetup = false;
     }
 
-    public void configure() {
+    public void configure()
+    {
         getDriverAdapter().start(null);
     }
 
-    public void reconfigure() {
+    public void reconfigure()
+    {
         getDriverAdapter().start(null);
     }
 
-    public void suspend() {
+    public void suspend()
+    {
         getDriverAdapter().suspend(null);
     }
 
-    public void finish() {
+    public void finish()
+    {
         getDriverAdapter().finish(null);
     }
 
-    public void setPerformDryRun(boolean d) {
+    public void setPerformDryRun(boolean d)
+    {
         this.performDryRun = d;
     }
 
-    private void checkConditions() {
+    private void checkConditions()
+    {
 
         // Get conditions element if it is there; otherwise return.
         Element conditionsElement = root.getChild("conditions");
@@ -1406,8 +1453,7 @@
                     } catch (ConditionsSetNotFoundException e) {
                         logStream.println(conditionElement.getTextTrim() + " - NOT FOUND");
                         if (required)
-                            throw new RuntimeException("Required conditions " + conditionElement.getTextTrim() + " are missing from detector "
-                                    + detector + ".");
+                            throw new RuntimeException("Required conditions " + conditionElement.getTextTrim() + " are missing from detector " + detector + ".");
                     }
                 }
             }
@@ -1429,7 +1475,8 @@
         }
     }
 
-    private ConditionsCheckDriver createConditionsCheckDriver() {
+    private ConditionsCheckDriver createConditionsCheckDriver()
+    {
         ConditionsCheckDriver driver = new ConditionsCheckDriver();
         Element conditionsElement = root.getChild("conditions");
         if (conditionsElement == null)
CVSspam 0.2.12


Use REPLY-ALL to reply to list

To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1