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);