Print

Print


Author: [log in to unmask]
Date: Sat Mar  7 16:05:59 2015
New Revision: 2358

Log:
Merge fixes from trunk to monitoring-app dev branch.

Added:
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/AIDAServer.java
Removed:
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/model/ConfigurationListener.java
Modified:
    java/branches/monitoring-app-dev/   (props changed)
    java/branches/monitoring-app-dev/pom.xml
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/Commands.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MenuBar.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplication.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/model/Configuration.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java

Modified: java/branches/monitoring-app-dev/pom.xml
 =============================================================================
--- java/branches/monitoring-app-dev/pom.xml	(original)
+++ java/branches/monitoring-app-dev/pom.xml	Sat Mar  7 16:05:59 2015
@@ -130,5 +130,10 @@
             <artifactId>jlfgr</artifactId>
             <version>1.0</version>
         </dependency>
+        <dependency>
+            <groupId>org.freehep</groupId>
+            <artifactId>freehep-jaida-remote</artifactId>
+            <version>3.4.11</version>
+        </dependency>
     </dependencies>
 </project>

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/Commands.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/Commands.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/Commands.java	Sat Mar  7 16:05:59 2015
@@ -41,6 +41,9 @@
     static final String EXIT = "exit";
     
     static final String LOG_LEVEL_FILTER_CHANGED = "logLevelFilterChanged";
+    
+    static final String START_AIDA_SERVER = "startAIDAServer";
+    static final String STOP_AIDA_SERVER = "stopAIDAServer";
         
     ////////////////////////////////////////////    
     static final String BLOCKING_CHANGED = "blockingChanged";

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/DataSourceComboBox.java	Sat Mar  7 16:05:59 2015
@@ -11,7 +11,6 @@
 import javax.swing.JComboBox;
 
 import org.hps.monitoring.application.DataSourceComboBox.DataSourceItem;
-import org.hps.monitoring.application.model.ConfigurationListener;
 import org.hps.monitoring.application.model.ConfigurationModel;
 import org.hps.monitoring.application.model.ConnectionStatus;
 import org.hps.monitoring.application.model.ConnectionStatusModel;
@@ -28,7 +27,7 @@
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
-class DataSourceComboBox extends JComboBox<DataSourceItem> implements PropertyChangeListener, ActionListener, ConfigurationListener {
+class DataSourceComboBox extends JComboBox<DataSourceItem> implements PropertyChangeListener, ActionListener{
 
     ConnectionStatusModel connectionModel;
     ConfigurationModel configurationModel;
@@ -65,16 +64,9 @@
         setEditable(false);
         this.configurationModel = configurationModel;
         connectionModel.addPropertyChangeListener(this);                
-        configurationModel.addConfigurationListener(this);
+        configurationModel.addPropertyChangeListener(this);
     }
             
-    void setSelectedItem() {
-        DataSourceItem item = findItem(configurationModel.getDataSourcePath(), getDataSourceType(configurationModel.getDataSourcePath()));
-        if (item != null) {
-            setSelectedItem(item);
-        }
-    }
-
     boolean contains(DataSourceItem item) {
         return ((DefaultComboBoxModel<DataSourceItem>) getModel()).getIndexOf(item) != -1;
     }
@@ -91,12 +83,35 @@
                     setEnabled(false);
                 }
             } else if (evt.getPropertyName().equals(ConfigurationModel.DATA_SOURCE_PATH_PROPERTY)) {
-                String path = configurationModel.getDataSourcePath();
-                DataSourceType type = getDataSourceType(path);
-                addDataSourceItem(path, type);
-                setSelectedItem();
+                if (configurationModel.hasValidProperty(ConfigurationModel.DATA_SOURCE_TYPE_PROPERTY)) {
+                    String path = configurationModel.getDataSourcePath();
+                    DataSourceType type = getDataSourceType(path);
+                    if (type.isFile()) {
+                        DataSourceItem item = findItem(path, type);
+                        if (item == null) {
+                            item = addDataSourceItem(path, type);
+                        }
+                        if (configurationModel.getDataSourceType().isFile()) {
+                            setSelectedItem(item);
+                        }
+                    }
+                }
             } else if (evt.getPropertyName().equals(ConfigurationModel.DATA_SOURCE_TYPE_PROPERTY)) {
-                setSelectedItem();
+                if (configurationModel.getDataSourceType() == DataSourceType.ET_SERVER) {
+                    DataSourceItem item = findEtItem();
+                    if (item == null) {
+                        item = new DataSourceItem(configurationModel.getEtPath(), DataSourceType.ET_SERVER);
+                    }
+                    setSelectedItem(item);
+                } else {
+                    if (configurationModel.hasValidProperty(ConfigurationModel.DATA_SOURCE_PATH_PROPERTY)) {
+                        DataSourceItem item = findItem(configurationModel.getDataSourcePath(), configurationModel.getDataSourceType());
+                        if (item == null) {
+                            item = addDataSourceItem(configurationModel.getDataSourcePath(), configurationModel.getDataSourceType());
+                        }
+                        setSelectedItem(item);
+                    }
+                }
             } else if (evt.getPropertyName().equals(ConfigurationModel.HOST_PROPERTY)) {
                 updateEtItem();
             } else if (evt.getPropertyName().equals(ConfigurationModel.ET_NAME_PROPERTY)) {
@@ -125,46 +140,18 @@
                 // Update the model with data source settings.
                 configurationModel.removePropertyChangeListener(this);
                 DataSourceItem item = (DataSourceItem) getSelectedItem();
-                configurationModel.setDataSourceType(item.type);
-                if (item.type != DataSourceType.ET_SERVER) {
-                    configurationModel.setDataSourcePath(item.name);
+                if (item != null) {
+                    configurationModel.setDataSourceType(item.type);
+                    if (item.type != DataSourceType.ET_SERVER) {
+                        configurationModel.setDataSourcePath(item.name);
+                    }
                 }
             } finally {
                 configurationModel.addPropertyChangeListener(this);
             }
         } 
     }
-    
-    public void configurationChanged(ConfigurationModel configurationModel) {
-               
-        // Clear the data source list.
-        removeAllItems();
-        
-        // Add the default ET item.
-        this.removeActionListener(this);
-        try {
-            addItem(new DataSourceItem(configurationModel.getEtPath(), DataSourceType.ET_SERVER));
-                
-            // Add a file source if one has been provided.
-            if (configurationModel.getDataSourcePath() != null) {
-                // Add an item for this data source.
-                DataSourceItem newItem = new DataSourceItem(configurationModel.getDataSourcePath(), configurationModel.getDataSourceType());
-                //System.out.println("adding new item " + newItem.name + " " + newItem.type);
-                addItem(newItem);            
-                if (configurationModel.getDataSourceType().isFile()) {
-                    //System.out.println("setting selected");
-                    setSelectedItem(newItem);
-                }
-            }
-        } finally {
-            this.addActionListener(this);    
-        }
-        
-        // Don't add as property change listener until after configuration has been initialized.
-        configurationModel.removePropertyChangeListener(this);
-        configurationModel.addPropertyChangeListener(this);
-    }
-
+       
     public void addItem(DataSourceItem item) {
         // Do not add invalid looking items.
         if (item.name == null || item.name.length() == 0) { 
@@ -196,15 +183,19 @@
         return null;
     }
 
-    void addDataSourceItem(String path, DataSourceType type) {
+    DataSourceItem addDataSourceItem(String path, DataSourceType type) {
         DataSourceItem newItem = new DataSourceItem(path, type);
-        if (!contains(newItem)) {
-            addItem(newItem);
-        }
+        addItem(newItem);
+        return newItem;
     }
     
     void updateEtItem() {
         DataSourceItem item = findEtItem();
-        item.name = configurationModel.getEtPath();
+        if (item == null) {
+            item = new DataSourceItem(configurationModel.getEtPath(), DataSourceType.ET_SERVER);
+            addItem(item);
+        } else {
+            item.name = configurationModel.getEtPath();
+        }
     }
 }

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MenuBar.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MenuBar.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MenuBar.java	Sat Mar  7 16:05:59 2015
@@ -39,6 +39,7 @@
     JMenuItem closeFileItem;
     JMenuItem openFileItem;    
     JMenu settingsMenu;
+    JMenuItem serverItem;
     ConfigurationModel configurationModel;
     
     MenuBar(ConfigurationModel configurationModel, ConnectionStatusModel connectionModel, ActionListener listener) {
@@ -118,13 +119,21 @@
         savePlotsItem.setToolTipText("Save plots to AIDA file");
         plotsMenu.add(savePlotsItem);
 
-        JMenuItem clearPlotsItem = new JMenuItem("Clear plots");
+        JMenuItem clearPlotsItem = new JMenuItem("Clear Plots");
         clearPlotsItem.setMnemonic(KeyEvent.VK_C);
         clearPlotsItem.setActionCommand(CLEAR_PLOTS);
         clearPlotsItem.addActionListener(listener);
         clearPlotsItem.setEnabled(true);
         clearPlotsItem.setToolTipText("Clear the AIDA plots");
         plotsMenu.add(clearPlotsItem);
+        
+        serverItem = new JMenuItem("Start AIDA Server");
+        serverItem.setMnemonic(KeyEvent.VK_A);
+        serverItem.setActionCommand(Commands.START_AIDA_SERVER);
+        serverItem.setEnabled(true);
+        serverItem.setToolTipText("Start AIDA RMI server");
+        serverItem.addActionListener(listener);
+        plotsMenu.add(serverItem);
         
         JMenu toolsMenu = new JMenu("Tools");
         toolsMenu.setMnemonic(KeyEvent.VK_T);
@@ -165,54 +174,6 @@
         defaultsItem.setEnabled(true);
         defaultsItem.setToolTipText("Restore the window defaults");
         windowMenu.add(defaultsItem);        
-        
-        /*                       
-
-        JMenu logMenu = new JMenu("Log");
-        logMenu.setMnemonic(KeyEvent.VK_L);
-        add(logMenu);
-
-        logItem = new JMenuItem("Redirect to File ...");
-        logItem.setMnemonic(KeyEvent.VK_F);
-        logItem.setActionCommand(CHOOSE_LOG_FILE);
-        //logItem.addActionListener(this);
-        logItem.setEnabled(true);
-        logItem.setToolTipText("Redirect std out and err to a file.");
-        logMenu.add(logItem);
-
-        terminalItem = new JMenuItem("Redirect to Terminal");
-        terminalItem.setMnemonic(KeyEvent.VK_T);
-        terminalItem.setActionCommand(LOG_TO_TERMINAL);
-        //terminalItem.addActionListener(this);
-        terminalItem.setEnabled(false);
-        terminalItem.setToolTipText("Redirect std out and err back to the terminal.");
-        logMenu.add(terminalItem);
-
-        JMenuItem saveLogItem = new JMenuItem("Save Log Table to File ...");
-        saveLogItem.setMnemonic(KeyEvent.VK_S);
-        saveLogItem.setActionCommand(SAVE_LOG_TABLE);
-        //saveLogItem.addActionListener(this);
-        saveLogItem.setToolTipText("Save the log records to a tab delimited text file.");
-        logMenu.add(saveLogItem);
-
-        JMenuItem clearLogItem = new JMenuItem("Clear Log Table");
-        //clearLogItem.addActionListener(this);
-        clearLogItem.setMnemonic(KeyEvent.VK_C);
-        clearLogItem.setActionCommand(CLEAR_LOG_TABLE);
-        clearLogItem.setToolTipText("Clear the log table of all messages.");
-        logMenu.add(clearLogItem);
-
-        JMenu utilMenu = new JMenu("Util");
-        plotsMenu.setMnemonic(KeyEvent.VK_U);
-        add(utilMenu);
-
-        JMenuItem screenshotItem = new JMenuItem("Take a Screenshot ...");
-        screenshotItem.setMnemonic(KeyEvent.VK_N);
-        screenshotItem.setActionCommand(SCREENSHOT);
-        //screenshotItem.addActionListener(this);
-        screenshotItem.setToolTipText("Save a screenshot to file");
-        utilMenu.add(screenshotItem);
-        */
     }
 
     @Override
@@ -236,4 +197,19 @@
         }        
     }
     
+    void setServerConnected(boolean connected) {
+        if (connected) {
+            serverItem = new JMenuItem("Stop AIDA Server");
+            serverItem.setMnemonic(KeyEvent.VK_A);
+            serverItem.setActionCommand(Commands.STOP_AIDA_SERVER);
+            serverItem.setEnabled(true);
+            serverItem.setToolTipText("Stop the running AIDA RMI server");
+        } else {
+            serverItem = new JMenuItem("Start AIDA Server");
+            serverItem.setMnemonic(KeyEvent.VK_A);
+            serverItem.setActionCommand(Commands.START_AIDA_SERVER);
+            serverItem.setEnabled(true);
+            serverItem.setToolTipText("Start AIDA RMI server");
+        }
+    }    
 }

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplication.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplication.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplication.java	Sat Mar  7 16:05:59 2015
@@ -32,13 +32,13 @@
 import javax.swing.filechooser.FileFilter;
 import javax.swing.filechooser.FileNameExtensionFilter;
 
-import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.monitoring.application.DataSourceComboBox.DataSourceItem;
 import org.hps.monitoring.application.LogTable.LogRecordModel;
 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.AIDAServer;
 import org.hps.monitoring.application.util.DialogUtil;
 import org.hps.monitoring.application.util.ErrorHandler;
 import org.hps.monitoring.application.util.EvioFileFilter;
@@ -94,6 +94,8 @@
 
     // Encapsulation of ET connection and event processing.
     EventProcessing processing;
+    
+    AIDAServer server = new AIDAServer("hps-monitoring");
         
     // Filters for opening files.
     static final FileFilter lcioFilter = new FileNameExtensionFilter("LCIO files", "slcio");
@@ -229,7 +231,11 @@
             saveLogTable();
         } else if (Commands.CLEAR_LOG_TABLE.equals(cmd)) {
             getLogRecordModel().clear();
-        }        
+        } else if (Commands.START_AIDA_SERVER.equals(cmd)) {
+            startAIDAServer();
+        } else if (Commands.STOP_AIDA_SERVER.equals(cmd)) {
+            stopAIDAServer();
+        }
     }    
     
     /**
@@ -280,6 +286,10 @@
      * @param configuration The new configuration.
      */
     void loadConfiguration(Configuration configuration) {
+        
+        // HACK: Clear data source combo box for new config.
+        frame.dataSourceComboBox.removeAllItems();
+        
         // Set the Configuration on the ConfigurationModel which will trigger all the PropertyChangelListeners.
         configurationModel.setConfiguration(configuration);
         if (configuration.getFile() != null)
@@ -640,4 +650,28 @@
     void saveLogTable() {
         saveTable(frame.logPanel.logTable);
     }
+    
+    /**
+     * Start the AIDA RMI server.
+     */
+    void startAIDAServer() {
+        boolean started = server.start();
+        frame.menu.setServerConnected(started);
+        if (started) {
+            logger.info("AIDA server started at " + server.getName());
+            DialogUtil.showInfoDialog(frame, "AIDA Server Started", "The AIDA server was started.");
+        } else {
+            DialogUtil.showErrorDialog(frame, "AIDA Server Error", "The AIDA server failed to start.");
+        }
+    }
+    
+    /**
+     * Stop the AIDA server.
+     */
+    void stopAIDAServer() {
+        server.disconnect();
+        frame.menu.setServerConnected(false);
+        logger.info("AIDA server stopped");
+        DialogUtil.showInfoDialog(frame, "AIDA Server Stopped", "The AIDA server was stopped.");
+    }    
 }

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/MonitoringApplicationFrame.java	Sat Mar  7 16:05:59 2015
@@ -30,6 +30,7 @@
     SystemStatusTable systemStatusTable;
     JPanel buttonsPanel;
     TriggerDiagnosticsPanel triggerPanel;
+    MenuBar menu;
     
     JSplitPane mainSplitPane;
     JSplitPane rightSplitPane;
@@ -120,6 +121,7 @@
         
         // Vertical split pane in left panel.
         leftSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, runPanel, tableTabbedPane);
+        leftSplitPane.setResizeWeight(0.5);
         leftPanel.add(leftSplitPane, BorderLayout.CENTER);
                                 
         // Create the right panel.
@@ -146,7 +148,7 @@
         bottomPanel.add(mainSplitPane, BorderLayout.CENTER);
         
         // Create the menu bar.
-        MenuBar menu = new MenuBar(application.configurationModel, application.connectionModel, application);
+        menu = new MenuBar(application.configurationModel, application.connectionModel, application);
         setJMenuBar(menu);
         dataSourceComboBox.addActionListener(menu);
                         

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/model/Configuration.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/model/Configuration.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/model/Configuration.java	Sat Mar  7 16:05:59 2015
@@ -75,7 +75,11 @@
      * @return True if configuration has value for the key.
      */
     boolean hasKey(String key) {
-        return properties.getProperty(key) != null;
+        try {
+            return properties.containsKey(key);
+        } catch (java.lang.NullPointerException e) {
+            return false;
+        }
     }
 
     /**
@@ -164,7 +168,7 @@
      * @param key The properties key.
      * @return True if properties key is valid.
      */
-    private boolean checkKey(String key) {
+    boolean checkKey(String key) {
         return hasKey(key) && properties.getProperty(key) != null;
     }
 

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/model/ConfigurationModel.java	Sat Mar  7 16:05:59 2015
@@ -1,8 +1,6 @@
 package org.hps.monitoring.application.model;
 
 import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.logging.Level;
 
 import org.hps.record.enums.DataSourceType;
@@ -16,8 +14,6 @@
 public final class ConfigurationModel extends AbstractModel {
 
     Configuration configuration;    
-    
-    List<ConfigurationListener> listeners = new ArrayList<ConfigurationListener>();
     
     // Job setting properties.
     public static final String DETECTOR_NAME_PROPERTY = "DetectorName";
@@ -69,22 +65,11 @@
         fireModelChanged();
     }
     
-    public void addConfigurationListener(ConfigurationListener listener) {
-        listeners.add(listener);
-    }
-
     public void setConfiguration(Configuration configuration) {
         this.configuration = configuration;
         fireModelChanged();
-        fireConfigurationChanged();
-    }
-    
-    void fireConfigurationChanged() {        
-        for (ConfigurationListener listener : listeners) {
-            listener.configurationChanged(this);
-        }
-    }
-    
+    }
+     
     public Configuration getConfiguration() {
         return this.configuration;
     }
@@ -423,7 +408,7 @@
     }
 
     public boolean hasValidProperty(String key) {
-        return configuration.hasKey(key) && configuration.get(key) != null;
+        return configuration.checkKey(key);
     }
 
     @Override

Added: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/AIDAServer.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/AIDAServer.java	(added)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/util/AIDAServer.java	Sat Mar  7 16:05:59 2015
@@ -0,0 +1,72 @@
+package org.hps.monitoring.application.util;
+
+import hep.aida.dev.IDevTree;
+import hep.aida.ref.remote.RemoteServer;
+import hep.aida.ref.remote.rmi.RmiRemoteUtils;
+import hep.aida.ref.remote.rmi.server.RmiServerImpl;
+
+import java.net.InetAddress;
+import java.rmi.RemoteException;
+
+import org.lcsim.util.aida.AIDA;
+
+/**
+ * AIDA RMI server wrapper.
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+public class AIDAServer {
+    
+    RmiServerImpl server;
+    String name;
+    boolean connected = false;
+   
+    /**
+     * Class constructor. 
+     * @param name The name of the AIDA server.
+     */
+    public AIDAServer(String name) {
+        this.name = name;
+    }
+
+    /**
+     * Start the remote AIDA server.
+     * @return True if server started successfully; false if an error occurred during initialization.
+     */
+    public boolean start() {
+        RemoteServer treeServer = new RemoteServer((IDevTree) AIDA.defaultInstance().tree());
+        try {
+            server = new RmiServerImpl(treeServer, "/" + name);
+            connected = true;
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+            connected = false;
+        }
+        return connected;
+    }
+    
+    /** 
+     * Close the server down by disconnecting it.
+     */
+    public void disconnect() {
+        server.disconnect();
+        connected = false;
+    }
+    
+    /**
+     * True if connected.
+     * @return True if connected to server.
+     */
+    public boolean connected() {
+        return connected;
+    }    
+    
+    public String getName() {
+        try {
+            return InetAddress.getLocalHost().getCanonicalHostName() + server.getBindName() + ":" + RmiRemoteUtils.port;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}