hps-java/src/main/java/org/lcsim/hps/monitoring
diff -u -r1.5 -r1.6
--- ConnectionPanel.java 27 Mar 2012 03:18:21 -0000 1.5
+++ ConnectionPanel.java 27 Mar 2012 04:13:37 -0000 1.6
@@ -24,9 +24,6 @@
// TODO Add status field of (connected|disconnected|connecting|timed out)
class ConnectionPanel extends JPanel implements ActionListener {
-
- //private JPanel fieldsPanel;
- //private JPanel buttonsPanel;
private JTextField etNameField;
private JTextField hostField;
@@ -43,22 +40,15 @@
private ConnectionParameters connectionParameters;
- private boolean connectPressed = false;
+ private boolean connectRequested = false;
+ private boolean disconnectRequested = false;
ConnectionPanel() {
-
+
// Starting GUI values will be assigned from default connection parameters.
connectionParameters = new ConnectionParameters();
- setLayout(new GridBagLayout());
-
- // Panel for labels and values.
- //GridBagConstraints c = new GridBagConstraints();
- //c.gridx = 0;
- //c.gridy = 0;
- //JPanel fieldsPanel = new JPanel();
- //fieldsPanel.setLayout(new GridBagLayout());
- //add(fieldsPanel, c);
+ setLayout(new GridBagLayout());
//
// Define the fields.
@@ -260,7 +250,7 @@
setConnectionParameters(new ConnectionParameters());
}
- public ConnectionParameters getConnectionParameters() {
+ ConnectionParameters getConnectionParameters() {
connectionParameters = new ConnectionParameters();
connectionParameters.etName = etNameField.getText();
connectionParameters.host = hostField.getText();
@@ -308,9 +298,9 @@
public void actionPerformed(ActionEvent e) {
if ("connect".equals(e.getActionCommand())) {
- connect();
+ setConnectRequested();
} else if ("disconnect".equals(e.getActionCommand())) {
- disconnect();
+ setDisconnectRequested();
} else if ("saveConnection".equals(e.getActionCommand())) {
save();
} else if ("loadConnection".equals(e.getActionCommand())) {
@@ -320,24 +310,38 @@
}
}
- private void connect() {
- connectPressed = true;
- /*
- connectButton.setEnabled(false);
- disconnectButton.setEnabled(true);
- loadButton.setEnabled(false);
- resetButton.setEnabled(false);
- */
- }
-
- private void disconnect() {
- connectPressed = false;
- /*
- connectButton.setEnabled(true);
- disconnectButton.setEnabled(false);
- loadButton.setEnabled(true);
- resetButton.setEnabled(true);
- */
+ private void setConnectRequested() {
+ connectRequested = true;
+ disconnectRequested = false;
+ enableConnectionPanel(false);
+ }
+
+ private void setDisconnectRequested() {
+ disconnectRequested = true;
+ connectRequested = false;
+ }
+
+ void enableConnectionPanel(boolean e) {
+ etNameField.setEnabled(e);
+ hostField.setEnabled(e);
+ portField.setEnabled(e);
+ blockingField.setEnabled(e);
+ verboseField.setEnabled(e);
+ statNameField.setEnabled(e);
+ chunkField.setEnabled(e);
+ qSizeField.setEnabled(e);
+ positionField.setEnabled(e);
+ ppositionField.setEnabled(e);
+ waitComboBox.setEnabled(e);
+ waitTimeField.setEnabled(e);
+ }
+
+ boolean connectRequested() {
+ return this.connectRequested;
+ }
+
+ boolean disconnectRequested() {
+ return this.disconnectRequested;
}
private void save() {
@@ -361,11 +365,7 @@
private void reset() {
setConnectionParameters(new ConnectionParameters());
}
-
- public boolean connectPressed() {
- return this.connectPressed;
- }
-
+
private void writePropertiesFile(File file) {
Properties prop = new Properties();
prop.setProperty("host", hostField.getText());
hps-java/src/main/java/org/lcsim/hps/monitoring
diff -u -r1.1 -r1.2
--- MonitoringApplication.java 27 Mar 2012 03:18:21 -0000 1.1
+++ MonitoringApplication.java 27 Mar 2012 04:13:37 -0000 1.2
@@ -19,6 +19,7 @@
import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;
+//TODO Add connection status field = disconnected | connected | connecting
public class MonitoringApplication extends JPanel implements ActionListener {
private JTabbedPane tabs;
@@ -29,6 +30,16 @@
private JMenuBar menuBar;
+ JMenuItem connectItem;
+ JMenuItem disconnectItem;
+ JMenuItem resetConnectionItem;
+ JMenuItem connectionLoadItem;
+ JMenuItem connectionSaveItem;
+ JMenuItem exitItem;
+ JMenuItem resetEventsItem;
+ JMenuItem savePlotsItem;
+ JMenuItem resetDriversItem;
+
final String connectCmd = "connect";
final String disconnectCmd = "disconnect";
final String saveConnectionCmd = "saveConnection";
@@ -54,37 +65,37 @@
JMenu connectionMenu = new JMenu("Connection");
menuBar.add(connectionMenu);
- JMenuItem connectItem = new JMenuItem("Connect");
+ connectItem = new JMenuItem("Connect");
connectItem.setMnemonic(KeyEvent.VK_C);
connectItem.setActionCommand(connectCmd);
connectItem.addActionListener(this);
connectionMenu.add(connectItem);
- JMenuItem disconnectItem = new JMenuItem("Disconnect");
+ disconnectItem = new JMenuItem("Disconnect");
disconnectItem.setMnemonic(KeyEvent.VK_D);
disconnectItem.setActionCommand(disconnectCmd);
disconnectItem.addActionListener(this);
connectionMenu.add(disconnectItem);
- JMenuItem resetConnectionItem = new JMenuItem("Reset Connection Settings");
+ resetConnectionItem = new JMenuItem("Reset Connection Settings");
resetConnectionItem.setMnemonic(KeyEvent.VK_R);
resetConnectionItem.setActionCommand(resetConnectionSettingsCmd);
resetConnectionItem.addActionListener(this);
connectionMenu.add(resetConnectionItem);
- JMenuItem connectionLoadItem = new JMenuItem("Load Connection...");
+ connectionLoadItem = new JMenuItem("Load Connection...");
connectionLoadItem.setMnemonic(KeyEvent.VK_L);
connectionLoadItem.setActionCommand(loadConnectionCmd);
connectionLoadItem.addActionListener(this);
connectionMenu.add(connectionLoadItem);
- JMenuItem connectionSaveItem = new JMenuItem("Save Connection...");
+ connectionSaveItem = new JMenuItem("Save Connection...");
connectionSaveItem.setMnemonic(KeyEvent.VK_S);
connectionSaveItem.setActionCommand(saveConnectionCmd);
connectionSaveItem.addActionListener(this);
connectionMenu.add(connectionSaveItem);
- JMenuItem exitItem = new JMenuItem("Exit");
+ exitItem = new JMenuItem("Exit");
exitItem.setMnemonic(KeyEvent.VK_X);
exitItem.setActionCommand(exitCmd);
exitItem.addActionListener(this);
@@ -93,7 +104,7 @@
JMenu eventMenu = new JMenu("Event");
menuBar.add(eventMenu);
- JMenuItem resetEventsItem = new JMenuItem("Reset Event Monitor");
+ resetEventsItem = new JMenuItem("Reset Event Monitor");
resetEventsItem.setMnemonic(KeyEvent.VK_E);
resetEventsItem.setActionCommand(resetEventsCmd);
resetEventsItem.addActionListener(this);
@@ -102,13 +113,13 @@
JMenu jobMenu = new JMenu("Job");
menuBar.add(jobMenu);
- JMenuItem savePlotsItem = new JMenuItem("Save Plots to AIDA File...");
+ savePlotsItem = new JMenuItem("Save Plots to AIDA File...");
savePlotsItem.setMnemonic(KeyEvent.VK_P);
savePlotsItem.setActionCommand("savePlots");
savePlotsItem.addActionListener(this);
jobMenu.add(savePlotsItem);
- JMenuItem resetDriversItem = new JMenuItem("Reset LCSim Drivers");
+ resetDriversItem = new JMenuItem("Reset LCSim Drivers");
resetDriversItem.setMnemonic(KeyEvent.VK_D);
resetDriversItem.setActionCommand("resetDrivers");
resetDriversItem.addActionListener(this);
@@ -135,7 +146,7 @@
this.mgr = mgr;
}
- synchronized private void savePlots() {
+ synchronized void savePlots() {
JFileChooser fc = new JFileChooser();
int r = fc.showSaveDialog(this);
if (r == JFileChooser.APPROVE_OPTION) {
@@ -148,7 +159,7 @@
}
}
- synchronized private void resetDrivers() {
+ synchronized void resetDrivers() {
for (Driver driver : mgr.getDriverExecList()) {
if (driver instanceof Resettable) {
((Resettable) driver).reset();
@@ -183,6 +194,30 @@
private void exit() {
System.exit(0);
}
+
+ void disconnect() {
+ // Enable or disable appropriate menu items.
+ connectItem.setEnabled(true);
+ disconnectItem.setEnabled(false);
+ resetConnectionItem.setEnabled(true);
+ connectionLoadItem.setEnabled(true);
+ savePlotsItem.setEnabled(false);
+
+ // Reset the LCSim Drivers, which should destroy Plotters.
+ resetDrivers();
+
+ // Reenable the ConnectionPanel.
+ connectionPanel.enableConnectionPanel(true);
+ }
+
+ void connect() {
+ // Enable or disable appropriate menu items.
+ connectItem.setEnabled(false);
+ disconnectItem.setEnabled(true);
+ resetConnectionItem.setEnabled(false);
+ connectionLoadItem.setEnabled(false);
+ savePlotsItem.setEnabled(true);
+ }
ConnectionPanel getConnectionPanel() {
return connectionPanel;
hps-java/src/main/java/org/lcsim/hps/monitoring
diff -u -r1.1 -r1.2
--- MonitoringExample.java 27 Mar 2012 03:18:21 -0000 1.1
+++ MonitoringExample.java 27 Mar 2012 04:13:37 -0000 1.2
@@ -21,14 +21,9 @@
import org.lcsim.util.DriverAdapter;
/**
- * This class is an example of an event consumer for an ET system.
- *
- * Based on Carl Timmer's apps.Consumer class from jevio 4.0 release.
- *
+ * This is an example monitoring application using the classes from the org.lcsim.hps.monitoring package.
* @author Jeremy McCormick
*/
-// TODO Move the code that wraps Driver and event loop into the JobControlManager.
-// TODO Add connection status field = disconnected | connected | connecting
public class MonitoringExample {
private static final String defaultDetectorName = "HPS-Test-JLAB-v4pt0";
@@ -59,109 +54,120 @@
jobPanel.setDetectorName(defaultDetectorName);
jobPanel.setSteeringFile(defaultSteeringFile);
- // Wait for connection via GUI.
- ConnectionPanel connectionPanel = gui.getConnectionPanel();
- while (!connectionPanel.connectPressed()) {
- try { Thread.sleep(1000); } catch (InterruptedException e) {};
- }
- ConnectionParameters cn = connectionPanel.getConnectionParameters();
-
- // Try block is mostly for EtExceptions and friends.
- try {
-
- // Setup connection to ET system.
- EtConnection et = EtConnection.makeEtConnection(cn);
- EtSystem sys = et.getEtSystem();
- EtAttachment att = et.getEtAttachment();
-
- // Job manager to run LCSim.
- String steeringFile = jobPanel.getSteeringFile();
- jobMgr = new JobControlManager();
- jobMgr.checkInputFiles(false);
- InputStream is = this.getClass().getResourceAsStream(steeringFile);
- jobMgr.setup(is);
-
- // Set ref to JobControlManager in GUI so resetting works.
- gui.setJobControlManager(jobMgr);
-
- // Make a DriverAdapter for wrapping event loop.
- DriverAdapter driverAdapter = jobMgr.getDriverAdapter();
-
- // Call wrapper to startOfData() on DriverAdapter.
- driverAdapter.configure(null);
-
- // Make the builder for creating LCSim events from EVIO data.
- String detectorName = jobPanel.getDetectorName();
- LCSimEventBuilder eventBuilder = new LCSimEventBuilder(detectorName);
- eventBuilder.setDebug(false);
-
- // Start job timer.
- EventPanel eventPanel = gui.getEventPanel();
- eventPanel.updateJobStartTime();
-
- // array of events
- EtEvent[] mevs = null;
-
- // EtEvent loop.
- while (true) {
- try {
- // Choose wait or sleep mode depending on connection settings.
- if (cn.waitMode == WaitMode.WAIT) {
- mevs = sys.getEvents(att, Mode.TIMED, Modify.NOTHING, cn.waitTime, cn.chunk);
- } else {
- mevs = sys.getEvents(att, Mode.SLEEP, Modify.NOTHING, 0, cn.chunk);
- }
-
- // Loop over retrieved EtEvents.
- for (EtEvent mev : mevs) {
-
- // Update GUI's event count.
- eventPanel.updateEventCount();
-
- // Get EvioEvent and check for errors.
- ByteBuffer buf = mev.getDataBuffer();
- EvioReader reader = new EvioReader(buf);
- EvioEvent evioEvent = null;
- try {
- evioEvent = reader.parseNextEvent();
- } catch (java.nio.BufferUnderflowException e) {
- // Error will be caught by subsequent check on null event.
- }
- if (evioEvent == null) {
- eventPanel.updateBadEventCount();
- continue;
- }
-
- // Create LCSim event from EVIO data.
- EventHeader lcsimEvent = eventBuilder.makeLCSimEvent(evioEvent);
-
- // Make a new event for DriverAdapter.
- RecordSuppliedEvent loopEvent = new RecordSuppliedEvent(new Object(), lcsimEvent);
-
- // Call process methods via Driver Adapter.
- driverAdapter.recordSupplied(loopEvent);
-
- // Update the average event rate.
- eventPanel.updateAverageEventRate();
-
- // Update elapsed time.
- eventPanel.updateElapsedTime();
- }
-
- // Put events back into the ET system.
- sys.putEvents(att, mevs);
-
- } catch (EtTimeoutException e) {
- System.out.println("ET Consumer timed out.");
- driverAdapter.finish(null);
- System.out.println("Press ENTER to exit ...");
- System.console().readLine();
- System.exit(0);
- }
- }
- } catch (Exception ex) {
- System.out.println("Error using ET system as consumer.");
- ex.printStackTrace();
- }
- }
+ // Get ConnectionPanel which can be used to connect/disconnect from ET system.
+ ConnectionPanel connectionPanel = gui.getConnectionPanel();
+
+ // GUI loop. Use 'Exit' command from GUI to quit.
+ while (true) {
+
+ // Wait for connection to be requested via GUI.
+ while (!connectionPanel.connectRequested()) {
+ try { Thread.sleep(1000); } catch (InterruptedException e) {};
+ }
+ ConnectionParameters cn = connectionPanel.getConnectionParameters();
+
+ // This makes sure applicable menu items are enabled/disabled.
+ gui.connect();
+
+ // Try block is mostly for EtExceptions and friends.
+ try {
+
+ // Setup connection to ET system.
+ EtConnection et = EtConnection.makeEtConnection(cn);
+ EtSystem sys = et.getEtSystem();
+ EtAttachment att = et.getEtAttachment();
+
+ // Job manager to run LCSim.
+ String steeringFile = jobPanel.getSteeringFile();
+ jobMgr = new JobControlManager();
+ jobMgr.checkInputFiles(false);
+ InputStream is = this.getClass().getResourceAsStream(steeringFile);
+ jobMgr.setup(is);
+
+ // Set ref to JobControlManager in GUI so resetting works.
+ gui.setJobControlManager(jobMgr);
+
+ // Make a DriverAdapter for wrapping event loop.
+ DriverAdapter driverAdapter = jobMgr.getDriverAdapter();
+
+ // Call wrapper to startOfData() on DriverAdapter.
+ driverAdapter.configure(null);
+
+ // Make the builder for creating LCSim events from EVIO data.
+ String detectorName = jobPanel.getDetectorName();
+ LCSimEventBuilder eventBuilder = new LCSimEventBuilder(detectorName);
+ eventBuilder.setDebug(false);
+
+ // Start job timer.
+ EventPanel eventPanel = gui.getEventPanel();
+ eventPanel.updateJobStartTime();
+
+ // array of events
+ EtEvent[] mevs = null;
+
+ // EtEvent loop.
+ while (true) {
+ try {
+ // Choose wait or sleep mode depending on connection settings.
+ if (cn.waitMode == WaitMode.WAIT) {
+ mevs = sys.getEvents(att, Mode.TIMED, Modify.NOTHING, cn.waitTime, cn.chunk);
+ } else {
+ mevs = sys.getEvents(att, Mode.SLEEP, Modify.NOTHING, 0, cn.chunk);
+ }
+
+ // Loop over retrieved EtEvents.
+ for (EtEvent mev : mevs) {
+
+ // Update GUI's event count.
+ eventPanel.updateEventCount();
+
+ // Get EvioEvent and check for errors.
+ ByteBuffer buf = mev.getDataBuffer();
+ EvioReader reader = new EvioReader(buf);
+ EvioEvent evioEvent = null;
+ try {
+ evioEvent = reader.parseNextEvent();
+ } catch (java.nio.BufferUnderflowException e) {
+ // Error will be caught by subsequent check on null event.
+ }
+ if (evioEvent == null) {
+ eventPanel.updateBadEventCount();
+ continue;
+ }
+
+ // Create LCSim event from EVIO data.
+ EventHeader lcsimEvent = eventBuilder.makeLCSimEvent(evioEvent);
+
+ // Supply record to Driver Adapter.
+ driverAdapter.recordSupplied(new RecordSuppliedEvent(new Object(), lcsimEvent));
+
+ // Update the average event rate.
+ eventPanel.updateAverageEventRate();
+
+ // Update elapsed time.
+ eventPanel.updateElapsedTime();
+ }
+
+ // Put events back into the ET system.
+ sys.putEvents(att, mevs);
+
+ // Break out of event loop if GUI wants disconnect.
+ if (connectionPanel.disconnectRequested()) {
+ System.out.println("Disconnect requested. Breaking out of event loop.");
+ gui.disconnect();
+ break;
+ }
+
+ } catch (EtTimeoutException e) {
+ System.out.println("ET Consumer timed out.");
+ driverAdapter.finish(null);
+ break;
+ }
+ }
+ } catch (Exception ex) {
+ System.out.println("Error using ET system as consumer.");
+ ex.printStackTrace();
+ }
+ }
+ }
}
\ No newline at end of file