Author: [log in to unmask] Date: Wed Mar 4 15:42:55 2015 New Revision: 2247 Log: Checkpoint work on monitoring app now that it is mostly working again. Added: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplicationActionListener.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/EvioFileFilter.java Removed: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/enums/ Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/Commands.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/ConnectionSettingsPanel.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/ConnectionStatusPanel.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/EventButtonsPanel.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/EventProcessing.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/JobSettingsPanel.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MenuBar.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplication.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/PlotPanel.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/RunPanel.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/SettingsPanel.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/AbstractModel.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/ConnectionStatusModel.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/DialogUtil.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/ErrorHandler.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/EtSystemUtil.java java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/ResourceUtil.java Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/Commands.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/Commands.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/Commands.java Wed Mar 4 15:42:55 2015 @@ -41,13 +41,13 @@ static final String NEXT = "next"; static final String PAUSE = "pause"; static final String PROCESSING_STAGE_CHANGED = "processingStageChanged"; - static final String RESET_PLOTS = "resetPlots"; + static final String PLOTS_CLEAR = "resetPlots"; static final String RESTORE_DEFAULT_GUI_LAYOUT = "restoreDefaultGuiLayout"; static final String RESUME = "resume"; static final String SAVE_LAYOUT = "saveLayout"; static final String SAVE_LOG_TABLE = "saveLogTable"; - static final String SAVE_PLOTS = "savePlots"; + static final String PLOTS_SAVE = "savePlots"; static final String SCREENSHOT = "screenshot"; static final String SELECT_LOG_FILE = "logToFile"; Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/ConnectionSettingsPanel.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/ConnectionSettingsPanel.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/ConnectionSettingsPanel.java Wed Mar 4 15:42:55 2015 @@ -19,7 +19,6 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -127,41 +126,37 @@ */ public class ConnectionSettingsChangeListener implements PropertyChangeListener { @Override - public void propertyChange(PropertyChangeEvent evt) { - - System.out.println("ConnectionSettingsChangeListener.propertyChange"); - System.out.println(" src: " + evt.getSource()); - System.out.println(" propName: " + evt.getPropertyName()); - System.out.println(" oldValue: " + evt.getOldValue()); - System.out.println(" newValue: " + evt.getNewValue()); - System.out.println(" newValue: " + evt.getPropagationId()); - - //if (evt.getSource() instanceof ConfigurationModel) { - Object value = evt.getNewValue(); - if (evt.getPropertyName().equals(ET_NAME_PROPERTY)) { - etNameField.setText((String) value); - } else if (evt.getPropertyName().equals(HOST_PROPERTY)) { - hostField.setText((String) value); - } else if (evt.getPropertyName().equals(PORT_PROPERTY)) { - portField.setText(value.toString()); - } else if (evt.getPropertyName().equals(BLOCKING_PROPERTY)) { - blockingCheckBox.setSelected((Boolean) value); - } else if (evt.getPropertyName().equals(VERBOSE_PROPERTY)) { - verboseCheckBox.setSelected((Boolean) value); - } else if (evt.getPropertyName().equals(STATION_NAME_PROPERTY)) { - stationNameField.setText((String) value); - } else if (evt.getPropertyName().equals(CHUNK_SIZE_PROPERTY)) { - chunkSizeField.setText(value.toString()); - } else if (evt.getPropertyName().equals(QUEUE_SIZE_PROPERTY)) { - queueSizeField.setText(value.toString()); - } else if (evt.getPropertyName().equals(STATION_POSITION_PROPERTY)) { - stationPositionField.setText(value.toString()); - } else if (evt.getPropertyName().equals(WAIT_MODE_PROPERTY)) { - waitModeComboBox.setSelectedItem(((Mode) value).name()); - } else if (evt.getPropertyName().equals(WAIT_TIME_PROPERTY)) { - waitTimeField.setText(value.toString()); - } else if (evt.getPropertyName().equals(PRESCALE_PROPERTY)) { - prescaleField.setText(value.toString()); + public void propertyChange(PropertyChangeEvent evt) { + configurationModel.removePropertyChangeListener(this); + try { + Object value = evt.getNewValue(); + if (evt.getPropertyName().equals(ET_NAME_PROPERTY)) { + etNameField.setText((String) value); + } else if (evt.getPropertyName().equals(HOST_PROPERTY)) { + hostField.setText((String) value); + } else if (evt.getPropertyName().equals(PORT_PROPERTY)) { + portField.setText(value.toString()); + } else if (evt.getPropertyName().equals(BLOCKING_PROPERTY)) { + blockingCheckBox.setSelected((Boolean) value); + } else if (evt.getPropertyName().equals(VERBOSE_PROPERTY)) { + verboseCheckBox.setSelected((Boolean) value); + } else if (evt.getPropertyName().equals(STATION_NAME_PROPERTY)) { + stationNameField.setText((String) value); + } else if (evt.getPropertyName().equals(CHUNK_SIZE_PROPERTY)) { + chunkSizeField.setText(value.toString()); + } else if (evt.getPropertyName().equals(QUEUE_SIZE_PROPERTY)) { + queueSizeField.setText(value.toString()); + } else if (evt.getPropertyName().equals(STATION_POSITION_PROPERTY)) { + stationPositionField.setText(value.toString()); + } else if (evt.getPropertyName().equals(WAIT_MODE_PROPERTY)) { + waitModeComboBox.setSelectedItem(((Mode) value).name()); + } else if (evt.getPropertyName().equals(WAIT_TIME_PROPERTY)) { + waitTimeField.setText(value.toString()); + } else if (evt.getPropertyName().equals(PRESCALE_PROPERTY)) { + prescaleField.setText(value.toString()); + } + } finally { + configurationModel.addPropertyChangeListener(this); } } } @@ -176,12 +171,12 @@ return; } - System.out.println("ConnectionSettingsPanel.propertyChange"); - System.out.println(" src: " + evt.getSource()); - System.out.println(" propName: " + evt.getPropertyName()); - System.out.println(" oldValue: " + evt.getOldValue()); - System.out.println(" newValue: " + evt.getNewValue()); - System.out.println(" propValue: " + evt.getPropagationId()); + //System.out.println("ConnectionSettingsPanel.propertyChange"); + //System.out.println(" src: " + evt.getSource()); + //System.out.println(" propName: " + evt.getPropertyName()); + //System.out.println(" oldValue: " + evt.getOldValue()); + //System.out.println(" newValue: " + evt.getNewValue()); + //System.out.println(" propValue: " + evt.getPropagationId()); Object source = evt.getSource(); configurationModel.removePropertyChangeListener(this); Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/ConnectionStatusPanel.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/ConnectionStatusPanel.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/ConnectionStatusPanel.java Wed Mar 4 15:42:55 2015 @@ -46,7 +46,6 @@ setLayout(new GridBagLayout()); // setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); - Font font = new Font("Arial", Font.PLAIN, 14); GridBagConstraints c = new GridBagConstraints(); c.weightx = c.weighty = 1.0; @@ -71,8 +70,10 @@ statusField.setHorizontalAlignment(JTextField.LEFT); statusField.setEditable(false); statusField.setBackground(Color.WHITE); - statusField.setFont(font); + statusField.setFont(new Font("Arial", Font.BOLD, 16)); statusField.setMinimumSize(new Dimension(300, 50)); + statusField.setForeground(model.getConnectionStatus().getColor()); + statusField.setText(model.getConnectionStatus().name()); add(statusField, c); // The "@" label. @@ -93,30 +94,18 @@ dateField.setEditable(false); dateField.setBackground(Color.WHITE); dateField.setHorizontalAlignment(JTextField.LEFT); - dateField.setFont(font); + dateField.setFont(new Font("Arial", Font.PLAIN, 14)); dateField.setMinimumSize(new Dimension(200, 50)); - add(dateField, c); - } - - void setConnectionStatus(final ConnectionStatus status) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - statusField.setText(status.name()); - dateField.setText(dateFormat.format(new Date())); - } - }); + add(dateField, c); } @Override public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals(ConnectionStatusModel.CONNECTION_STATUS_PROPERTY)) { final ConnectionStatus status = (ConnectionStatus) evt.getNewValue(); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - statusField.setText(status.name()); - dateField.setText(dateFormat.format(new Date())); - } - }); + statusField.setForeground(status.getColor()); + statusField.setText(status.name()); + dateField.setText(dateFormat.format(new Date())); } } } Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java Wed Mar 4 15:42:55 2015 @@ -2,11 +2,14 @@ import java.awt.Dimension; import java.awt.event.ActionListener; -import java.io.File; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import org.hps.monitoring.application.DataSourceComboBox.DataSourceItem; +import org.hps.monitoring.application.model.ConnectionStatusModel; import org.hps.record.enums.DataSourceType; /** @@ -14,16 +17,26 @@ * @author Jeremy McCormick <[log in to unmask]> * */ -public class DataSourceComboBox extends JComboBox<DataSourceItem> { +public class DataSourceComboBox extends JComboBox<DataSourceItem> implements PropertyChangeListener { - DataSourceComboBox(ActionListener listener) { + ConnectionStatusModel connectionModel; + + DataSourceComboBox(ConnectionStatusModel connectionModel, ActionListener listener) { addActionListener(listener); setPreferredSize(new Dimension(400, this.getPreferredSize().height)); + this.connectionModel = connectionModel; + connectionModel.addPropertyChangeListener(this); + } + + public void addItem(DataSourceItem item) { + // Do not add duplicates. + if (((DefaultComboBoxModel<DataSourceItem>)getModel()).getIndexOf(item) == -1) { + super.addItem(item); + } } static class DataSourceItem { - File file; String name; DataSourceType type; @@ -31,14 +44,32 @@ this.type = type; } - DataSourceItem(File file, DataSourceType type) { - this.file = file; - this.name = file.getName(); - this.file = file; - } - public String toString() { return name; - } + } + + public boolean equals(Object object) { + if (!(object instanceof DataSourceItem)) { + return false; + } + DataSourceItem otherItem = (DataSourceItem) object; + if (this.name == otherItem.name && this.type == otherItem.type) return true; + return false; + } + } + + /** + * + */ + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals(ConnectionStatusModel.CONNECTION_STATUS_PROPERTY)) { + ConnectionStatus status = (ConnectionStatus) evt.getNewValue(); + if (status.equals(ConnectionStatus.DISCONNECTED)) { + setEnabled(true); + } else { + setEnabled(false); + } + } } } Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/EventButtonsPanel.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/EventButtonsPanel.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/EventButtonsPanel.java Wed Mar 4 15:42:55 2015 @@ -11,13 +11,12 @@ import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPanel; -import javax.swing.SwingUtilities; import org.hps.monitoring.application.model.ConnectionStatusModel; /** - * This is the panel with buttons for connecting or disconnecting and controlling the app from pause - * mode. + * This is the panel with buttons for connecting or disconnecting from the session + * and controlling the application from pause mode. */ class EventButtonsPanel extends JPanel implements PropertyChangeListener { @@ -66,46 +65,32 @@ @Override public void propertyChange(final PropertyChangeEvent evt) { + System.out.println("EventButtonsPanel.propertyChange - " + evt.getPropertyName()); if (evt.getPropertyName().equals(ConnectionStatusModel.CONNECTION_STATUS_PROPERTY)) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - setConnectionStatus((ConnectionStatus) evt.getNewValue()); - } - }); + setConnectionStatus((ConnectionStatus) evt.getNewValue()); } else if (evt.getPropertyName().equals(ConnectionStatusModel.PAUSED_PROPERTY)) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - setPaused((boolean) evt.getNewValue()); - } - }); + System.out.println(" setPaused: " + (boolean) evt.getNewValue()); + setPaused((boolean) evt.getNewValue()); } } void setConnectionStatus(final ConnectionStatus status) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - if (status.equals(ConnectionStatus.DISCONNECTED)) { - nextButton.setEnabled(false); - pauseButton.setEnabled(false); - resumeButton.setEnabled(false); - connectButton.setActionCommand(Commands.CONNECT); - connectButton.setIcon(disconnectedIcon); - } else { - pauseButton.setEnabled(true); - connectButton.setActionCommand(Commands.DISCONNECT); - connectButton.setIcon(connectedIcon); - } - } - }); + if (status.equals(ConnectionStatus.DISCONNECTED)) { + nextButton.setEnabled(false); + pauseButton.setEnabled(false); + resumeButton.setEnabled(false); + connectButton.setActionCommand(Commands.CONNECT); + connectButton.setIcon(disconnectedIcon); + } else { + pauseButton.setEnabled(true); + connectButton.setActionCommand(Commands.DISCONNECT); + connectButton.setIcon(connectedIcon); + } } void setPaused(final boolean paused) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - resumeButton.setEnabled(paused); - pauseButton.setEnabled(!paused); - nextButton.setEnabled(paused); - } - }); + resumeButton.setEnabled(paused); + pauseButton.setEnabled(!paused); + nextButton.setEnabled(paused); } } Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/EventProcessing.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/EventProcessing.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/EventProcessing.java Wed Mar 4 15:42:55 2015 @@ -1,8 +1,10 @@ package org.hps.monitoring.application; +import java.awt.event.ActionEvent; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.List; import java.util.logging.Logger; import org.freehep.record.loop.RecordLoop.Command; @@ -15,6 +17,7 @@ import org.hps.record.LCSimEventBuilder; import org.hps.record.composite.CompositeLoop; import org.hps.record.composite.CompositeLoopConfiguration; +import org.hps.record.composite.CompositeRecordProcessor; import org.hps.record.composite.EventProcessingThread; import org.hps.record.enums.DataSourceType; import org.hps.record.evio.EvioDetectorConditionsProcessor; @@ -29,14 +32,20 @@ */ public class EventProcessing { + MonitoringApplication application; SessionState state; ErrorHandler errorHandler; Logger logger; - - EventProcessing(SessionState state, Logger logger, ErrorHandler errorHandler) { - this.state = state; - this.logger = logger; - this.errorHandler = errorHandler; + List<CompositeRecordProcessor> processors; + + EventProcessing( + MonitoringApplication application, + List<CompositeRecordProcessor> processors) { + this.application = application; + this.state = application.sessionState; + this.logger = MonitoringApplication.logger; + this.errorHandler = application.errorHandler; + this.processors = processors; } void setup(ConfigurationModel configurationModel) { @@ -165,18 +174,17 @@ loopConfig.add(new EtSystemStripCharts()); } - // FIXME: Do this externally? - // RunPanel updater. - //loopConfig.add(frame.runPanel.new RunModelUpdater()); + // Add extra CompositeRecordProcessors to the loop config. + for (CompositeRecordProcessor processor : processors) { + loopConfig.add(processor); + } - // Setup for conditions activation via EVIO events. + // Enable conditions system activation from EVIO event information. loopConfig.add(new EvioDetectorConditionsProcessor(configurationModel.getDetectorName())); // Create the CompositeLoop with the configuration. state.loop = new CompositeLoop(loopConfig); } - - /** * Stop the event processing by executing a <code>STOP</code> command on the record loop and @@ -233,13 +241,89 @@ void start() { - // Create the processing thread. + // Start the event processing thread. state.processingThread = new EventProcessingThread(state.loop); - - // Start the processing thread. state.processingThread.start(); - } - - - -} + + // Start the watchdog thread which will auto-disconnect when event processing is done. + state.sessionWatchdogThread = new SessionWatchdogThread(state.processingThread); + state.sessionWatchdogThread.start(); + } + + /** + * Notify the event processor to pause. + */ + void pause() { + if (!application.connectionModel.getPaused()) { + state.loop.pause(); + application.connectionModel.setPaused(true); + } + } + + /** + * + */ + void next() { + if (application.connectionModel.getPaused()) { + application.connectionModel.setPaused(false); + state.loop.execute(Command.GO_N, 1L, true); + application.connectionModel.setPaused(true); + } + } + + /** + * Notify the event processor to resume processing events, if paused. + */ + void resume() { + if (application.connectionModel.getPaused()) { + // Notify event processor to continue. + state.loop.resume(); + application.connectionModel.setPaused(false); + } + } + + void killWatchdogThread() { + // Is the session watchdog thread not null? + if (state.sessionWatchdogThread != null) { + // Is the thread still alive? + if (state.sessionWatchdogThread.isAlive()) { + // Interrupt the thread which should cause it to stop. + state.sessionWatchdogThread.interrupt(); + try { + // This should always work once the thread is interrupted. + state.sessionWatchdogThread.join(); + } catch (InterruptedException e) { + // This should never happen. + e.printStackTrace(); + } + } + // Set the thread object to null. + state.sessionWatchdogThread = null; + } + } + + class SessionWatchdogThread extends Thread { + + Thread processingThread; + + SessionWatchdogThread(Thread processingThread) { + this.processingThread = processingThread; + } + + public void run() { + try { + // When the event processing thread finishes, the session should be stopped and a + // disconnect should occur. + processingThread.join(); + + // Activate a disconnect using the ActionEvent which is used by the disconnect button. + application.actionListener.actionPerformed(new ActionEvent(Thread.currentThread(), 0, Commands.DISCONNECT)); + + } catch (InterruptedException e) { + // This probably just means that the disconnect button was pushed, and this thread + // should no longer monitor the event processing. + e.printStackTrace(); + } + } + } +} Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/JobSettingsPanel.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/JobSettingsPanel.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/JobSettingsPanel.java Wed Mar 4 15:42:55 2015 @@ -1,33 +1,7 @@ package org.hps.monitoring.application; -import static org.hps.monitoring.application.Commands.AIDA_AUTO_SAVE_CHANGED; -import static org.hps.monitoring.application.Commands.DETECTOR_ALIAS_CHANGED; -import static org.hps.monitoring.application.Commands.DETECTOR_NAME_CHANGED; -import static org.hps.monitoring.application.Commands.DISCONNECT_ON_END_RUN_CHANGED; -import static org.hps.monitoring.application.Commands.DISCONNECT_ON_ERROR_CHANGED; -import static org.hps.monitoring.application.Commands.EVENT_BUILDER_CHANGED; -import static org.hps.monitoring.application.Commands.FREEZE_CONDITIONS_CHANGED; -import static org.hps.monitoring.application.Commands.LOG_LEVEL_CHANGED; -import static org.hps.monitoring.application.Commands.LOG_TO_FILE_CHANGED; -import static org.hps.monitoring.application.Commands.STEERING_RESOURCE_CHANGED; -import static org.hps.monitoring.application.Commands.STEERING_TYPE_CHANGED; -import static org.hps.monitoring.application.Commands.USER_RUN_NUMBER_CHANGED; -import static org.hps.monitoring.application.model.ConfigurationModel.AIDA_AUTO_SAVE_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.AIDA_FILE_NAME_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.DETECTOR_ALIAS_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.DETECTOR_NAME_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.DISCONNECT_ON_END_RUN_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.DISCONNECT_ON_ERROR_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.EVENT_BUILDER_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.FREEZE_CONDITIONS_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.LOG_FILE_NAME_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.LOG_LEVEL_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.LOG_TO_FILE_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.MAX_EVENTS_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.STEERING_FILE_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.STEERING_RESOURCE_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.STEERING_TYPE_PROPERTY; -import static org.hps.monitoring.application.model.ConfigurationModel.USER_RUN_NUMBER_PROPERTY; +import static org.hps.monitoring.application.Commands.*; +import static org.hps.monitoring.application.model.ConfigurationModel.*; import java.awt.GridBagLayout; import java.awt.Insets; @@ -70,8 +44,6 @@ private JTextField maxEventsField; private JCheckBox disconnectOnErrorCheckBox; private JCheckBox disconnectOnEndRunCheckBox; - private JTextField aidaSaveFileNameField; - private JCheckBox aidaAutoSaveCheckbox; private JTextField logFileNameField; private JComboBox<?> logLevelComboBox; private JCheckBox logToFileCheckbox; @@ -168,13 +140,6 @@ logFileNameField = addField("Log File", "", "Full path to log file.", 30, false); logFileNameField.addPropertyChangeListener("value", this); - - aidaAutoSaveCheckbox = addCheckBox("Save AIDA at End of Job", false, false); - aidaAutoSaveCheckbox.addActionListener(this); - aidaAutoSaveCheckbox.setActionCommand(AIDA_AUTO_SAVE_CHANGED); - - aidaSaveFileNameField = addField("AIDA Auto Save File Name", "", 30, false); - aidaSaveFileNameField.addPropertyChangeListener("value", this); } @Override @@ -190,26 +155,6 @@ logToFileCheckbox.addActionListener(listener); steeringResourcesComboBox.addActionListener(listener); freezeConditionsCheckBox.addActionListener(listener); - } - - /** - * Choose a file name for the automatic AIDA save file. - */ - void chooseAidaAutoSaveFile() { - JFileChooser fc = new JFileChooser(); - fc.setDialogTitle("Choose AIDA Auto Save File"); - int r = fc.showSaveDialog(this); - if (r == JFileChooser.APPROVE_OPTION) { - File file = fc.getSelectedFile(); - String fileName = file.getPath(); - int extIndex = fileName.lastIndexOf("."); - if ((extIndex == -1) || !(fileName.substring(extIndex + 1, fileName.length())).toLowerCase().equals("aida")) { - fileName = fileName + ".aida"; - } - final String finalFileName = fileName; - configurationModel.setAidaAutoSave(true); - configurationModel.setAidaFileName(finalFileName); - } } /** @@ -310,8 +255,6 @@ configurationModel.setLogToFile(logToFileCheckbox.isSelected()); } else if (LOG_LEVEL_CHANGED.equals(event.getActionCommand())) { configurationModel.setLogLevel(Level.parse((String) logLevelComboBox.getSelectedItem())); - } else if (AIDA_AUTO_SAVE_CHANGED.equals(event.getActionCommand())) { - configurationModel.setAidaAutoSave(aidaAutoSaveCheckbox.isSelected()); } else if (EVENT_BUILDER_CHANGED.equals(event.getActionCommand())) { configurationModel.setEventBuilderClassName((String) eventBuilderComboBox.getSelectedItem()); } else if (DETECTOR_NAME_CHANGED.equals(event.getActionCommand())) { @@ -347,10 +290,6 @@ configurationModel.setSteeringFile(steeringFileField.getText()); } else if (source == logFileNameField) { configurationModel.setLogFileName(logFileNameField.getText()); - } else if (source == aidaSaveFileNameField) { - configurationModel.setAidaFileName(aidaSaveFileNameField.getText()); - } else if (source == aidaAutoSaveCheckbox) { - configurationModel.setAidaAutoSave(aidaAutoSaveCheckbox.isSelected()); } else if (source == userRunNumberField) { // Is run number being reset to null or empty? if (userRunNumberField.getText() == null || userRunNumberField.getText().isEmpty()) { @@ -388,12 +327,12 @@ private class JobSettingsChangeListener implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent evt) { - System.out.println("JobSettingsChangeListener.propertyChange"); - System.out.println(" src: " + evt.getSource()); - System.out.println(" propName: " + evt.getPropertyName()); - System.out.println(" oldValue: " + evt.getOldValue()); - System.out.println(" newValue: " + evt.getNewValue()); - System.out.println(" propId: " + evt.getPropagationId()); + //System.out.println("JobSettingsChangeListener.propertyChange"); + //System.out.println(" src: " + evt.getSource()); + //System.out.println(" propName: " + evt.getPropertyName()); + //System.out.println(" oldValue: " + evt.getOldValue()); + //System.out.println(" newValue: " + evt.getNewValue()); + //System.out.println(" propId: " + evt.getPropagationId()); if (evt.getSource() instanceof ConfigurationModel) { Object value = evt.getNewValue(); configurationModel.removePropertyChangeListener(this); @@ -402,10 +341,6 @@ 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)) { - aidaSaveFileNameField.setText((String) value); } else if (evt.getPropertyName().equals(DISCONNECT_ON_ERROR_PROPERTY)) { disconnectOnErrorCheckBox.setSelected((Boolean) value); } else if (evt.getPropertyName().equals(DISCONNECT_ON_END_RUN_PROPERTY)) { Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MenuBar.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MenuBar.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MenuBar.java Wed Mar 4 15:42:55 2015 @@ -1,6 +1,13 @@ package org.hps.monitoring.application; -import static org.hps.monitoring.application.Commands.*; +import static org.hps.monitoring.application.Commands.EXIT; +import static org.hps.monitoring.application.Commands.OPEN_FILE; +import static org.hps.monitoring.application.Commands.PLOTS_SAVE; +import static org.hps.monitoring.application.Commands.PLOTS_CLEAR; +import static org.hps.monitoring.application.Commands.SETTINGS_LOAD; +import static org.hps.monitoring.application.Commands.SETTINGS_LOAD_DEFAULT; +import static org.hps.monitoring.application.Commands.SETTINGS_SAVE; +import static org.hps.monitoring.application.Commands.SETTINGS_SHOW; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; @@ -10,12 +17,7 @@ import javax.swing.JMenuItem; public class MenuBar extends JMenuBar { - - //private JMenuItem savePlotsItem; - //private JMenuItem logItem; - //private JMenuItem terminalItem; - //private JMenuItem saveLayoutItem; - + MenuBar(ActionListener listener) { JMenu fileMenu = new JMenu("File"); @@ -40,8 +42,8 @@ settingsMenu.setMnemonic(KeyEvent.VK_S); add(settingsMenu); - JMenuItem settingsItem = new JMenuItem("Show Settings ..."); - settingsItem.setMnemonic(KeyEvent.VK_P); + JMenuItem settingsItem = new JMenuItem("Open Settings Dialog ..."); + settingsItem.setMnemonic(KeyEvent.VK_O); settingsItem.setActionCommand(SETTINGS_SHOW); settingsItem.addActionListener(listener); settingsItem.setToolTipText("Show settings dialog"); @@ -49,7 +51,7 @@ JMenuItem loadConfigItem = new JMenuItem("Load Settings ..."); loadConfigItem.addActionListener(listener); - loadConfigItem.setMnemonic(KeyEvent.VK_C); + loadConfigItem.setMnemonic(KeyEvent.VK_L); loadConfigItem.setActionCommand(SETTINGS_LOAD); loadConfigItem.setToolTipText("Load settings from a properties file"); settingsMenu.add(loadConfigItem); @@ -67,34 +69,28 @@ defaultSettingsItem.setActionCommand(SETTINGS_LOAD_DEFAULT); defaultSettingsItem.setToolTipText("Load the default settings"); settingsMenu.add(defaultSettingsItem); - - /* + JMenu plotsMenu = new JMenu("Plots"); - plotsMenu.setMnemonic(KeyEvent.VK_O); + plotsMenu.setMnemonic(KeyEvent.VK_P); add(plotsMenu); + + JMenuItem savePlotsItem = new JMenuItem("Save Plots ..."); + savePlotsItem.setMnemonic(KeyEvent.VK_S); + savePlotsItem.setActionCommand(PLOTS_SAVE); + savePlotsItem.addActionListener(listener); + savePlotsItem.setEnabled(true); + savePlotsItem.setToolTipText("Save plots to AIDA file"); + plotsMenu.add(savePlotsItem); - JMenuItem aidaAutoSaveItem = new JMenuItem("Set AIDA Auto Save File ..."); - aidaAutoSaveItem.setMnemonic(KeyEvent.VK_A); - aidaAutoSaveItem.setActionCommand(AIDA_AUTO_SAVE); - //aidaAutoSaveItem.addActionListener(listener); - aidaAutoSaveItem.setToolTipText("Select name of file to auto save AIDA plots at end of job."); - plotsMenu.add(aidaAutoSaveItem); - - savePlotsItem = new JMenuItem("Save Plots to AIDA File..."); - savePlotsItem.setMnemonic(KeyEvent.VK_P); - savePlotsItem.setActionCommand(SAVE_PLOTS); - //savePlotsItem.addActionListener(listener); - savePlotsItem.setEnabled(false); - savePlotsItem.setToolTipText("Save plots from default AIDA tree to an output file."); - plotsMenu.add(savePlotsItem); + JMenuItem clearPlotsItem = new JMenuItem("Clear plots"); + clearPlotsItem.setMnemonic(KeyEvent.VK_C); + clearPlotsItem.setActionCommand(PLOTS_CLEAR); + clearPlotsItem.addActionListener(listener); + clearPlotsItem.setEnabled(true); + clearPlotsItem.setToolTipText("Clear the AIDA plots"); + plotsMenu.add(clearPlotsItem); - JMenuItem resetPlotsItem = new JMenuItem("Reset Plots"); - resetPlotsItem.setMnemonic(KeyEvent.VK_R); - resetPlotsItem.setActionCommand(RESET_PLOTS); - //resetPlotsItem.addActionListener(listener); - resetPlotsItem.setEnabled(true); - resetPlotsItem.setToolTipText("Reset all AIDA plots in the default tree."); - plotsMenu.add(resetPlotsItem); + /* JMenu logMenu = new JMenu("Log"); logMenu.setMnemonic(KeyEvent.VK_L); Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplication.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplication.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplication.java Wed Mar 4 15:42:55 2015 @@ -1,6 +1,5 @@ package org.hps.monitoring.application; -import static org.hps.monitoring.application.Commands.*; import hep.aida.jfree.AnalysisFactory; import hep.aida.jfree.plotter.PlotterRegion; import hep.aida.jfree.plotter.PlotterRegionListener; @@ -9,22 +8,19 @@ import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; -import javax.swing.JFileChooser; -import javax.swing.filechooser.FileFilter; -import javax.swing.filechooser.FileNameExtensionFilter; - +import org.hps.monitoring.application.RunPanel.RunPanelUpdater; import org.hps.monitoring.application.model.Configuration; import org.hps.monitoring.application.model.ConfigurationModel; import org.hps.monitoring.application.model.ConnectionStatusModel; import org.hps.monitoring.application.model.RunModel; -import org.hps.monitoring.application.util.DialogUtil; import org.hps.monitoring.application.util.ErrorHandler; import org.hps.monitoring.application.util.EtSystemUtil; import org.hps.monitoring.plotting.MonitoringAnalysisFactory; @@ -33,10 +29,16 @@ import org.hps.monitoring.subsys.SystemStatus; import org.hps.monitoring.subsys.SystemStatusListener; import org.hps.monitoring.subsys.SystemStatusRegistry; +import org.hps.record.composite.CompositeRecordProcessor; import org.hps.record.enums.DataSourceType; import org.lcsim.util.aida.AIDA; -public class MonitoringApplication implements PropertyChangeListener, ActionListener, SystemStatusListener { +/** + * + * @author Jeremy McCormick <[log in to unmask]> + * + */ +public class MonitoringApplication implements PropertyChangeListener, SystemStatusListener { static Logger logger; static { @@ -47,6 +49,7 @@ ErrorHandler errorHandler; MonitoringApplicationFrame frame; + ActionListener actionListener = new MonitoringApplicationActionListener(this); RunModel runModel = new RunModel(); ConfigurationModel configurationModel = new ConfigurationModel(); @@ -56,10 +59,10 @@ EventProcessing processing; // The default configuration resource. - private static final String DEFAULT_CONFIGURATION = "/org/hps/monitoring/config/default_config.prop"; + static final String DEFAULT_CONFIGURATION = "/org/hps/monitoring/config/default_config.prop"; // The application's global Configuration settings. - private Configuration configuration; + Configuration configuration; class LogHandler extends Handler { @@ -80,10 +83,10 @@ MonitoringApplication(Configuration configuration) { // Setup the error handler. - this.errorHandler = new ErrorHandler(frame, logger); - - // Setup the main GUI component, passing it the data models and this object as the primary ActionListener. - frame = new MonitoringApplicationFrame(configurationModel, runModel, connectionModel, this); + errorHandler = new ErrorHandler(frame, logger); + + // Setup the main GUI component. + frame = new MonitoringApplicationFrame(this); // Add this class as a listener on the configuration model. configurationModel.addPropertyChangeListener(this); @@ -91,7 +94,7 @@ // Setup the logger. setupLogger(); - // Setup plotting backend and connect to the GUI. + // Setup AIDA plotting and connect it to the GUI. setupAida(); // Set the configuration. @@ -103,8 +106,8 @@ this.configuration = new Configuration(DEFAULT_CONFIGURATION); } - // Load the current configuration. - loadConfiguration(); + // Load the configuration. + loadConfiguration(this.configuration); } void setupAida() { @@ -115,7 +118,6 @@ public void regionSelected(PlotterRegion region) { if (region == null) throw new RuntimeException("The region arg is null!!!"); - // System.out.println("MonitoringApplication - regionSelected - " + region.title()); frame.plotInfoPanel.setCurrentRegion(region); } }); @@ -142,7 +144,7 @@ // TODO Auto-generated method stub } - void loadConfiguration() { + void loadConfiguration(Configuration configuration) { // Set the Configuration on the ConfigurationModel which will trigger all the PropertyChangelListeners. configurationModel.setConfiguration(configuration); @@ -153,67 +155,7 @@ //else //logger.config("Loaded configuration from resource: " + configuration.getResourcePath()); } - - /** - * Start a new monitoring session. This method is executed in a separate thread from the EDT - * within {@link #actionPerformed(ActionEvent)} so GUI updates are not blocked while the session - * is being setup. - */ - void startSession() { - - //logger.fine("Starting a new monitoring session."); - - // Show a modal window that will block the GUI until connected or an error occurs. - //JDialog dialog = DialogUtil.showStatusDialog(this, "Info", "Starting new session ..."); - - try { - - // Reset the plot panel and global AIDA state. - resetPlots(); - - // The system status registry is cleared here before any event processors - // which might create a SystemStatus are added to the event processing chain - // e.g. an LCSim Driver, etc. - SystemStatusRegistry.getSystemStatusRegistery().clear(); - - // Setup event processing. - sessionState = new SessionState(); - processing = new EventProcessing(sessionState, logger, errorHandler); - processing.setup(configurationModel); - - // Add the dashboard updater. - sessionState.loop.getCompositeLoopAdapters().get(0).addProcessor(frame.runPanel.new RunModelUpdater()); - - // Setup the system status monitor table. - setupSystemStatusMonitor(); - - // Connect to the ET system. - connect(); - - // Start event processing. - processing.start(); - - // Start thread which will trigger a disconnect if the event processing finishes. - //startSessionWatchdogThread(); - - //logger.info("successfully started the monitoring session"); - - } catch (Exception e) { - - //logger.severe("error occurred while setting up the session"); - - // Log the error that occurred. - errorHandler.setError(e).log().printStackTrace(); - - // Disconnect from the session. - // FIXME: This should never be needed as connected should only be set at end w/o errors. - disconnect(); - - } finally { - // Close modal window. - //dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING)); - } - } + /** * Connect to the ET system using the current connection settings. @@ -275,80 +217,7 @@ // Reset plots. frame.plotPanel.reset(); } - - /** - * The action handler method for the application. - * @param e The event to handle. - */ - public void actionPerformed(ActionEvent e) { - - System.out.println("MonitoringApplication.actionPerformed - " + e.getActionCommand()); - - String cmd = e.getActionCommand(); - if (CONNECT.equals(cmd)) { - // Run the start session method on a separate thread. - new Thread() { - public void run() { - startSession(); - } - }.start(); - } else if (DISCONNECT.equals(cmd)) { - // Run the stop session method on a separate thread. - new Thread() { - public void run() { - stopSession(); - } - }.start(); - } else if (SAVE_PLOTS.equals(cmd)) { - //savePlots(); - } else if (CHOOSE_LOG_FILE.equals(cmd)) { - //chooseLogFile(); - } else if (LOG_TO_TERMINAL.equals(cmd)) { - //logToTerminal(); - } else if (SCREENSHOT.equals(cmd)) { - //chooseScreenshot(); - } else if (EXIT.equals(cmd)) { - //exit(); - } else if (SAVE_LOG_TABLE.equals(cmd)) { - //saveLogTableToFile(); - } else if (CLEAR_LOG_TABLE.equals(cmd)) { - //clearLogTable(); - } else if (PAUSE.equals(cmd)) { - //pauseEventProcessing(); - } else if (NEXT.equals(cmd)) { - //nextEvent(); - } else if (RESUME.equals(cmd)) { - //resumeEventProcessing(); - } else if (LOG_LEVEL_CHANGED.equals(cmd)) { - //setLogLevel(); - } else if (AIDA_AUTO_SAVE.equals(cmd)) { - //getJobSettingsPanel().chooseAidaAutoSaveFile(); - } else if (SETTINGS_SHOW.equals(cmd)) { - showConfigurationDialog(); - } else if (SETTINGS_LOAD.equals(cmd)) { - //chooseConfigurationFile(); - } else if (SETTINGS_SAVE.equals(cmd)) { - //updateLayoutConfiguration(); /* Save current GUI layout settings first, if needed. */ - //saveConfigurationFile(); - } else if (SAVE_LAYOUT.equals(cmd)) { - //setSaveLayout(); - } else if (RESTORE_DEFAULT_GUI_LAYOUT.equals(cmd)) { - //restoreDefaultLayout(); - } else if (VALIDATE_DATA_FILE.equals(cmd)) { - //if (fileValidationThread == null) { - // new FileValidationThread().start(); - //} - } else if (RESET_PLOTS.equals(cmd)) { - //resetAidaTree(); - } else if (SETTINGS_LOAD_DEFAULT.equals(cmd)) { - loadDefaultSettings(); - DialogUtil.showInfoDialog(frame, - "Default Configuration Loaded", - "The default configuration was loaded from resource " + '\n' + DEFAULT_CONFIGURATION); - } else if (OPEN_FILE.equals(cmd)) { - openFile(); - } - } + /** * Disconnect from the current ET session with a particular status. @@ -361,9 +230,6 @@ // Cleanup the ET connection. cleanupEtConnection(); - // Update state of GUI to disconnected. - //setDisconnectedGuiState(); - // Change application state to disconnected. connectionModel.setConnectionStatus(ConnectionStatus.DISCONNECTED); @@ -374,13 +240,13 @@ * Cleanup the ET connection. */ void cleanupEtConnection() { - if (sessionState.connection != null) { - if (sessionState.connection.getEtSystem().alive()) { - //logger.fine("cleaning up ET connection"); - sessionState.connection.cleanup(); - //logger.fine("done cleaning up tET connection"); + if (sessionState != null) { + if (sessionState.connection != null) { + if (sessionState.connection.getEtSystem().alive()) { + sessionState.connection.cleanup(); + } + sessionState.connection = null; } - sessionState.connection = null; } } @@ -426,6 +292,63 @@ } /** + * Start a new monitoring session. This method is executed in a separate thread from the EDT + * within {@link #actionPerformed(ActionEvent)} so GUI updates are not blocked while the session + * is being setup. + */ + void startSession() { + + //logger.fine("Starting a new monitoring session."); + + // Show a modal window that will block the GUI until connected or an error occurs. + //JDialog dialog = DialogUtil.showStatusDialog(this, "Info", "Starting new session ..."); + + try { + + // Reset the plot panel and global AIDA state. + resetPlots(); + + // The system status registry is cleared here before any event processors + // which might create a SystemStatus are added to the event processing chain + // e.g. an LCSim Driver, etc. + SystemStatusRegistry.getSystemStatusRegistery().clear(); + + // Setup event processing. + sessionState = new SessionState(); + List<CompositeRecordProcessor> processors = new ArrayList<CompositeRecordProcessor>(); + processors.add(frame.runPanel.new RunPanelUpdater()); + processing = new EventProcessing(this, processors); + processing.setup(configurationModel); + + // Setup the system status monitor table. + setupSystemStatusMonitor(); + + // Connect to the ET system. + connect(); + + // Start event processing. + processing.start(); + + //logger.info("successfully started the monitoring session"); + + } catch (Exception e) { + + //logger.severe("error occurred while setting up the session"); + + // Log the error that occurred. + errorHandler.setError(e).log().printStackTrace(); + + // Disconnect from the session. + // FIXME: This should never be needed as connected should only be set at end w/o errors. + disconnect(); + + } finally { + // Close modal window. + //dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING)); + } + } + + /** * Stop the session by killing the event processing thread, ending the job, and disconnecting * from the ET system. */ @@ -438,11 +361,8 @@ //logger.log(Level.FINER, "stopping the session"); // Kill the watchdog thread which looks for disconnects, if it is active. - //killSessionWatchdogThread(); - - // Automatically write AIDA file from job settings. - //saveAidaFile(); - + processing.killWatchdogThread(); + // Disconnect from ET system, if using the ET server, and set the proper disconnected // GUI state. disconnect(); @@ -457,79 +377,14 @@ // Close modal message window. //dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING)); } - } - - void loadDefaultSettings() { - configuration = new Configuration(DEFAULT_CONFIGURATION); - configurationModel.setConfiguration(configuration); - } - - void showConfigurationDialog() { - frame.settingsDialog.setVisible(true); - } - - /** - * This is a simple file filter that will accept files with ".evio" anywhere in their name. - */ - static class EvioFileFilter extends FileFilter { - - public EvioFileFilter() { - } - - @Override - public boolean accept(File pathname) { - if (pathname.getName().contains(".evio") || pathname.isDirectory()) { - return true; - } else { - return false; - } - } - - @Override - public String getDescription() { - return "EVIO files"; - } - } - - /** - * Open a file data source using a <code>JFileChooser</code>. - */ - static FileFilter lcioFilter = new FileNameExtensionFilter("LCIO files", "slcio"); - static EvioFileFilter evioFilter = new EvioFileFilter(); - void openFile() { - JFileChooser fc = new JFileChooser(System.getProperty("user.dir")); - fc.setAcceptAllFileFilterUsed(false); - fc.addChoosableFileFilter(lcioFilter); - fc.addChoosableFileFilter(evioFilter); - fc.setDialogTitle("Select Data File"); - int r = fc.showDialog(frame, "Select ..."); - if (r == JFileChooser.APPROVE_OPTION) { - - // Set data source path. - final String filePath = fc.getSelectedFile().getPath(); - configurationModel.setDataSourcePath(filePath); - - // Set data source type. - FileFilter filter = fc.getFileFilter(); - if (filter == lcioFilter) { - configurationModel.setDataSourceType(DataSourceType.LCIO_FILE); - } else if (filter == evioFilter) { - configurationModel.setDataSourceType(DataSourceType.EVIO_FILE); - } - } - } - - void saveSettings() { - JFileChooser fc = new JFileChooser(); - fc.setDialogTitle("Save Configuration"); - fc.setCurrentDirectory(new File(".")); - int r = fc.showSaveDialog(frame); - if (r == JFileChooser.APPROVE_OPTION) { - File f = fc.getSelectedFile(); - //log(Level.CONFIG, "Saving configuration to file <" + f.getPath() + ">"); - configuration.writeToFile(f); - } - } - - -} + } + + /** + * Exit from the application. + */ + void exit() { + cleanupEtConnection(); + frame.setVisible(false); + System.exit(0); + } +} Added: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplicationActionListener.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplicationActionListener.java (added) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplicationActionListener.java Wed Mar 4 15:42:55 2015 @@ -0,0 +1,218 @@ +/** + * + */ +package org.hps.monitoring.application; + +import static org.hps.monitoring.application.Commands.CHOOSE_LOG_FILE; +import static org.hps.monitoring.application.Commands.CLEAR_LOG_TABLE; +import static org.hps.monitoring.application.Commands.CONNECT; +import static org.hps.monitoring.application.Commands.DISCONNECT; +import static org.hps.monitoring.application.Commands.EXIT; +import static org.hps.monitoring.application.Commands.LOG_LEVEL_CHANGED; +import static org.hps.monitoring.application.Commands.LOG_TO_TERMINAL; +import static org.hps.monitoring.application.Commands.NEXT; +import static org.hps.monitoring.application.Commands.OPEN_FILE; +import static org.hps.monitoring.application.Commands.PAUSE; +import static org.hps.monitoring.application.Commands.PLOTS_CLEAR; +import static org.hps.monitoring.application.Commands.PLOTS_SAVE; +import static org.hps.monitoring.application.Commands.RESUME; +import static org.hps.monitoring.application.Commands.SAVE_LOG_TABLE; +import static org.hps.monitoring.application.Commands.SCREENSHOT; +import static org.hps.monitoring.application.Commands.SETTINGS_LOAD; +import static org.hps.monitoring.application.Commands.SETTINGS_LOAD_DEFAULT; +import static org.hps.monitoring.application.Commands.SETTINGS_SAVE; +import static org.hps.monitoring.application.Commands.SETTINGS_SHOW; +import static org.hps.monitoring.application.Commands.VALIDATE_DATA_FILE; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.IOException; + +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; + +import org.hps.monitoring.application.model.Configuration; +import org.hps.monitoring.application.util.DialogUtil; +import org.hps.monitoring.application.util.EvioFileFilter; +import org.hps.record.enums.DataSourceType; +import org.lcsim.util.aida.AIDA; + +/** + * @author Jeremy McCormick <[log in to unmask]> + */ +public class MonitoringApplicationActionListener implements ActionListener { + + MonitoringApplication application; + + MonitoringApplicationActionListener(MonitoringApplication application) { + this.application = application; + } + + /** + * The action handler method for the application. + * @param e The event to handle. + */ + public void actionPerformed(ActionEvent e) { + + String cmd = e.getActionCommand(); + if (CONNECT.equals(cmd)) { + // Run the start session method on a separate thread. + new Thread() { + public void run() { + application.startSession(); + } + }.start(); + } else if (DISCONNECT.equals(cmd)) { + // Run the stop session method on a separate thread. + new Thread() { + public void run() { + application.stopSession(); + } + }.start(); + } else if (PLOTS_SAVE.equals(cmd)) { + savePlots(); + } else if (CHOOSE_LOG_FILE.equals(cmd)) { + //chooseLogFile(); + } else if (LOG_TO_TERMINAL.equals(cmd)) { + //logToTerminal(); + } else if (SCREENSHOT.equals(cmd)) { + //chooseScreenshot(); + } else if (EXIT.equals(cmd)) { + application.exit(); + } else if (SAVE_LOG_TABLE.equals(cmd)) { + //saveLogTableToFile(); + } else if (CLEAR_LOG_TABLE.equals(cmd)) { + //clearLogTable(); + } else if (PAUSE.equals(cmd)) { + application.processing.pause(); + } else if (NEXT.equals(cmd)) { + application.processing.next(); + } else if (RESUME.equals(cmd)) { + application.processing.resume(); + } else if (LOG_LEVEL_CHANGED.equals(cmd)) { + //setLogLevel(); + } else if (SETTINGS_SHOW.equals(cmd)) { + showSettingsDialog(); + } else if (SETTINGS_LOAD.equals(cmd)) { + loadSettings(); + } else if (SETTINGS_SAVE.equals(cmd)) { + saveSettings(); + } else if (VALIDATE_DATA_FILE.equals(cmd)) { + //if (fileValidationThread == null) { + // new FileValidationThread().start(); + //} + } else if (PLOTS_CLEAR.equals(cmd)) { + clearPlots(); + } else if (SETTINGS_LOAD_DEFAULT.equals(cmd)) { + loadDefaultSettings(); + } else if (OPEN_FILE.equals(cmd)) { + openFile(); + } + } + + /** + * + */ + void savePlots() { + JFileChooser fc = new JFileChooser(); + int r = fc.showSaveDialog(application.frame); + if (r == JFileChooser.APPROVE_OPTION) { + File fileName = fc.getSelectedFile(); + try { + AIDA.defaultInstance().saveAs(fileName); + DialogUtil.showInfoDialog(application.frame, + "Plots Saved", + "Plots were successfully saved to AIDA file."); + } catch (IOException e) { + application.errorHandler.setError(e).setMessage("Error Saving Plots").printStackTrace().log().showErrorDialog(); + } + } + } + + /** + * + */ + void clearPlots() { + int confirmation = DialogUtil.showConfirmationDialog(application.frame, + "Are you sure you want to clear the plots", "Clear Plots Confirmation"); + if (confirmation == JOptionPane.YES_OPTION) { + AIDA.defaultInstance().clearAll(); + DialogUtil.showInfoDialog(application.frame, + "Plots Clear", + "The AIDA plots were cleared."); + } + } + + void loadDefaultSettings() { + application.configuration = new Configuration(MonitoringApplication.DEFAULT_CONFIGURATION); + application.configurationModel.setConfiguration(application.configuration); + DialogUtil.showInfoDialog(application.frame, + "Default Configuration Loaded", + "The default configuration was loaded."); + } + + void showSettingsDialog() { + application.frame.settingsDialog.setVisible(true); + } + + /** + * Open a file data source using a <code>JFileChooser</code>. + */ + static FileFilter lcioFilter = new FileNameExtensionFilter("LCIO files", "slcio"); + static EvioFileFilter evioFilter = new EvioFileFilter(); + void openFile() { + JFileChooser fc = new JFileChooser(System.getProperty("user.dir")); + fc.setAcceptAllFileFilterUsed(false); + fc.addChoosableFileFilter(lcioFilter); + fc.addChoosableFileFilter(evioFilter); + fc.setDialogTitle("Select Data File"); + int r = fc.showDialog(application.frame, "Select ..."); + if (r == JFileChooser.APPROVE_OPTION) { + + // Set data source path. + final String filePath = fc.getSelectedFile().getPath(); + application.configurationModel.setDataSourcePath(filePath); + + // Set data source type. + FileFilter filter = fc.getFileFilter(); + if (filter == lcioFilter) { + application.configurationModel.setDataSourceType(DataSourceType.LCIO_FILE); + } else if (filter == evioFilter) { + application.configurationModel.setDataSourceType(DataSourceType.EVIO_FILE); + } + } + } + + void saveSettings() { + JFileChooser fc = new JFileChooser(); + fc.setDialogTitle("Save Configuration"); + fc.setCurrentDirectory(new File(".")); + int r = fc.showSaveDialog(application.frame); + if (r == JFileChooser.APPROVE_OPTION) { + File f = fc.getSelectedFile(); + application.configuration.writeToFile(f); + DialogUtil.showInfoDialog(application.frame, + "Settings Saved", + "Settings were saved successfully."); + } + } + + void loadSettings() { + JFileChooser fc = new JFileChooser(); + fc.setDialogTitle("Load Settings"); + fc.setCurrentDirectory(new File(".")); + int r = fc.showDialog(application.frame, "Load ..."); + if (r == JFileChooser.APPROVE_OPTION) { + File f = fc.getSelectedFile(); + application.configuration = new Configuration(f); + application.loadConfiguration(application.configuration); + DialogUtil.showInfoDialog(application.frame, + "Settings Loaded", + "Settings were loaded successfully."); + } + } + +} Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java Wed Mar 4 15:42:55 2015 @@ -5,7 +5,6 @@ import java.awt.FlowLayout; import java.awt.GraphicsConfiguration; import java.awt.Rectangle; -import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JComboBox; @@ -19,9 +18,6 @@ import javax.swing.SwingConstants; import org.hps.monitoring.application.DataSourceComboBox.DataSourceItem; -import org.hps.monitoring.application.model.ConfigurationModel; -import org.hps.monitoring.application.model.ConnectionStatusModel; -import org.hps.monitoring.application.model.RunModel; /** * @@ -51,10 +47,7 @@ * @param listener */ public MonitoringApplicationFrame( - ConfigurationModel configurationModel, - RunModel runModel, - ConnectionStatusModel connectionModel, - ActionListener listener) { + MonitoringApplication application) { // Create the content panel. JPanel contentPanel = new JPanel(); @@ -70,7 +63,7 @@ contentPanel.add(topPanel); // Create the connection status panel. - JPanel connectionPanel = new ConnectionStatusPanel(connectionModel); + JPanel connectionPanel = new ConnectionStatusPanel(application.connectionModel); topPanel.add(connectionPanel); // Add vertical separator. @@ -79,7 +72,7 @@ topPanel.add(sep); // Create the buttons panel. - buttonsPanel = new EventButtonsPanel(connectionModel, listener); + buttonsPanel = new EventButtonsPanel(application.connectionModel, application.actionListener); topPanel.add(buttonsPanel); // Add vertical separator. @@ -88,7 +81,7 @@ topPanel.add(sep); // Add the data source combo box. - JComboBox<DataSourceItem> dataSourceComboBox = new DataSourceComboBox(listener); + JComboBox<DataSourceItem> dataSourceComboBox = new DataSourceComboBox(application.connectionModel, application.actionListener); topPanel.add(dataSourceComboBox); // Create the bottom panel. @@ -103,7 +96,7 @@ setProportionalSize(leftPanel, LEFT_PANEL_WIDTH, FULL_SIZE); // Create the run dashboard. - runPanel = new RunPanel(runModel); + runPanel = new RunPanel(application.runModel); // Create the tabbed pane for content in bottom of left panel such as log table and system monitor. JTabbedPane tableTabbedPane = new JTabbedPane(); @@ -129,6 +122,7 @@ // Create the plot panel. plotPanel = new PlotPanel(); + plotPanel.setVisible(true); // DEBUG setProportionalSize(plotPanel, RIGHT_PANEL_WIDTH, PLOT_PANEL_HEIGHT); // Create the right panel vertical split pane for displaying plots and their information and statistics. @@ -142,7 +136,7 @@ bottomPanel.add(mainSplitPane, BorderLayout.CENTER); // Create the menu bar. - setJMenuBar(new MenuBar(listener)); + setJMenuBar(new MenuBar(application.actionListener)); // Setup the frame now that all components have been added. pack(); @@ -150,7 +144,7 @@ setVisible(true); // Setup the settings dialog box. - settingsDialog = new SettingsDialog(configurationModel, listener); + settingsDialog = new SettingsDialog(application.configurationModel, application.actionListener); } /** Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/PlotPanel.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/PlotPanel.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/PlotPanel.java Wed Mar 4 15:42:55 2015 @@ -1,4 +1,6 @@ package org.hps.monitoring.application; + +import java.awt.BorderLayout; import javax.swing.JPanel; import javax.swing.JTabbedPane; @@ -8,10 +10,14 @@ * @author Jeremy McCormick <[log in to unmask]> */ public class PlotPanel extends JPanel { + private JTabbedPane plotPane; public PlotPanel() { + setLayout(new BorderLayout()); plotPane = new JTabbedPane(); + plotPane.setPreferredSize(getPreferredSize()); + add(plotPane, BorderLayout.CENTER); } JTabbedPane getPlotPane() { Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/RunPanel.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/RunPanel.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/RunPanel.java Wed Mar 4 15:42:55 2015 @@ -101,7 +101,7 @@ this.runModel = runModel; } - class RunModelUpdater extends CompositeRecordProcessor { + class RunPanelUpdater extends CompositeRecordProcessor { Timer timer; @@ -117,7 +117,7 @@ class RunTimerTask extends TimerTask { public void run() { - + double tickLengthSeconds = (System.currentTimeMillis() - lastTickMillis) / (double)millis; int elapsedTime = (int) ((System.currentTimeMillis() - jobStartMillis) / (double)millis); double megaBytesReceived = bytesReceived / 1000000; @@ -163,7 +163,8 @@ } @Override - public void process(CompositeRecord event) { + public void process(CompositeRecord event) { + // FIXME: CompositeRecord number is always -1 here. if (event.getEvioEvent() != null) { EvioEvent evioEvent = event.getEvioEvent(); bytesReceived += evioEvent.getTotalBytes(); @@ -259,6 +260,7 @@ */ @Override public void propertyChange(PropertyChangeEvent evt) { + //System.out.println("RunPanel.propertyChange - " + evt.getPropertyName()); Object value = evt.getNewValue(); if (RUN_NUMBER_PROPERTY.equals(evt.getPropertyName())) { runNumberField.setValue((Integer) value); Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/SettingsPanel.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/SettingsPanel.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/SettingsPanel.java Wed Mar 4 15:42:55 2015 @@ -24,8 +24,6 @@ ConnectionSettingsPanel connectionPanel; DataSourcePanel dataSourcePanel; static final String OKAY_COMMAND = "settingsOkay"; - - //JButton defaultsButton; JDialog parent; @@ -89,14 +87,5 @@ if (e.getActionCommand().equals(OKAY_COMMAND)) { parent.setVisible(false); } - } - - /** - * This method is used to register a listener so that the Monitoring Application can reset to - * the default configuration when the "Defaults" button is pushed from the settings panel. - * @param listener - */ - //void addActionListener(ActionListener listener) { - // defaultsButton.addActionListener(listener); - //} + } } Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/AbstractModel.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/AbstractModel.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/AbstractModel.java Wed Mar 4 15:42:55 2015 @@ -18,14 +18,9 @@ public abstract class AbstractModel { protected PropertyChangeSupport propertyChangeSupport; - protected boolean listenersEnabled = true; public AbstractModel() { propertyChangeSupport = new PropertyChangeSupport(this); - } - - public void setListenersEnabled(boolean listenersEnabled) { - this.listenersEnabled = listenersEnabled; } public void addPropertyChangeListener(PropertyChangeListener listener) { @@ -37,29 +32,17 @@ } protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { - System.out.println("AbstractModel.firePropertyChange"); - System.out.println(" propName: " + propertyName); - System.out.println(" oldValue: " + oldValue); - System.out.println(" newValue: " + newValue); - if (listenersEnabled) { - propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue); - } + propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue); } protected void firePropertyChange(PropertyChangeEvent evt) { - if (listenersEnabled) { - propertyChangeSupport.firePropertyChange(evt); - } + propertyChangeSupport.firePropertyChange(evt); } abstract public String[] getPropertyNames(); public void fireModelChanged() { - //System.out.println("AbstractModel.fireModelChanged"); - if (!listenersEnabled) - return; propertyLoop: for (String property : getPropertyNames()) { - //System.out.println(" prop = " + property); Method getMethod = null; for (Method method : getClass().getMethods()) { if (method.getName().equals("get" + property)) { @@ -77,7 +60,6 @@ throw new RuntimeException("Property " + property + " is missing a get method.", e); } catch (InvocationTargetException e) { // Is the cause of the problem an illegal argument to the method? - //System.out.println("cause: " + e.getCause().getMessage()); if (e.getCause() instanceof IllegalArgumentException) { // For this error, assume that the key itself is missing from the configuration which is a warning. System.err.println("The key " + property + " is not set in the configuration."); @@ -96,7 +78,6 @@ } catch (IllegalAccessException | IllegalArgumentException e) { throw new RuntimeException(e); } - System.out.println(); } } Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java Wed Mar 4 15:42:55 2015 @@ -17,8 +17,6 @@ Configuration configuration; // Job setting properties. - 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"; @@ -52,9 +50,9 @@ public static final String WAIT_MODE_PROPERTY = "WaitMode"; public static final String WAIT_TIME_PROPERTY = "WaitTime"; public static final String PRESCALE_PROPERTY = "Prescale"; - + static final String[] CONFIG_PROPERTIES = AbstractModel.getPropertyNames(ConfigurationModel.class); - + public ConfigurationModel() { this.configuration = new Configuration(); } @@ -79,10 +77,8 @@ public void setLogLevel(Level level) { Level oldValue = getLogLevel(); - if (!oldValue.equals(level)) { - configuration.set(LOG_LEVEL_PROPERTY, level.getName()); - firePropertyChange(LOG_LEVEL_PROPERTY, oldValue, getLogLevel()); - } + configuration.set(LOG_LEVEL_PROPERTY, level.getName()); + firePropertyChange(LOG_LEVEL_PROPERTY, oldValue, getLogLevel()); } public SteeringType getSteeringType() { @@ -91,10 +87,8 @@ public void setSteeringType(SteeringType steeringType) { SteeringType oldValue = getSteeringType(); - if (!steeringType.equals(oldValue)) { - configuration.set(STEERING_TYPE_PROPERTY, steeringType.name()); - firePropertyChange(STEERING_TYPE_PROPERTY, oldValue, getSteeringType()); - } + configuration.set(STEERING_TYPE_PROPERTY, steeringType.name()); + firePropertyChange(STEERING_TYPE_PROPERTY, oldValue, getSteeringType()); } public File getSteeringFile() { @@ -107,10 +101,8 @@ public void setSteeringFile(String steeringFile) { File oldValue = getSteeringFile(); - if (!steeringFile.equals(oldValue)) { - configuration.set(STEERING_FILE_PROPERTY, steeringFile); - firePropertyChange(STEERING_FILE_PROPERTY, oldValue, getSteeringFile().getPath()); - } + configuration.set(STEERING_FILE_PROPERTY, steeringFile); + firePropertyChange(STEERING_FILE_PROPERTY, oldValue, getSteeringFile().getPath()); } public String getSteeringResource() { @@ -119,10 +111,8 @@ public void setSteeringResource(String steeringResource) { String oldValue = getSteeringResource(); - if (!steeringResource.equals(oldValue)) { - configuration.set(STEERING_RESOURCE_PROPERTY, steeringResource); - firePropertyChange(STEERING_RESOURCE_PROPERTY, oldValue, steeringResource); - } + configuration.set(STEERING_RESOURCE_PROPERTY, steeringResource); + firePropertyChange(STEERING_RESOURCE_PROPERTY, oldValue, steeringResource); } public String getDetectorName() { @@ -131,27 +121,22 @@ public void setDetectorName(String detectorName) { String oldValue = getDetectorName(); - if (!detectorName.equals(oldValue)) { - configuration.set(DETECTOR_NAME_PROPERTY, detectorName); - firePropertyChange(DETECTOR_NAME_PROPERTY, oldValue, getDetectorName()); - } - } - + configuration.set(DETECTOR_NAME_PROPERTY, detectorName); + firePropertyChange(DETECTOR_NAME_PROPERTY, oldValue, getDetectorName()); + } + public String getDetectorAlias() { return configuration.get(DETECTOR_ALIAS_PROPERTY); } - + public void setDetectorAlias(String detectorAlias) { String oldValue = null; if (hasPropertyKey(DETECTOR_ALIAS_PROPERTY)) { oldValue = getDetectorAlias(); } - if (!detectorAlias.equals(oldValue)) { - configuration.set(DETECTOR_ALIAS_PROPERTY, detectorAlias); - firePropertyChange(DETECTOR_ALIAS_PROPERTY, oldValue, getDetectorAlias()); - } - } - + configuration.set(DETECTOR_ALIAS_PROPERTY, detectorAlias); + firePropertyChange(DETECTOR_ALIAS_PROPERTY, oldValue, getDetectorAlias()); + } public String getEventBuilderClassName() { return configuration.get(EVENT_BUILDER_PROPERTY); @@ -159,10 +144,8 @@ public void setEventBuilderClassName(String eventBuilderClassName) { String oldValue = getEventBuilderClassName(); - if (!eventBuilderClassName.equals(oldValue)) { - configuration.set(EVENT_BUILDER_PROPERTY, eventBuilderClassName); - firePropertyChange(EVENT_BUILDER_PROPERTY, oldValue, getEventBuilderClassName()); - } + configuration.set(EVENT_BUILDER_PROPERTY, eventBuilderClassName); + firePropertyChange(EVENT_BUILDER_PROPERTY, oldValue, getEventBuilderClassName()); } public Boolean getLogToFile() { @@ -171,10 +154,8 @@ public void setLogToFile(Boolean logToFile) { Boolean oldValue = getLogToFile(); - if (!oldValue.equals(logToFile)) { - configuration.set(LOG_TO_FILE_PROPERTY, logToFile); - firePropertyChange(LOG_TO_FILE_PROPERTY, oldValue, getLogToFile()); - } + configuration.set(LOG_TO_FILE_PROPERTY, logToFile); + firePropertyChange(LOG_TO_FILE_PROPERTY, oldValue, getLogToFile()); } public String getLogFileName() { @@ -183,34 +164,8 @@ public void setLogFileName(String logFileName) { String oldValue = getLogFileName(); - if (!logFileName.equals(oldValue)) { - configuration.set(LOG_FILE_NAME_PROPERTY, logFileName); - firePropertyChange(LOG_FILE_NAME_PROPERTY, oldValue, getLogFileName()); - } - } - - public Boolean getAidaAutoSave() { - return configuration.equals(AIDA_AUTO_SAVE_PROPERTY); - } - - public void setAidaAutoSave(Boolean aidaAutoSave) { - Boolean oldValue = getAidaAutoSave(); - if (!aidaAutoSave.equals(oldValue)) { - configuration.set(AIDA_AUTO_SAVE_PROPERTY, aidaAutoSave); - firePropertyChange(AIDA_AUTO_SAVE_PROPERTY, oldValue, aidaAutoSave); - } - } - - public String getAidaFileName() { - return configuration.get(AIDA_FILE_NAME_PROPERTY); - } - - public void setAidaFileName(String aidaFileName) { - String oldValue = getAidaFileName(); - if (!aidaFileName.equals(oldValue)) { - configuration.set(AIDA_FILE_NAME_PROPERTY, aidaFileName); - firePropertyChange(AIDA_FILE_NAME_PROPERTY, oldValue, aidaFileName); - } + configuration.set(LOG_FILE_NAME_PROPERTY, logFileName); + firePropertyChange(LOG_FILE_NAME_PROPERTY, oldValue, getLogFileName()); } public Boolean getDisconnectOnError() { @@ -219,10 +174,8 @@ public void setDisconnectOnError(Boolean disconnectOnError) { Boolean oldValue = getDisconnectOnError(); - if (!disconnectOnError.equals(oldValue)) { - configuration.set(DISCONNECT_ON_ERROR_PROPERTY, disconnectOnError); - firePropertyChange(DISCONNECT_ON_ERROR_PROPERTY, oldValue, getDisconnectOnError()); - } + configuration.set(DISCONNECT_ON_ERROR_PROPERTY, disconnectOnError); + firePropertyChange(DISCONNECT_ON_ERROR_PROPERTY, oldValue, getDisconnectOnError()); } public Boolean getDisconnectOnEndRun() { @@ -231,10 +184,8 @@ public void setDisconnectOnEndRun(Boolean disconnectOnEndRun) { Boolean oldValue = getDisconnectOnEndRun(); - if (!disconnectOnEndRun.equals(oldValue)) { - configuration.set(DISCONNECT_ON_END_RUN_PROPERTY, disconnectOnEndRun); - firePropertyChange(DISCONNECT_ON_END_RUN_PROPERTY, oldValue, getDisconnectOnEndRun()); - } + configuration.set(DISCONNECT_ON_END_RUN_PROPERTY, disconnectOnEndRun); + firePropertyChange(DISCONNECT_ON_END_RUN_PROPERTY, oldValue, getDisconnectOnEndRun()); } public DataSourceType getDataSourceType() { @@ -243,10 +194,8 @@ public void setDataSourceType(DataSourceType dataSourceType) { DataSourceType oldValue = getDataSourceType(); - if (!dataSourceType.equals(oldValue)) { - configuration.set(DATA_SOURCE_TYPE_PROPERTY, dataSourceType); - firePropertyChange(DATA_SOURCE_TYPE_PROPERTY, oldValue, getDataSourceType()); - } + configuration.set(DATA_SOURCE_TYPE_PROPERTY, dataSourceType); + firePropertyChange(DATA_SOURCE_TYPE_PROPERTY, oldValue, getDataSourceType()); } public String getDataSourcePath() { @@ -255,10 +204,8 @@ public void setDataSourcePath(String dataSourcePath) { String oldValue = getDataSourcePath(); - if (!dataSourcePath.equals(oldValue)) { - configuration.set(DATA_SOURCE_PATH_PROPERTY, dataSourcePath); - firePropertyChange(DATA_SOURCE_PATH_PROPERTY, oldValue, getDataSourcePath()); - } + configuration.set(DATA_SOURCE_PATH_PROPERTY, dataSourcePath); + firePropertyChange(DATA_SOURCE_PATH_PROPERTY, oldValue, getDataSourcePath()); } public ProcessingStage getProcessingStage() { @@ -269,10 +216,8 @@ public void setProcessingStage(ProcessingStage processingStage) { ProcessingStage oldValue = getProcessingStage(); - if (!processingStage.equals(oldValue)) { - configuration.set(PROCESSING_STAGE_PROPERTY, processingStage); - firePropertyChange(PROCESSING_STAGE_PROPERTY, oldValue, getProcessingStage()); - } + configuration.set(PROCESSING_STAGE_PROPERTY, processingStage); + firePropertyChange(PROCESSING_STAGE_PROPERTY, oldValue, getProcessingStage()); } public String getEtName() { @@ -281,10 +226,8 @@ public void setEtName(String etName) { String oldValue = getEtName(); - if (!etName.equals(oldValue)) { - configuration.set(ET_NAME_PROPERTY, etName); - firePropertyChange(ET_NAME_PROPERTY, oldValue, getEtName()); - } + configuration.set(ET_NAME_PROPERTY, etName); + firePropertyChange(ET_NAME_PROPERTY, oldValue, getEtName()); } public String getHost() { @@ -293,10 +236,8 @@ public void setHost(String host) { String oldValue = getHost(); - if (!host.equals(oldValue)) { - configuration.set(HOST_PROPERTY, host); - firePropertyChange(HOST_PROPERTY, oldValue, getHost()); - } + configuration.set(HOST_PROPERTY, host); + firePropertyChange(HOST_PROPERTY, oldValue, getHost()); } public Integer getPort() { @@ -305,10 +246,8 @@ public void setPort(Integer port) { Integer oldValue = getPort(); - if (!port.equals(oldValue)) { - configuration.set(PORT_PROPERTY, port); - firePropertyChange(PORT_PROPERTY, oldValue, getPort()); - } + configuration.set(PORT_PROPERTY, port); + firePropertyChange(PORT_PROPERTY, oldValue, getPort()); } public Boolean getBlocking() { @@ -317,10 +256,8 @@ public void setBlocking(Boolean blocking) { Boolean oldValue = getBlocking(); - if (!blocking.equals(oldValue)) { - configuration.set(BLOCKING_PROPERTY, blocking); - firePropertyChange(BLOCKING_PROPERTY, oldValue, getBlocking()); - } + configuration.set(BLOCKING_PROPERTY, blocking); + firePropertyChange(BLOCKING_PROPERTY, oldValue, getBlocking()); } public Boolean getVerbose() { @@ -329,10 +266,8 @@ public void setVerbose(Boolean verbose) { Boolean oldValue = getVerbose(); - if (!verbose.equals(oldValue)) { - configuration.set(VERBOSE_PROPERTY, verbose); - firePropertyChange(VERBOSE_PROPERTY, oldValue, getVerbose()); - } + configuration.set(VERBOSE_PROPERTY, verbose); + firePropertyChange(VERBOSE_PROPERTY, oldValue, getVerbose()); } public String getStationName() { @@ -341,10 +276,8 @@ public void setStationName(String stationName) { String oldValue = getStationName(); - if (!stationName.equals(oldValue)) { - configuration.set(STATION_NAME_PROPERTY, stationName); - firePropertyChange(STATION_NAME_PROPERTY, oldValue, getStationName()); - } + configuration.set(STATION_NAME_PROPERTY, stationName); + firePropertyChange(STATION_NAME_PROPERTY, oldValue, getStationName()); } public Integer getChunkSize() { @@ -353,10 +286,8 @@ public void setChunkSize(Integer chunkSize) { Integer oldValue = getChunkSize(); - if (!chunkSize.equals(oldValue)) { - configuration.set(CHUNK_SIZE_PROPERTY, chunkSize); - firePropertyChange(CHUNK_SIZE_PROPERTY, oldValue, getChunkSize()); - } + configuration.set(CHUNK_SIZE_PROPERTY, chunkSize); + firePropertyChange(CHUNK_SIZE_PROPERTY, oldValue, getChunkSize()); } public Integer getQueueSize() { @@ -365,10 +296,8 @@ public void setQueueSize(Integer queueSize) { Integer oldValue = getQueueSize(); - if (!queueSize.equals(oldValue)) { - configuration.set(QUEUE_SIZE_PROPERTY, queueSize); - firePropertyChange(QUEUE_SIZE_PROPERTY, oldValue, getQueueSize()); - } + configuration.set(QUEUE_SIZE_PROPERTY, queueSize); + firePropertyChange(QUEUE_SIZE_PROPERTY, oldValue, getQueueSize()); } public Integer getStationPosition() { @@ -377,10 +306,8 @@ public void setStationPosition(Integer stationPosition) { Integer oldValue = getStationPosition(); - if (!stationPosition.equals(oldValue)) { - configuration.set(STATION_POSITION_PROPERTY, stationPosition); - firePropertyChange(STATION_POSITION_PROPERTY, oldValue, getStationPosition()); - } + configuration.set(STATION_POSITION_PROPERTY, stationPosition); + firePropertyChange(STATION_POSITION_PROPERTY, oldValue, getStationPosition()); } public Mode getWaitMode() { @@ -389,10 +316,8 @@ public void setWaitMode(Mode waitMode) { Mode oldValue = getWaitMode(); - if (!waitMode.equals(oldValue)) { - configuration.set(WAIT_MODE_PROPERTY, waitMode.name()); - firePropertyChange(WAIT_MODE_PROPERTY, oldValue, getWaitMode()); - } + configuration.set(WAIT_MODE_PROPERTY, waitMode.name()); + firePropertyChange(WAIT_MODE_PROPERTY, oldValue, getWaitMode()); } public Integer getWaitTime() { @@ -401,10 +326,8 @@ public void setWaitTime(Integer waitTime) { Integer oldValue = getWaitTime(); - if (!waitTime.equals(oldValue)) { - configuration.set(WAIT_TIME_PROPERTY, waitTime); - firePropertyChange(WAIT_TIME_PROPERTY, oldValue, getWaitTime()); - } + configuration.set(WAIT_TIME_PROPERTY, waitTime); + firePropertyChange(WAIT_TIME_PROPERTY, oldValue, getWaitTime()); } public Integer getPrescale() { @@ -413,50 +336,42 @@ public void setPrescale(Integer prescale) { Integer oldValue = getPrescale(); - if (!prescale.equals(oldValue)) { - configuration.set(PRESCALE_PROPERTY, prescale); - firePropertyChange(PRESCALE_PROPERTY, oldValue, getPrescale()); - } - } - + configuration.set(PRESCALE_PROPERTY, prescale); + firePropertyChange(PRESCALE_PROPERTY, oldValue, getPrescale()); + } + public void setUserRunNumber(Integer userRunNumber) { Integer oldValue = null; if (hasPropertyKey(USER_RUN_NUMBER_PROPERTY)) { oldValue = getUserRunNumber(); } - if (!userRunNumber.equals(oldValue)) { - configuration.set(USER_RUN_NUMBER_PROPERTY, userRunNumber); - firePropertyChange(USER_RUN_NUMBER_PROPERTY, oldValue, getUserRunNumber()); - } - } - + configuration.set(USER_RUN_NUMBER_PROPERTY, userRunNumber); + firePropertyChange(USER_RUN_NUMBER_PROPERTY, oldValue, getUserRunNumber()); + } + public Integer getUserRunNumber() { return configuration.getInteger(USER_RUN_NUMBER_PROPERTY); } - + public void setFreezeConditions(Boolean freezeConditions) { Boolean oldValue = null; if (hasPropertyKey(FREEZE_CONDITIONS_PROPERTY)) { oldValue = getFreezeConditions(); } - if (!freezeConditions.equals(oldValue)) { - configuration.set(FREEZE_CONDITIONS_PROPERTY, freezeConditions); - firePropertyChange(FREEZE_CONDITIONS_PROPERTY, oldValue, freezeConditions); - } - } - + configuration.set(FREEZE_CONDITIONS_PROPERTY, freezeConditions); + firePropertyChange(FREEZE_CONDITIONS_PROPERTY, oldValue, freezeConditions); + } + public Boolean getFreezeConditions() { return configuration.getBoolean(FREEZE_CONDITIONS_PROPERTY); } - + public void setMaxEvents(Long maxEvents) { Long oldValue = getMaxEvents(); - if (!maxEvents.equals(oldValue)) { - configuration.set(MAX_EVENTS_PROPERTY, maxEvents); - firePropertyChange(MAX_EVENTS_PROPERTY, oldValue, getMaxEvents()); - } - } - + configuration.set(MAX_EVENTS_PROPERTY, maxEvents); + firePropertyChange(MAX_EVENTS_PROPERTY, oldValue, getMaxEvents()); + } + public Long getMaxEvents() { return configuration.getLong(MAX_EVENTS_PROPERTY); } @@ -470,18 +385,17 @@ } } } - + public boolean hasPropertyKey(String key) { return configuration.hasKey(key); } - + public boolean hasValidProperty(String key) { return configuration.hasKey(key) && configuration.get(key) != null; } - + @Override public String[] getPropertyNames() { return CONFIG_PROPERTIES; } } - Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/ConnectionStatusModel.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/ConnectionStatusModel.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/model/ConnectionStatusModel.java Wed Mar 4 15:42:55 2015 @@ -1,16 +1,21 @@ package org.hps.monitoring.application.model; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import org.hps.monitoring.application.ConnectionStatus; /** + * This model updates listeners when the connection status changes from disconnected + * to connected or vice versa. It will also notify when the event processing is + * paused. * * @author Jeremy McCormick <[log in to unmask]> - * */ public class ConnectionStatusModel extends AbstractModel { public static final String CONNECTION_STATUS_PROPERTY = "ConnectionStatus"; - public static final String PAUSED_PROPERTY = "ConnectionStatus"; + public static final String PAUSED_PROPERTY = "Paused"; static final String[] propertyNames = new String[] { CONNECTION_STATUS_PROPERTY, @@ -29,10 +34,10 @@ } public void setConnectionStatus(ConnectionStatus connectionStatus) { - if (connectionStatus != this.connectionStatus) { - ConnectionStatus oldValue = connectionStatus; - this.connectionStatus = connectionStatus; - firePropertyChange(CONNECTION_STATUS_PROPERTY, oldValue, this.connectionStatus); + ConnectionStatus oldValue = connectionStatus; + this.connectionStatus = connectionStatus; + for (PropertyChangeListener listener : propertyChangeSupport.getPropertyChangeListeners()) { + listener.propertyChange(new PropertyChangeEvent(this, CONNECTION_STATUS_PROPERTY, oldValue, this.connectionStatus)); } } @@ -41,10 +46,11 @@ } public void setPaused(boolean paused) { - if (paused != this.paused) { - boolean oldValue = this.paused; - this.paused = paused; - firePropertyChange(PAUSED_PROPERTY, oldValue, paused); + System.out.println("ConnectionStatusModel.setPause - " + paused); + boolean oldValue = this.paused; + this.paused = paused; + for (PropertyChangeListener listener : propertyChangeSupport.getPropertyChangeListeners()) { + listener.propertyChange(new PropertyChangeEvent(this, PAUSED_PROPERTY, oldValue, this.paused)); } } } Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/DialogUtil.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/DialogUtil.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/DialogUtil.java Wed Mar 4 15:42:55 2015 @@ -8,8 +8,15 @@ import javax.swing.JOptionPane; import javax.swing.SwingUtilities; -public class DialogUtil { +public final class DialogUtil { + /** + * + * @param parentComponent + * @param title + * @param message + * @return + */ public static JDialog showStatusDialog(final Component parentComponent, String title, String message) { final JOptionPane optionPane = new JOptionPane(message, JOptionPane.INFORMATION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, new Object[] {}, null); final JDialog dialog = new JDialog(); @@ -32,6 +39,12 @@ return dialog; } + /** + * + * @param component + * @param error + * @param title + */ public static void showErrorDialog(final Component component, final Throwable error, final String title) { final Runnable runnable = new Runnable() { public void run() { @@ -41,6 +54,12 @@ SwingUtilities.invokeLater(runnable); } + /** + * + * @param component + * @param title + * @param message + */ public static void showInfoDialog(final Component component, final String title, final String message) { final Runnable runnable = new Runnable() { public void run() { @@ -49,4 +68,24 @@ }; SwingUtilities.invokeLater(runnable); } + + /** + * + * @param parent + * @param message + * @param title + * @return + */ + public static int showConfirmationDialog(final Component parent, String message, String title) { + Object[] options = { "Yes", "No", "Cancel" }; + int result = JOptionPane.showOptionDialog( + parent, + message, title, + JOptionPane.YES_NO_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE, + null, + options, + options[2]); + return result; + } } Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/ErrorHandler.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/ErrorHandler.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/ErrorHandler.java Wed Mar 4 15:42:55 2015 @@ -24,7 +24,7 @@ * chained, where appropriate. Some methods are not available for chaining when it doesn't make * sense. </p> */ -public class ErrorHandler { +public final class ErrorHandler { Logger logger; Component component; Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/EtSystemUtil.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/EtSystemUtil.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/EtSystemUtil.java Wed Mar 4 15:42:55 2015 @@ -3,7 +3,7 @@ import org.hps.monitoring.application.model.ConfigurationModel; import org.hps.record.et.EtConnection; -public class EtSystemUtil { +public final class EtSystemUtil { private EtSystemUtil() { } Added: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/EvioFileFilter.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/EvioFileFilter.java (added) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/EvioFileFilter.java Wed Mar 4 15:42:55 2015 @@ -0,0 +1,35 @@ +/** + * + */ +package org.hps.monitoring.application.util; + +import java.io.File; + +import javax.swing.filechooser.FileFilter; + +/** + * @author Jeremy McCormick <[log in to unmask]> + * + */ +/** + * This is a simple file filter that will accept files with ".evio" anywhere in their name. + */ +public final class EvioFileFilter extends FileFilter { + + public EvioFileFilter() { + } + + @Override + public boolean accept(File pathname) { + if (pathname.getName().contains(".evio") || pathname.isDirectory()) { + return true; + } else { + return false; + } + } + + @Override + public String getDescription() { + return "EVIO files"; + } +} Modified: java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/ResourceUtil.java ============================================================================= --- java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/ResourceUtil.java (original) +++ java/branches/monitoring-app-HPSJAVA-442/src/main/java/org/hps/monitoring/application/util/ResourceUtil.java Wed Mar 4 15:42:55 2015 @@ -22,7 +22,7 @@ * @author Jeremy McCormick <[log in to unmask]> * */ -public class ResourceUtil { +public final class ResourceUtil { private ResourceUtil() { }