Print

Print


Author: [log in to unmask]
Date: Fri Jan 23 11:47:15 2015
New Revision: 1979

Log:
Add support for detector alias so compact.xml can be changed on the fly if needed.  HPSJAVA-284

Modified:
    java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/Commands.java
    java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/JobSettingsPanel.java
    java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/MonitoringApplication.java
    java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/model/ConfigurationModel.java

Modified: java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/Commands.java
 =============================================================================
--- java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/Commands.java	(original)
+++ java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/Commands.java	Fri Jan 23 11:47:15 2015
@@ -9,6 +9,7 @@
     static final String AIDA_AUTO_SAVE = "aidaAutoSave";
     static final String AIDA_AUTO_SAVE_CHANGED = "aidaAutoSaveChanged";
     static final String BLOCKING_CHANGED = "blockingChanged";
+    static final String CHOOSE_COMPACT_FILE = "chooseCompactFile";
     static final String CHOOSE_LOG_FILE = "chooseLogFile";
     static final String CHOOSE_FILE_SOURCE = "chooseFileSource";
     static final String CHOOSE_STEERING_FILE = "chooseSteeringFile";
@@ -16,6 +17,7 @@
     static final String CLEAR_LOG_TABLE = "clearLogTable";
     static final String DATA_SOURCE_TYPE_CHANGED = "dataSourceTypeChanged";
     static final String DETECTOR_NAME_CHANGED = "detectorNameChanged";
+    static final String DETECTOR_ALIAS_CHANGED = "detectorAliasChanged";
     static final String DISCONNECT = "disconnect";
     static final String DISCONNECT_ON_ERROR_CHANGED = "disconnectOnErrorChanged";
     static final String DISCONNECT_ON_END_RUN_CHANGED = "disconnectOnEndRunChanged";

Modified: java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/JobSettingsPanel.java
 =============================================================================
--- java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/JobSettingsPanel.java	(original)
+++ java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/JobSettingsPanel.java	Fri Jan 23 11:47:15 2015
@@ -30,6 +30,8 @@
 import javax.swing.JComboBox;
 import javax.swing.JFileChooser;
 import javax.swing.JTextField;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.filechooser.FileNameExtensionFilter;
 
 import org.hps.monitoring.enums.SteeringType;
 import org.hps.monitoring.gui.model.ConfigurationModel;
@@ -50,6 +52,7 @@
     private JTextField steeringFileField;
     private JComboBox<?> steeringTypeComboBox;
     private JComboBox<String> detectorNameComboBox;
+    private JTextField detectorAliasField;
     private JComboBox<String> eventBuilderComboBox;
     private JTextField userRunNumberField;
     private JCheckBox freezeConditionsCheckBox;    
@@ -106,6 +109,15 @@
         detectorNameComboBox = addComboBox("Detector Name", this.findDetectorNames());
         detectorNameComboBox.setActionCommand(DETECTOR_NAME_CHANGED);
         detectorNameComboBox.addActionListener(this);
+        
+        detectorAliasField = addField("Detector Resources Directory", "", 35, true);
+        detectorAliasField.setActionCommand(DETECTOR_ALIAS_CHANGED);
+        detectorAliasField.addPropertyChangeListener("value", this);
+        detectorAliasField.addActionListener(this);
+        
+        JButton compactXmlButton = addButton("Select Compact Xml File");
+        compactXmlButton.setActionCommand(Commands.CHOOSE_COMPACT_FILE);
+        compactXmlButton.addActionListener(this);
 
         userRunNumberField = addField("User Run Number", "", 10, false);
         userRunNumberField.addPropertyChangeListener("value", this);
@@ -226,6 +238,46 @@
             }
         }
     }
+    
+    /**
+     * This filter will accept only files called compact.xml which
+     * should be an LCSim detector description file. 
+     */
+    static class CompactFileFilter extends FileFilter {
+
+        public CompactFileFilter() {            
+        }
+        
+        @Override
+        public boolean accept(File pathname) {
+            if (pathname.getName().equals("compact.xml")) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+        
+        @Override
+        public String getDescription() {
+            return "Compact XML files";
+        }        
+    }
+    
+    
+    /**
+     * Choose a compact XML file to override the one embedded in the jar as a resource.
+     */
+    void chooseCompactFile() {
+        JFileChooser fc = new JFileChooser();
+        fc.setDialogTitle("Choose a Compact XML File");
+        fc.setCurrentDirectory(new File("."));
+        fc.setFileFilter(new CompactFileFilter());
+        int r = fc.showDialog(this, "Select ...");
+        if (r == JFileChooser.APPROVE_OPTION) {
+            File file = fc.getSelectedFile();
+            configurationModel.setDetectorAlias(file.getParent());
+        }
+    }    
 
     /**
      * Parse the lcsim steering file to see if it appears to be valid.
@@ -246,6 +298,8 @@
     public void actionPerformed(ActionEvent e) {
         if (e.getActionCommand().equals(Commands.CHOOSE_STEERING_FILE)) {
             this.chooseSteeringFile();
+        } else if (e.getActionCommand().equals(Commands.CHOOSE_COMPACT_FILE)) {
+            chooseCompactFile();
         } else if (DISCONNECT_ON_ERROR_CHANGED.equals(e.getActionCommand())) {
             configurationModel.setDisconnectOnError(disconnectOnErrorCheckBox.isSelected());
         } else if (DISCONNECT_ON_END_RUN_CHANGED.equals(e.getActionCommand())) {
@@ -270,6 +324,8 @@
             } else {
                 throw new IllegalArgumentException("Conditions system may only be frozen if there is a valid user run number.");
             }
+        } else if (DETECTOR_ALIAS_CHANGED.equals(e.getActionCommand())) {
+            configurationModel.setDetectorName(detectorAliasField.getText());
         }
     }
 
@@ -334,6 +390,8 @@
 
             if (evt.getPropertyName().equals(DETECTOR_NAME_PROPERTY)) {
                 detectorNameComboBox.setSelectedItem((String) value);
+            } else if (evt.getPropertyName().equals(DETECTOR_ALIAS_PROPERTY)) {
+                detectorAliasField.setText((String) value);
             } else if (evt.getPropertyName().equals(AIDA_AUTO_SAVE_PROPERTY)) {
                 aidaAutoSaveCheckbox.setSelected((Boolean) value);
             } else if (evt.getPropertyName().equals(AIDA_FILE_NAME_PROPERTY)) {

Modified: java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/MonitoringApplication.java
 =============================================================================
--- java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/MonitoringApplication.java	(original)
+++ java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/MonitoringApplication.java	Fri Jan 23 11:47:15 2015
@@ -99,6 +99,7 @@
 import org.jlab.coda.jevio.EvioException;
 import org.jlab.coda.jevio.EvioReader;
 import org.lcsim.conditions.ConditionsManager;
+import org.lcsim.conditions.ConditionsReader;
 import org.lcsim.lcio.LCIOReader;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
@@ -1114,6 +1115,12 @@
         try {
             // Create and the job manager.  The conditions manager is instantiated from this call but not configured.
             jobManager = new JobManager();
+            
+            if (configurationModel.hasPropertyValue(ConfigurationModel.DETECTOR_ALIAS_PROPERTY) && configurationModel.getDetectorAlias() != null) {
+                // Set a detector alias.                
+                ConditionsReader.addAlias(configurationModel.getDetectorName(), "file://" + configurationModel.getDetectorAlias());
+                logger.config("using detector alias " + configurationModel.getDetectorAlias());
+            }
                         
             // Setup the event builder to translate from EVIO to LCIO.
             // This must happen before Driver setup so the builder's listeners are activated first!
@@ -1166,7 +1173,7 @@
         jobManager.setup(is);
         is.close();
     }
-
+        
     /**
      * Create the event builder for converting EVIO events to LCSim.
      */
@@ -1189,7 +1196,7 @@
 
         log(Level.CONFIG, "Successfully initialized event builder <" + eventBuilderClassName + ">");
     }
-
+    
     /**
      * Create a connection to an ET system using current parameters from the GUI. If successful, the
      * application's ConnectionStatus is changed to CONNECTED.

Modified: java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/model/ConfigurationModel.java
 =============================================================================
--- java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/model/ConfigurationModel.java	(original)
+++ java/trunk/monitoring-app/src/main/java/org/hps/monitoring/gui/model/ConfigurationModel.java	Fri Jan 23 11:47:15 2015
@@ -26,6 +26,7 @@
     public static final String AIDA_AUTO_SAVE_PROPERTY = "AidaAutoSave";
     public static final String AIDA_FILE_NAME_PROPERTY = "AidaFileName";
     public static final String DETECTOR_NAME_PROPERTY = "DetectorName";
+    public static final String DETECTOR_ALIAS_PROPERTY = "DetectorAlias";
     public static final String DISCONNECT_ON_ERROR_PROPERTY = "DisconnectOnError";
     public static final String DISCONNECT_ON_END_RUN_PROPERTY = "DisconnectOnEndRun";
     public static final String EVENT_BUILDER_PROPERTY = "EventBuilderClassName";
@@ -63,12 +64,14 @@
 
     // These key values are primarily used to figure out what properties need to be persisted when
     // writing to a text file.
+    // FIXME: This could probably be replaced with introspection on this class of "_PROPERTY" variables.
     static final String[] CONFIG_PROPERTIES = new String[] {
 
             // Job settings
             AIDA_AUTO_SAVE_PROPERTY, 
             AIDA_FILE_NAME_PROPERTY, 
             DETECTOR_NAME_PROPERTY, 
+            DETECTOR_ALIAS_PROPERTY,
             DISCONNECT_ON_ERROR_PROPERTY, 
             DISCONNECT_ON_END_RUN_PROPERTY, 
             EVENT_BUILDER_PROPERTY,
@@ -177,6 +180,20 @@
         config.set(DETECTOR_NAME_PROPERTY, detectorName);
         firePropertyChange(DETECTOR_NAME_PROPERTY, oldValue, getDetectorName());
     }
+    
+    public String getDetectorAlias() {
+        return config.get(DETECTOR_ALIAS_PROPERTY);
+    }
+    
+    public void setDetectorAlias(String detectorAlias) {
+        String oldValue = null;
+        if (hasPropertyValue(DETECTOR_ALIAS_PROPERTY)) {
+            oldValue = getDetectorAlias();
+        }
+        config.set(DETECTOR_ALIAS_PROPERTY, detectorAlias);
+        firePropertyChange(DETECTOR_ALIAS_PROPERTY, oldValue, getDetectorAlias());
+    }
+    
 
     public String getEventBuilderClassName() {
         return config.get(EVENT_BUILDER_PROPERTY);