Print

Print


Author: [log in to unmask]
Date: Wed Feb 17 13:28:43 2016
New Revision: 4234

Log:
Add setup helper class for database conditions manager.

Added:
    java/branches/jeremy-dev/job/src/main/java/org/hps/job/DatabaseConditionsManagerSetup.java

Added: java/branches/jeremy-dev/job/src/main/java/org/hps/job/DatabaseConditionsManagerSetup.java
 =============================================================================
--- java/branches/jeremy-dev/job/src/main/java/org/hps/job/DatabaseConditionsManagerSetup.java	(added)
+++ java/branches/jeremy-dev/job/src/main/java/org/hps/job/DatabaseConditionsManagerSetup.java	Wed Feb 17 13:28:43 2016
@@ -0,0 +1,123 @@
+package org.hps.job;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.hps.conditions.database.DatabaseConditionsManager;
+import org.hps.detector.svt.SvtDetectorSetup;
+import org.hps.run.database.RunManager;
+import org.lcsim.conditions.ConditionsListener;
+import org.lcsim.job.DefaultConditionsSetup;
+
+/**
+ * Provides setup for HPS specific conditions manager.
+ * 
+ * @author Jeremy McCormick, SLAC
+ *
+ */
+public final class DatabaseConditionsManagerSetup extends DefaultConditionsSetup {
+
+    private Logger LOGGER = Logger.getLogger(DatabaseConditionsManagerSetup.class.getPackage().getName());   
+    private boolean enableRunManager = true;
+    private Set<String> tags = null;
+    private boolean freeze = false;
+    
+    /**
+     * Set whether system should be frozen after initialization.
+     * @param freeze <code>true</code> to freeze conditions after initialization
+     */
+    public void setFreeze(boolean freeze) {
+        this.freeze = freeze;
+    }
+    
+    /**
+     * Enable the run manager in the job.
+     * @param enableRunManager <code>true</code> to enable run manager
+     */
+    public void setEnableRunManager(boolean enableRunManager) {
+        this.enableRunManager = enableRunManager;
+    }
+    
+    /**
+     * Set the set of tags for filtering conditions records.
+     * @param tags the set of tags for filtering conditions records
+     */
+    public void setTags(Set<String> tags) {
+        this.tags = tags;
+    }
+
+    /**
+     * Configure the conditions system before it is initialized.
+     * <p>
+     * An SVT specific setup class is added to the manager here.
+     * <p>
+     * This method will also optionally setup the {@link org.hps.run.database.RunManager} 
+     * and can pass a set of tags to the conditions manager.
+     */
+    @Override
+    public void configure() {
+            
+        // Initialize the db conditions manager.
+        DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+        
+        if (enableRunManager) {
+            LOGGER.config("adding run manager conditions listener");
+            conditionsManager.addConditionsListener(RunManager.getRunManager());
+        }
+        
+        // Add class that will setup SVT detector with conditions data.
+        LOGGER.config("adding SVT detector setup conditions listener");
+        conditionsManager.addConditionsListener(new SvtDetectorSetup());
+                        
+        // Add conditions system tags.
+        if (this.tags != null) {
+            LOGGER.config("adding tags " + tags.toString());
+            conditionsManager.addTags(tags);
+        }
+        
+        // Add extra listeners to manager.
+        for (ConditionsListener listener : listeners) {
+            conditionsManager.addConditionsListener(listener);
+        }
+    }
+     
+    /**
+     * Do post initialization of conditions system, which will freeze the manager if it
+     * is fully initialized (meaning detector name and run were given as arguments to override
+     * the information from the data).
+     */
+    @Override
+    public void postInitialize() {
+        if (DatabaseConditionsManager.getInstance().isInitialized() || this.freeze) {
+            LOGGER.config("Job manager is freezing the conditions system.");
+            DatabaseConditionsManager.getInstance().freeze();
+        }
+    }
+    
+    /**
+     * Do cleanup of conditions system after job.
+     * <p>
+     * Shuts down the database connections to the run manager and conditions manager, if necessary.
+     */
+    @Override
+    public void cleanup() {
+        
+        // Close the conditions database connection.
+        Connection connection = DatabaseConditionsManager.getInstance().getConnection();
+        try {
+            if (connection != null && !connection.isClosed()) {
+                DatabaseConditionsManager.getInstance().closeConnection();
+            }
+        } catch (SQLException e) {
+            LOGGER.log(Level.WARNING, e.getMessage(), e);
+        }
+                        
+        // Close the run manager connection.
+        if (enableRunManager) {
+            RunManager.getRunManager().closeConnection();
+        }
+    }
+}