hps-java/src/main/java/org/lcsim/hps/monitoring
diff -u -r1.36 -r1.37
--- MonitoringApplication.java 3 May 2012 16:59:28 -0000 1.36
+++ MonitoringApplication.java 4 May 2012 19:42:36 -0000 1.37
@@ -67,6 +67,8 @@
import javax.swing.Timer;
import javax.swing.table.DefaultTableModel;
+import org.apache.commons.cli.*;
+
import org.lcsim.hps.evio.LCSimEventBuilder;
import org.lcsim.hps.evio.LCSimTestRunEventBuilder;
import org.lcsim.job.JobControlManager;
@@ -74,25 +76,25 @@
import org.lcsim.util.aida.AIDA;
/**
- * Monitoring application for HPS Test Run, which can run LCSim steering files
- * on data converted from the ET ring. This class is accessible to users by
+ * Monitoring application for HPS Test Run, which can run LCSim steering files
+ * on data converted from the ET ring. This class is accessible to users by
* calling its main() method.
- *
+ *
* @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: MonitoringApplication.java,v 1.36 2012/05/03 16:59:28 jeremy Exp $
+ * @version $Id: MonitoringApplication.java,v 1.36 2012/05/03 16:59:28 jeremy
+ * Exp $
*/
public class MonitoringApplication {
// Top-level Swing components.
private JPanel mainPanel;
- private JTabbedPane tabs;
+ private JTabbedPane tabs;
private ConnectionPanel connectionPanel;
private ConnectionStatusPanel connectionStatusPanel;
private EventPanel eventPanel;
- private JobPanel jobPanel;
- private JMenuBar menuBar;
+ private JobPanel jobPanel;
+ private JMenuBar menuBar;
private EventButtonsPanel buttonsPanel;
-
// References to menu items that will be enabled/disabled depending on application state.
private JMenuItem connectItem;
private JMenuItem disconnectItem;
@@ -104,55 +106,44 @@
private JMenuItem logItem;
private JMenuItem terminalItem;
private JMenuItem steeringItem;
-
// Saved references to System.out and System.err in case need to reset.
private final PrintStream sysOut = System.out;
private final PrintStream sysErr = System.err;
-
// ET connection parameters and state.
private ConnectionParameters connectionParameters;
private EtConnection connection;
- private int connectionStatus = ConnectionStatus.DISCONNECTED;
-
+ private int connectionStatus = ConnectionStatus.DISCONNECTED;
// Event processing objects.
private JobControlManager jobManager;
private LCSimEventBuilder eventBuilder;
private EtEventProcessor eventProcessor;
private Thread eventProcessingThread;
-
// Job timing.
private Timer timer;
private long jobStartTime;
-
// ActionListener for GUI event dispatching.
private ActionListener actionListener;
-
// Logging objects.
private static Logger logger;
private Handler logHandler;
private DefaultTableModel logTableModel;
private JTable logTable;
-
// Some default GUI size parameters.
private final int maxWidth = 800;
private final int logHeight = 300;
-
// Format for screenshots. Hard-coded to PNG.
private static final String screenshotFormat = "png";
-
// The AIDA remote server.
private AIDAServer server;
-
// Listener for processing EtEvents.
private EtEventListener etListener = new MonitoringApplicationEtListener();
-
// Maximum time to wait for ET system to disconnect before zombifying the station, in milliseconds.
// TODO: Make this an option in JobPanel.
private int maxCleanupTime = 5000;
/**
- * Constructor for monitoring application. Users should not
- * need to use this; call main() method instead.
+ * Constructor for monitoring application. Users should not need to use
+ * this; call main() method instead.
*/
private MonitoringApplication() {
@@ -178,8 +169,7 @@
/**
* Creates all the JPanels for the application.
*/
- private void createPanels()
- {
+ private void createPanels() {
// Main panel for the application.
mainPanel = new JPanel();
mainPanel.setLayout(new GridBagLayout());
@@ -223,7 +213,7 @@
// Add tabs to main panel.
c = new GridBagConstraints();
c.gridx = 0;
- c.gridy = 2;
+ c.gridy = 2;
c.fill = GridBagConstraints.BOTH;
c.weightx = c.weighty = 1.0;
mainPanel.add(tabsPanel, c);
@@ -235,7 +225,7 @@
JMenu connectionMenu = new JMenu("Connection");
connectionMenu.setMnemonic(KeyEvent.VK_C);
- menuBar.add(connectionMenu);
+ menuBar.add(connectionMenu);
connectItem = new JMenuItem("Connect");
connectItem.setMnemonic(KeyEvent.VK_C);
@@ -289,14 +279,14 @@
resetEventsItem.setActionCommand(resetEventsCmd);
resetEventsItem.addActionListener(actionListener);
resetEventsItem.setToolTipText("Reset timer and counters in the event monitor tab.");
- eventMenu.add(resetEventsItem);
+ eventMenu.add(resetEventsItem);
JMenuItem eventRefreshItem = new JMenuItem("Set Event Refresh...");
eventRefreshItem.setMnemonic(KeyEvent.VK_V);
eventRefreshItem.setActionCommand(eventRefreshCmd);
eventRefreshItem.addActionListener(actionListener);
eventRefreshItem.setToolTipText("Set the number of events between GUI updates.");
- eventMenu.add(eventRefreshItem);
+ eventMenu.add(eventRefreshItem);
JMenuItem maxEventsItem = new JMenuItem("Set Max Events...");
maxEventsItem.setMnemonic(KeyEvent.VK_M);
@@ -322,7 +312,7 @@
savePlotsItem.addActionListener(actionListener);
savePlotsItem.setEnabled(false);
savePlotsItem.setToolTipText("Save plots from default AIDA tree to an output file.");
- jobMenu.add(savePlotsItem);
+ jobMenu.add(savePlotsItem);
resetDriversItem = new JMenuItem("Reset LCSim Drivers");
resetDriversItem.setMnemonic(KeyEvent.VK_D);
@@ -386,24 +376,24 @@
* Puts log messages into the application's log table GUI component.
*/
public void publish(LogRecord record) {
- Object[] row = new Object[] {
- record.getLoggerName(), // source
- record.getMessage(), // message
- dateFormat.format(new Date(record.getMillis())), // date
- record.getLevel()}; // level
+ Object[] row = new Object[]{
+ record.getLoggerName(), // source
+ record.getMessage(), // message
+ dateFormat.format(new Date(record.getMillis())), // date
+ record.getLevel()}; // level
logTableModel.insertRow(logTable.getRowCount(), row);
}
- public void close() throws SecurityException
- {}
+ public void close() throws SecurityException {
+ }
- public void flush()
- {}
+ public void flush() {
+ }
}
/**
- * Creates the application's log table GUI component, which is a JTable containing
- * messages from the logger.
+ * Creates the application's log table GUI component, which is a JTable
+ * containing messages from the logger.
*/
private void createLogTable() {
final String[] logTableColumns = {"Source", "Message", "Date", "Level"};
@@ -423,7 +413,8 @@
}
/**
- * Setup the application's Logger object for writing messages to the log table.
+ * Setup the application's Logger object for writing messages to the log
+ * table.
*/
private void setupLogger() {
logger = Logger.getLogger(this.getClass().getSimpleName());
@@ -435,11 +426,13 @@
/**
* Create the monitoring application frame and run it on a separate thread.
+ *
* @return Reference to the created application.
*/
private static final MonitoringApplication createMonitoringApplication() {
final MonitoringApplication app = new MonitoringApplication();
SwingUtilities.invokeLater(new Runnable() {
+
public void run() {
app.createApplicationFrame();
}
@@ -449,35 +442,70 @@
/**
* Run the monitoring application from the command line.
+ *
* @param args The command line arguments.
*/
// TODO: Command line arguments should be: [etFile] [steeringFile] (according to Matthew Graham!)
- public static void main(String[] args)
- {
+ public static void main(String[] args) {
final String defaultDetectorName;
final String defaultSteering;
final String defaultEventBuilder;
- if (args.length == 0) {
- defaultDetectorName = "HPS-Test-JLAB-v4pt0";
+ // Set up command line parsing.
+ Options options = new Options();
+
+ options.addOption(new Option("h", false, "Print this help."));
+// options.addOption(new Option("e", true, "ET file buffer to use."));
+ options.addOption(new Option("c", true, "Load properties file."));
+ options.addOption(new Option("r", true, "Load specified steering file resource."));
+// options.addOption(new Option("x", true, "Load specified steering file path."));
+ options.addOption(new Option("d", true, "Detector to use."));
+ options.addOption(new Option("b", true, "Event builder to use."));
+ CommandLineParser parser = new PosixParser();
+
+ // Parse command line arguments.
+ CommandLine cl = null;
+ try {
+ cl = parser.parse(options, args);
+ } catch (ParseException e) {
+ throw new RuntimeException("Problem parsing command line options.", e);
+ }
+
+ if (cl.hasOption("h")) {
+ System.out.println("MonitoringApplication [options]");
+ HelpFormatter help = new HelpFormatter();
+ help.printHelp(" ", options);
+ System.exit(1);
+ }
+
+ if (cl.hasOption("r")) {
+ defaultSteering = cl.getOptionValue("r");
+ } else {
defaultSteering = "/org/lcsim/hps/steering/TestRunMonitoring.lcsim";
- defaultEventBuilder = LCSimTestRunEventBuilder.class.getCanonicalName();
}
- else {
- if (args.length != 3) {
- System.out.println("Usage: MonitoringApplication [detectorName] [steeringFile] [eventBuilderClass]");
- System.exit(1);
- }
- defaultDetectorName = args[0];
- defaultSteering = args[1];
- defaultEventBuilder = args[2];
+
+ if (cl.hasOption("d")) {
+ defaultDetectorName = cl.getOptionValue("d");
+ } else {
+ defaultDetectorName = "HPS-Test-JLAB-v4pt0";
+ }
+
+ if (cl.hasOption("b")) {
+ defaultEventBuilder = cl.getOptionValue("b");
+ } else {
+ defaultEventBuilder = LCSimTestRunEventBuilder.class.getCanonicalName();
}
// Create the main app class.
MonitoringApplication app = MonitoringApplication.createMonitoringApplication();
+ if (cl.hasOption("p")) {
+ File propertiesFile = new File(cl.getOptionValue("p"));
+ app.connectionPanel.loadPropertiesFile(propertiesFile);
+ }
+
// Set job parameters.
- app.setJobParameters(new JobParameters(new String[] {defaultDetectorName, defaultSteering, defaultEventBuilder}));
+ app.setJobParameters(new JobParameters(new String[]{defaultDetectorName, defaultSteering, defaultEventBuilder}));
// Run the app.
app.run();
@@ -493,15 +521,15 @@
}
/**
- * Application parameters:
- * params[0] = detectorName
- * params[1] = steeringResourceString
- * params[2] = eventBuilderClassName
+ * Application parameters: params[0] = detectorName params[1] =
+ * steeringResourceString params[2] = eventBuilderClassName
*/
private static final class JobParameters {
+
private String detectorName;
private String steeringResource;
private String eventBuilderClassName;
+
JobParameters(String[] params) {
if (params.length != 3) {
new IllegalArgumentException("Parameter array is wrong length.");
@@ -519,84 +547,63 @@
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
- if (cmd != MonitoringCommands.updateTimeCmd)
+ if (cmd != MonitoringCommands.updateTimeCmd) {
logger.log(Level.FINEST, "Action performed <" + cmd + ">.");
+ }
if (connectCmd.equals(cmd)) {
startSessionThread();
- }
- else if (disconnectCmd.equals(cmd)) {
+ } else if (disconnectCmd.equals(cmd)) {
startDisconnectThread();
- }
- else if (eventRefreshCmd.equals(cmd)) {
+ } else if (eventRefreshCmd.equals(cmd)) {
setEventRefresh();
- }
- else if (savePlotsCmd.equals(cmd)) {
+ } else if (savePlotsCmd.equals(cmd)) {
savePlots();
- }
- else if (resetDriversCmd.equals(cmd)) {
+ } else if (resetDriversCmd.equals(cmd)) {
resetDrivers();
- }
- else if (logCmd.equals(cmd)) {
+ } else if (logCmd.equals(cmd)) {
logToFile();
- }
- else if (terminalCmd.equals(cmd)) {
+ } else if (terminalCmd.equals(cmd)) {
logToTerminal();
- }
- else if (screenshotCmd.equals(cmd)) {
+ } else if (screenshotCmd.equals(cmd)) {
screenshot();
- }
- else if (exitCmd.equals(cmd)) {
+ } else if (exitCmd.equals(cmd)) {
exit();
- }
- else if (updateTimeCmd.equals(cmd)) {
+ } else if (updateTimeCmd.equals(cmd)) {
updateTime();
- }
- else if (resetEventsCmd.equals(cmd)) {
+ } else if (resetEventsCmd.equals(cmd)) {
resetJob();
- }
- else if (saveConnectionCmd.equals(cmd)) {
+ } else if (saveConnectionCmd.equals(cmd)) {
connectionPanel.save();
- }
- else if (loadConnectionCmd.equals(cmd)) {
+ } else if (loadConnectionCmd.equals(cmd)) {
connectionPanel.load();
- }
- else if (resetConnectionSettingsCmd.equals(cmd)) {
+ } else if (resetConnectionSettingsCmd.equals(cmd)) {
connectionPanel.reset();
- }
- else if (setSteeringFileCmd.equals(cmd)) {
+ } else if (setSteeringFileCmd.equals(cmd)) {
selectSteeringFile();
- }
- else if (setMaxEventsCmd.equals(cmd)) {
+ } else if (setMaxEventsCmd.equals(cmd)) {
setMaxEvents();
- }
- else if (saveLogCmd.equals(cmd)) {
+ } else if (saveLogCmd.equals(cmd)) {
saveLogToFile();
- }
- else if (clearLogCmd.equals(cmd)) {
+ } else if (clearLogCmd.equals(cmd)) {
clearLog();
- }
- else if (steeringCmd.equals(cmd)) {
+ } else if (steeringCmd.equals(cmd)) {
jobPanel.editSteering();
- }
- else if (eventBuilderCmd.equals(cmd)) {
+ } else if (eventBuilderCmd.equals(cmd)) {
jobPanel.editEventBuilder();
- }
- else if (pauseCmd.equals(cmd)) {
+ } else if (pauseCmd.equals(cmd)) {
pause();
- }
- else if (nextCmd.equals(cmd)) {
+ } else if (nextCmd.equals(cmd)) {
next();
- }
- else if (resumeCmd.equals(cmd)) {
+ } else if (resumeCmd.equals(cmd)) {
resume();
- }
- else if (logLevelCmd.equals(cmd)) {
+ } else if (logLevelCmd.equals(cmd)) {
setLogLevel();
}
}
private void startDisconnectThread() {
Runnable r = new Runnable() {
+
public void run() {
disconnect();
}
@@ -605,31 +612,32 @@
t.start();
}
}
-
+
/**
- * This is the primary entry point for starting a monitoring session.
- * The session is started on a new thread so it doesn't block.
+ * This is the primary entry point for starting a monitoring session. The
+ * session is started on a new thread so it doesn't block.
*/
private void startSessionThread() {
if (getConnectionStatus() != ConnectionStatus.CONNECTED) {
Runnable r = new Runnable() {
+
public void run() {
session();
}
};
Thread t = new Thread(r, "Session Thread");
t.start();
- }
- else {
+ } else {
logger.log(Level.SEVERE, "Ignoring connection request. Already connected!");
}
}
/**
- * Set a new log level for the application and also forward to the event processor.
+ * Set a new log level for the application and also forward to the event
+ * processor.
*/
private void setLogLevel() {
- Level newLevel = jobPanel.getLogLevel();
+ Level newLevel = jobPanel.getLogLevel();
logger.setLevel(newLevel);
if (eventProcessor != null) {
eventProcessor.setLogLevel(newLevel);
@@ -670,10 +678,10 @@
try {
// Call cleanup methods of Drivers.
try {
- if (jobManager != null)
+ if (jobManager != null) {
jobManager.finish();
- }
- catch (Exception e) {
+ }
+ } catch (Exception e) {
e.printStackTrace();
logger.log(Level.WARNING, "Error calling jobManager.finish() in job cleanup.");
}
@@ -692,15 +700,14 @@
server = null;
logger.log(Level.CONFIG, "Remote AIDA server was closed.");
}
- }
- catch (Exception e) {
+ } catch (Exception e) {
e.printStackTrace();
logger.log(Level.WARNING, "Error in finish() method <" + e.getMessage() + ">.");
}
}
public void prestart(int seconds, int runNumber) {
- final long millis = ((long)seconds) * 1000;
+ final long millis = ((long) seconds) * 1000;
eventPanel.setRunNumber(runNumber);
eventPanel.setRunStartTime(millis);
logger.log(Level.INFO, "Set run number <" + runNumber + "> from Pre Start.");
@@ -708,7 +715,7 @@
}
public void endRun(int seconds, int events) {
- final long millis = ((long)seconds) * 1000;
+ final long millis = ((long) seconds) * 1000;
eventPanel.setRunEndTime(millis);
eventPanel.setRunEventCount(events);
logger.log(Level.INFO, "Set number of events in run to <" + events + ">.");
@@ -718,9 +725,10 @@
/**
* Set the job parameters.
+ *
* @param p The job parameters.
*/
- private void setJobParameters(JobParameters p) {
+ private void setJobParameters(JobParameters p) {
jobPanel.setDetectorName(p.detectorName);
jobPanel.setSteeringResource(p.steeringResource);
jobPanel.setDefaultEventBuilder(p.eventBuilderClassName);
@@ -728,6 +736,7 @@
/**
* Set the connection status.
+ *
* @param status The connection status.
*/
private void setConnectionStatus(int status) {
@@ -739,6 +748,7 @@
/**
* Get the current connection status.
+ *
* @return The connection status.
*/
private int getConnectionStatus() {
@@ -747,14 +757,16 @@
/**
* Get whether there is currently a connection request.
+ *
* @return True if connection is currently requested; false if no.
*/
private boolean connectionRequested() {
return connectionStatus == ConnectionStatus.CONNECTION_REQUESTED;
- }
+ }
/**
* Pop-up a modal dialog.
+ *
* @param m The message to display in the dialog box.
*/
private void showDialog(String m) {
@@ -762,8 +774,8 @@
}
/**
- * Setup the frame to run the application.
- * This should be called using Runnable.run() (see MonitoringExample).
+ * Setup the frame to run the application. This should be called using
+ * Runnable.run() (see MonitoringExample).
*/
private void createApplicationFrame() {
mainPanel.setOpaque(true);
@@ -771,7 +783,7 @@
frame.setContentPane(mainPanel);
frame.setJMenuBar(menuBar);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
- frame.setMinimumSize(new Dimension(800,400));
+ frame.setMinimumSize(new Dimension(800, 400));
frame.setResizable(false);
frame.pack();
frame.setVisible(true);
@@ -806,45 +818,45 @@
(new JobControlManager()).setup(fileName);
jobPanel.setSteeringFile(fileName.getPath());
logger.log(Level.INFO, "Steering file set to <" + fileName.getPath() + ">.");
- }
- catch (Exception e) {
+ } catch (Exception e) {
e.printStackTrace();
logger.log(Level.SEVERE, "Failed to read steering file <" + fileName.getPath() + ">.");
showDialog("Failed to read the LCSim XML file.");
- }
+ }
}
}
/**
* Get the full title of the application.
+ *
* @return The application title.
*/
private static String getApplicationTitle() {
- return "HPS Monitoring - " + getUserName() + "@"+ getHostname();
+ return "HPS Monitoring - " + getUserName() + "@" + getHostname();
}
/**
* Get the hostname, which is used in the application title.
+ *
* @return The hostname.
*/
private static String getHostname() {
try {
return InetAddress.getLocalHost().getHostName();
- }
- catch (Exception e) {
+ } catch (Exception e) {
return "UNKNOWN_HOST";
}
}
/**
* Get the user name, which is used in the application title.
+ *
* @return The user name.
*/
private static String getUserName() {
if (System.getProperty("user.name") == null) {
return "UNKNOWN_USER";
- }
- else {
+ } else {
return System.getProperty("user.name");
}
}
@@ -862,14 +874,14 @@
} catch (Exception e) {
e.printStackTrace();
}
- }
+ }
}
}
logger.log(Level.INFO, "LCSim drivers were reset.");
}
/**
- * Redirect System.out and System.err to a file. This is independent of
+ * Redirect System.out and System.err to a file. This is independent of
* messages that are sent to the application's log table and is primarily
* used to capture lengthy debug output from event processing.
*/
@@ -881,14 +893,17 @@
final File logFile = fc.getSelectedFile();
if (logFile.exists()) {
JOptionPane.showMessageDialog(this.mainPanel, "Log file already exists.");
- } else {
+ } else {
try {
- if (!logFile.createNewFile()) throw new IOException();
+ if (!logFile.createNewFile()) {
+ throw new IOException();
+ }
PrintStream ps = new PrintStream(new FileOutputStream(logFile.getPath()));
System.setOut(ps);
- System.setErr(ps);
+ System.setErr(ps);
SwingUtilities.invokeLater(new Runnable() {
+
public void run() {
jobPanel.logFileField.setText(logFile.getPath());
jobPanel.logCheckBox.setSelected(true);
@@ -907,13 +922,15 @@
}
/**
- * Redirect System.out and System.err back to the terminal, e.g. if they were previously sent to a file.
- * This is independent of messages that are sent to the application's log table.
+ * Redirect System.out and System.err back to the terminal, e.g. if they
+ * were previously sent to a file. This is independent of messages that are
+ * sent to the application's log table.
*/
private void logToTerminal() {
System.setOut(sysOut);
- System.setErr(sysErr);
+ System.setErr(sysErr);
SwingUtilities.invokeLater(new Runnable() {
+
public void run() {
jobPanel.logFileField.setText("");
jobPanel.logCheckBox.setSelected(false);
@@ -936,15 +953,15 @@
}
eventPanel.setEventRefresh(newEventRefresh);
logger.log(Level.INFO, "Event refresh set to <" + newEventRefresh + ">.");
- }
- catch (Exception e) {
+ } catch (Exception e) {
logger.log(Level.WARNING, "Ignored invalid event refresh setting.");
showDialog("The value " + inputValue + " is not valid for Event Refresh Rate.");
}
}
/**
- * Using a modal input dialog, set the maximum number of events to process before automatic disconnect.
+ * Using a modal input dialog, set the maximum number of events to process
+ * before automatic disconnect.
*/
private void setMaxEvents() {
String inputValue = JOptionPane.showInputDialog("Max Events:", eventPanel.getMaxEvents());
@@ -959,24 +976,23 @@
// Set max events in event processor.
eventProcessor.setMaxEvents(newMaxEvents);
logger.log(Level.INFO, "Max events set to <" + newMaxEvents + ">.");
- }
- catch (Exception e) {
+ } catch (Exception e) {
logger.log(Level.WARNING, "Ignored invalid max events setting <" + inputValue + ">.");
showDialog("The value " + inputValue + " is not valid for Max Events.");
}
}
/**
- * Set the GUI state to disconnected, which will enable/disable applicable GUI
- * components and menu items.
+ * Set the GUI state to disconnected, which will enable/disable applicable
+ * GUI components and menu items.
*/
- private void setDisconnectedGuiState() {
+ private void setDisconnectedGuiState() {
// Enable or disable appropriate menu items.
connectItem.setEnabled(true);
disconnectItem.setEnabled(false);
resetConnectionItem.setEnabled(true);
- connectionLoadItem.setEnabled(true);
+ connectionLoadItem.setEnabled(true);
savePlotsItem.setEnabled(false);
resetDriversItem.setEnabled(false);
logItem.setEnabled(true);
@@ -998,7 +1014,8 @@
}
/**
- * Set the GUI to connected state, which will enable/disable appropriate components and menu items.
+ * Set the GUI to connected state, which will enable/disable appropriate
+ * components and menu items.
*/
private void setConnectedGuiState() {
@@ -1047,9 +1064,9 @@
if (r == JFileChooser.APPROVE_OPTION) {
String fileName = fc.getSelectedFile().getPath();
int extIndex = fileName.lastIndexOf(".");
- if ((extIndex == -1) || !(fileName.substring(extIndex+1, fileName.length())).toLowerCase().equals(screenshotFormat)) {
+ if ((extIndex == -1) || !(fileName.substring(extIndex + 1, fileName.length())).toLowerCase().equals(screenshotFormat)) {
fileName = fileName + "." + screenshotFormat;
- }
+ }
takeScreenshot(fileName);
logger.log(Level.INFO, "Screenshot saved to <" + fileName + ">.");
}
@@ -1057,13 +1074,14 @@
/**
* Save a screenshot to output file.
+ *
* @param fileName The name of the output file.
*/
private void takeScreenshot(String fileName) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screenRectangle = new Rectangle(screenSize);
try {
- Robot robot = new Robot();
+ Robot robot = new Robot();
BufferedImage image = robot.createScreenCapture(screenRectangle);
ImageIO.write(image, screenshotFormat, new File(fileName));
} catch (AWTException e) {
@@ -1074,8 +1092,9 @@
}
/**
- * Get the fully qualified class name of the current event builder
- * for converting from EVIO to LCIO.
+ * Get the fully qualified class name of the current event builder for
+ * converting from EVIO to LCIO.
+ *
* @return The class name of the event builder.
*/
private String getEventBuilderClassName() {
@@ -1084,6 +1103,7 @@
/**
* Get the type of steering file being used.
+ *
* @return The type of the steering file.
*/
private int getSteeringType() {
@@ -1092,6 +1112,7 @@
/**
* Get the current max events setting.
+ *
* @return The maximum number of events to process before disconnect.
*/
private int getMaxEvents() {
@@ -1104,9 +1125,9 @@
private void session() {
logger.log(Level.INFO, "Starting a new monitoring session.");
-
+
int endStatus = ConnectionStatus.DISCONNECTING;
-
+
try {
// Setup LCSim.
@@ -1126,25 +1147,24 @@
logger.log(Level.FINEST, "Started event processing thread.");
logHandler.flush();
-
+
// Wait for the event processing thread to finish.
try {
- eventProcessingThread.join();
+ eventProcessingThread.join();
+ } catch (InterruptedException e) {
}
- catch (InterruptedException e) {}
logger.log(Level.INFO, "Event processor finished with status <" + ConnectionStatus.toString(eventProcessor.getStatus()) + ">.");
endStatus = eventProcessor.getStatus();
- }
- catch (Exception e) {
+ } catch (Exception e) {
e.printStackTrace();
logger.log(Level.SEVERE, "Fatal error in monitoring session.");
endStatus = ConnectionStatus.ERROR;
- }
- finally {
+ } finally {
logHandler.flush();
// Disconnect if needed.
- if (getConnectionStatus() != ConnectionStatus.DISCONNECTED)
+ if (getConnectionStatus() != ConnectionStatus.DISCONNECTED) {
disconnect(endStatus);
+ }
}
}
@@ -1158,8 +1178,7 @@
boolean ok = this.server.start();
if (ok) {
logger.log(Level.INFO, "Remote AIDA server started with name <" + jobPanel.getRemoteAIDAName() + ">.");
- }
- else {
+ } else {
this.server = null;
logger.log(Level.SEVERE, "Failed to start remote AIDA server.");
}
@@ -1168,39 +1187,41 @@
/**
* Create the Thread for processing EtEvents.
+ *
* @return The Thread for event processing.
*/
- private Thread createEventProcessingThread()
- {
+ private Thread createEventProcessingThread() {
// Create a new event processor.
eventProcessor = new DefaultEtEventProcessor(
- this.connection,
- this.eventBuilder,
- this.jobManager,
- getMaxEvents(),
+ this.connection,
+ this.eventBuilder,
+ this.jobManager,
+ getMaxEvents(),
disconnectOnError(),
this.logHandler);
// Add the application's listener for callback to GUI.
eventProcessor.addListener(this.etListener);
// Set initial pause mode from job panel after which it can be toggled via event buttons.
- eventProcessor.pauseMode(this.jobPanel.pauseMode());
+ eventProcessor.pauseMode(this.jobPanel.pauseMode());
Runnable run = new Runnable() {
+
public void run() {
eventProcessor.process();
- }
+ }
};
return new Thread(run, "EtEvent Processing Thread");
}
/**
- * Connect to the ET system specified in the GUI's connection panel settings.
+ * Connect to the ET system specified in the GUI's connection panel
+ * settings.
*/
private void connect() {
logger.log(Level.INFO, "Connecting to ET system.");
-
+
setConnectionStatus(ConnectionStatus.CONNECTION_REQUESTED);
-
+
// Make sure applicable menu items are enabled or disabled.
setConnectedGuiState();
@@ -1212,6 +1233,7 @@
/**
* Get whether the current steering file or resource looks valid.
+ *
* @return True if steering is valid; false if no.
*/
private boolean validSteering() {
@@ -1219,7 +1241,9 @@
}
/**
- * Get the steering parameter, which is either a file path or resource string.
+ * Get the steering parameter, which is either a file path or resource
+ * string.
+ *
* @return The steering parameter.
*/
private String getSteering() {
@@ -1228,6 +1252,7 @@
/**
* Get the name of the detector for conditions data.
+ *
* @return The name of the detector.
*/
private String getDetectorName() {
@@ -1236,6 +1261,7 @@
/**
* Get the connection parameter settings from the connection panel.
+ *
* @return The connection parameters.
*/
private ConnectionParameters getConnectionParameters() {
@@ -1244,6 +1270,7 @@
/**
* Get whether a warning dialog will open before disconnect.
+ *
* @return True if warning will occur before disconnect; false if no.
*/
private boolean warnOnDisconnect() {
@@ -1252,6 +1279,7 @@
/**
* Get whether errors in event processing will cause automatic disconnect.
+ *
* @return True if disconnect on event processing error; false if no.
*/
private boolean disconnectOnError() {
@@ -1264,6 +1292,7 @@
/**
* Disconnect from the ET session with a particular status.
+ *
* @param status The connection status.
*/
synchronized private void disconnect(int status) {
@@ -1281,7 +1310,7 @@
logger.log(Level.WARNING, "ET system is already disconnecting.");
return;
}
-
+
// Show a warning dialog box before disconnecting, if this option is selected.
if (warnOnDisconnect()) {
logger.log(Level.FINEST, "Waiting for user to verify disconnect request.");
@@ -1296,10 +1325,10 @@
// when the ET connection goes down.
eventProcessor.stop();
}
-
+
// Set the application status from the caller.
- setConnectionStatus(status);
-
+ setConnectionStatus(status);
+
// Cleanup the ET session.
cleanupConnection();
@@ -1349,13 +1378,12 @@
cleanupThread.start();
[truncated at 1000 lines; 178 more skipped]