LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  March 2015

HPS-SVN March 2015

Subject:

r2414 - /java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Thu, 12 Mar 2015 20:26:07 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (525 lines)

Author: [log in to unmask]
Date: Thu Mar 12 13:26:04 2015
New Revision: 2414

Log:
First working version of conditions data display in monitoring (dev branch).  HPSJAVA-445

Added:
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTable.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTableModel.java
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsPanel.java
Modified:
    java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.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

Added: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTable.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTable.java	(added)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTable.java	Thu Mar 12 13:26:04 2015
@@ -0,0 +1,98 @@
+/**
+ * 
+ */
+package org.hps.monitoring.application;
+
+import javax.swing.JTable;
+import javax.swing.table.AbstractTableModel;
+
+import org.hps.conditions.api.ConditionsObject;
+import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.database.DatabaseConditionsManager;
+import org.hps.conditions.database.TableMetaData;
+
+/**
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+public class ConditionsCollectionTable extends JTable {
+    
+    static class ConditionsTableModel extends AbstractTableModel {
+        
+        ConditionsObjectCollection<?> collection;
+        int columnCount;
+        int rowCount;
+        String[] columnNames;
+        DatabaseConditionsManager manager;
+        
+        ConditionsTableModel(DatabaseConditionsManager manager) {
+            this.manager = manager;
+        }
+        
+        void setTableName(String tableName) {
+            TableMetaData tableInfo = manager.findTableMetaData(tableName);
+            ConditionsObjectCollection<?> collection = 
+                    manager.getCachedConditions(tableInfo.getCollectionClass(), tableName).getCachedData();
+            setCollection(collection);
+        }
+        
+        void setCollection(ConditionsObjectCollection<?> collection) {        
+             
+            // Set collection data.
+            this.collection = collection;    
+            rowCount = this.collection.size();
+            
+            System.out.println(collection.getConditionsRecord().getTableName() + " has size " + collection.size() );
+            
+            // Set column names and count from table meta data.
+            TableMetaData tableInfo = manager.findTableMetaData(collection.getConditionsRecord().getTableName());                        
+            setupColumns(tableInfo);
+            
+            System.out.println("firing table changes");           
+            
+            fireTableStructureChanged();
+        }
+
+        private void setupColumns(TableMetaData tableInfo) {
+            
+            int fieldNameCount = tableInfo.getFieldNames().length;
+            columnCount = fieldNameCount + 1;
+            columnNames = new String[columnCount];
+            columnNames[0] = "id";            
+            for (int i = 0; i < fieldNameCount; i++) {
+                columnNames[i + 1] = tableInfo.getFieldNames()[i];
+                System.out.println("column " + (i + 1) + " = " + tableInfo.getFieldNames()[i]);
+            }
+            
+            System.out.println("column count set to " + columnCount);
+        }
+
+        @Override
+        public int getRowCount() {
+            System.out.println("getRowCount - " + rowCount);
+            return rowCount;
+        }
+
+        @Override
+        public int getColumnCount() {
+            return columnCount;
+        }
+        
+        @Override
+        public String getColumnName(int columnIndex) {
+            return columnNames[columnIndex];           
+        }
+
+        @Override
+        public Object getValueAt(int rowIndex, int columnIndex) {
+            System.out.println("getValueAt - " + rowIndex + " " + columnIndex);
+            ConditionsObject object = collection.get(rowIndex);
+            if (columnIndex == 0) {
+                System.out.println("  row id = " + object.getRowId());
+                return object.getRowId();
+            } else {
+                System.out.println("  " + columnNames[columnIndex] + " = " + object.getFieldValue(columnNames[columnIndex]));
+                return object.getFieldValue(columnNames[columnIndex]);
+            }           
+        }        
+    }    
+}

Added: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTableModel.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTableModel.java	(added)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsCollectionTableModel.java	Thu Mar 12 13:26:04 2015
@@ -0,0 +1,73 @@
+package org.hps.monitoring.application;
+
+import javax.swing.table.AbstractTableModel;
+
+import org.hps.conditions.api.ConditionsObject;
+import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.database.DatabaseConditionsManager;
+import org.hps.conditions.database.TableMetaData;
+
+/**
+ * 
+ * @author Jeremy McCormick <[log in to unmask]>
+ *
+ */
+class ConditionsCollectionTableModel extends AbstractTableModel {
+
+    ConditionsObjectCollection<?> collection;
+    int columnCount;
+    int rowCount;
+    String[] columnNames;
+    DatabaseConditionsManager manager;
+
+    ConditionsCollectionTableModel(DatabaseConditionsManager manager, ConditionsObjectCollection<?> collection) {
+        
+        // Set collection data.
+        this.collection = collection;
+        rowCount = this.collection.size();
+        
+        String tableName = collection.getConditionsRecord().getTableName();                
+        TableMetaData tableInfo = manager.findTableMetaData(tableName);
+
+        // Set column names and count from table meta data.
+        setupColumns(tableInfo);
+    }
+
+    private void setupColumns(TableMetaData tableInfo) {
+        int fieldNameCount = tableInfo.getFieldNames().length;
+        columnCount = fieldNameCount + 1;
+        columnNames = new String[columnCount];
+        columnNames[0] = "id";
+        for (int i = 0; i < fieldNameCount; i++) {
+            columnNames[i + 1] = tableInfo.getFieldNames()[i];
+            System.out.println("column " + (i + 1) + " = " + tableInfo.getFieldNames()[i]);
+        }
+
+        System.out.println("column count set to " + columnCount);
+    }
+
+    @Override
+    public int getRowCount() {
+        return rowCount;
+    }
+
+    @Override
+    public int getColumnCount() {
+        return columnCount;
+    }
+
+    @Override
+    public String getColumnName(int columnIndex) {
+        return columnNames[columnIndex];
+    }
+
+    @Override
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        ConditionsObject object = collection.get(rowIndex);
+        if (columnIndex == 0) {
+            return object.getRowId();
+        } else {
+            return object.getFieldValue(columnNames[columnIndex]);
+        }
+    }
+}

Added: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsPanel.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsPanel.java	(added)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/ConditionsPanel.java	Thu Mar 12 13:26:04 2015
@@ -0,0 +1,91 @@
+/**
+ * 
+ */
+package org.hps.monitoring.application;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.table.DefaultTableModel;
+
+import org.hps.conditions.api.ConditionsObjectCollection;
+import org.hps.conditions.api.ConditionsRecord;
+import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
+import org.hps.conditions.database.DatabaseConditionsManager;
+import org.lcsim.conditions.ConditionsEvent;
+import org.lcsim.conditions.ConditionsListener;
+
+/**
+ * @author Jeremy McCormick <[log in to unmask]>
+ *
+ */
+public class ConditionsPanel extends JPanel {
+    
+    JList<String> conditionsList = new JList<String>();
+    JTable conditionsTable = new ConditionsCollectionTable();
+    Map<String, ConditionsCollectionTableModel> tableModels;
+    
+    ConditionsPanel() {
+        super(new BorderLayout());
+        
+        conditionsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        conditionsList.addListSelectionListener(new ListSelectionListener() {
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                String tableName = (String) conditionsList.getSelectedValue();
+                conditionsTable.setModel(tableModels.get(tableName));
+                conditionsTable.revalidate();
+            }            
+        });
+        
+        //conditionsList.setPreferredSize(new Dimension(150, 400));                
+        JScrollPane pane = new JScrollPane(conditionsTable);
+        conditionsTable.setModel(new DefaultTableModel());
+        //conditionsTable.setPreferredSize(new Dimension(400, 400));
+        //pane.setPreferredSize(new Dimension(300, 400));
+        
+        add(conditionsList, BorderLayout.WEST);
+        add(pane, BorderLayout.EAST);
+    }
+    
+    class ConditionsPanelListener implements ConditionsListener {
+
+        @Override
+        public void conditionsChanged(ConditionsEvent event) {
+
+            DatabaseConditionsManager manager = (DatabaseConditionsManager) event.getConditionsManager();
+            
+            tableModels = new LinkedHashMap<String, ConditionsCollectionTableModel>();            
+                         
+            // Set list of table names.
+            ConditionsRecordCollection records = 
+                    manager.getCachedConditions(ConditionsRecordCollection.class, "conditions").getCachedData();
+            records.sortByKey();
+            conditionsList.removeAll();
+            Set<String> tableNames = new LinkedHashSet<String>();
+            for (ConditionsRecord record : records) {                
+                tableNames.add(record.getTableName());
+            }            
+            conditionsList.setListData(tableNames.toArray(new String[] {}));
+            
+            // Create list of table models.            
+            for (String tableName : tableNames) {
+                ConditionsObjectCollection<?> collection = manager.getCachedConditions(
+                                manager.findTableMetaData(tableName).getCollectionClass(), 
+                                tableName).getCachedData();
+                tableModels.put(tableName, new ConditionsCollectionTableModel(manager, collection));
+            }
+        }
+    }
+}

Modified: java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java
 =============================================================================
--- java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java	(original)
+++ java/branches/monitoring-app-dev/src/main/java/org/hps/monitoring/application/EventProcessing.java	Thu Mar 12 13:26:04 2015
@@ -26,6 +26,7 @@
 import org.hps.record.evio.EvioDetectorConditionsProcessor;
 import org.jlab.coda.et.exception.EtClosedException;
 import org.jlab.coda.et.exception.EtException;
+import org.lcsim.conditions.ConditionsListener;
 import org.lcsim.conditions.ConditionsManager;
 import org.lcsim.conditions.ConditionsReader;
 import org.lcsim.util.Driver;
@@ -43,6 +44,7 @@
     SessionState sessionState;
     List<CompositeRecordProcessor> processors;
     List<Driver> drivers;
+    List<ConditionsListener> conditionsListeners;
     
     /**
      * This class is used to organize the objects for an event processing session.
@@ -66,12 +68,14 @@
     EventProcessing(
             MonitoringApplication application, 
             List<CompositeRecordProcessor> processors,
-            List<Driver> drivers) {
+            List<Driver> drivers,
+            List<ConditionsListener> conditionsListeners) {
         this.application = application;
         this.sessionState = new SessionState();        
         this.logger = MonitoringApplication.logger;
         this.processors = processors;
         this.drivers = drivers;
+        this.conditionsListeners = conditionsListeners;
     }
     
     /**
@@ -95,6 +99,13 @@
         try {
             // Create and the job manager.  The conditions manager is instantiated from this call but not configured.
             sessionState.jobManager = new JobManager();
+            
+            // Add conditions listeners after new database conditions manager is initialized from job manager.
+            DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
+            for (ConditionsListener conditionsListener : conditionsListeners) {
+                logger.config("adding conditions listener " + conditionsListener.getClass().getName());
+                conditionsManager.addConditionsListener(conditionsListener);
+            }
             
             if (configurationModel.hasValidProperty(ConfigurationModel.DETECTOR_ALIAS_PROPERTY)) {
                 // Set a detector alias.                
@@ -125,7 +136,6 @@
             if (configurationModel.hasValidProperty(ConfigurationModel.USER_RUN_NUMBER_PROPERTY)) {
                 int userRunNumber = configurationModel.getUserRunNumber();
                 String detectorName = configurationModel.getDetectorName();
-                DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
                 logger.config("setting user run number " + userRunNumber + " with detector " + detectorName);
                 conditionsManager.setDetector(configurationModel.getDetectorName(), userRunNumber);
                 if (configurationModel.hasPropertyKey(ConfigurationModel.FREEZE_CONDITIONS_PROPERTY)) {
@@ -439,7 +449,7 @@
      * Create a connection to an ET system using current parameters from the GUI. If successful, the
      * application's ConnectionStatus is changed to CONNECTED.
      */
-    void createEtConnection() {
+    synchronized void createEtConnection() {
         // Setup connection to ET system.
         sessionState.connection = EtSystemUtil.createEtConnection(application.configurationModel);
 

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	Thu Mar 12 13:26:04 2015
@@ -55,6 +55,7 @@
 import org.hps.monitoring.subsys.SystemStatusRegistry;
 import org.hps.record.composite.CompositeRecordProcessor;
 import org.hps.record.enums.DataSourceType;
+import org.lcsim.conditions.ConditionsListener;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
 import org.lcsim.util.log.DefaultLogFormatter;
@@ -82,10 +83,10 @@
     PrintStream sysErr = System.err;
     
     // Application error handling.
-    final ErrorHandler errorHandler;
+    ErrorHandler errorHandler;
    
     // The main GUI components inside a JFrame.
-    final MonitoringApplicationFrame frame;    
+    MonitoringApplicationFrame frame;    
     
     // The primary data models.
     final RunModel runModel = new RunModel();
@@ -156,35 +157,46 @@
      * @param configuration The Configuration object containing application settings.
      */
     MonitoringApplication(Configuration configuration) {
-                
-        // Setup the main GUI component.
-        frame = new MonitoringApplicationFrame(this);
-        
-        // Setup the error handler.
-        errorHandler = new ErrorHandler(frame, logger);
+        
+        try {
+        
+            // Setup the main GUI component.
+            frame = new MonitoringApplicationFrame(this);
+        
+            // Setup the error handler.
+            errorHandler = new ErrorHandler(frame, logger);
                        
-        // Add this class as a listener on the configuration model.
-        configurationModel.addPropertyChangeListener(this);
-        
-        // Setup the logger.
-        setupLogger();
+            // Add this class as a listener on the configuration model.
+            configurationModel.addPropertyChangeListener(this);
+        
+            // Setup the logger.
+            setupLogger();
                
-        // Setup AIDA plotting and connect it to the GUI.
-        setupAida();
-        
-        // Set the configuration.
-        if (configuration != null) {
-            // There was a user specified configuration.
-            this.configuration = configuration;
-        } else {
-            // Use the default configuration.
-            this.configuration = new Configuration(DEFAULT_CONFIGURATION);
-        }
+            // Setup AIDA plotting and connect it to the GUI.
+            setupAida();
+        
+            // Set the configuration.
+            if (configuration != null) {
+                // There was a user specified configuration.
+                this.configuration = configuration;
+            } else {
+                // Use the default configuration.
+                this.configuration = new Configuration(DEFAULT_CONFIGURATION);
+            }
                                       
-        // Load the configuration.
-        loadConfiguration(this.configuration);
-                
-        logger.info("application initialized successfully");
+            // Load the configuration.
+            loadConfiguration(this.configuration);
+        
+            frame.setEnabled(true);
+        
+            logger.info("application initialized successfully");
+        
+        } catch (Exception e) {
+            System.err.println("MonitoringApplication failed to initialize without errors!");
+            DialogUtil.showErrorDialog(null, "Error Starting Monitoring Application", "Monitoring application failed to initialize.");
+            e.printStackTrace();
+            System.exit(1);
+        }
     }
     
     /**
@@ -232,6 +244,7 @@
         if (Commands.CONNECT.equals(command)) {
             startSession();
         } else if (Commands.DISCONNECT.equals(command)) {
+            // TODO: Start this on new thread.
             processing.stop();
         } else if (Commands.SAVE_PLOTS.equals(command)) {
             savePlots();
@@ -401,11 +414,16 @@
             List<CompositeRecordProcessor> processors = new ArrayList<CompositeRecordProcessor>();
             processors.add(frame.runPanel.new RunPanelUpdater());
             
+            // Add Driver to update the trigger diagnostics tables.
             List<Driver> drivers = new ArrayList<Driver>();
             drivers.add(frame.triggerPanel.new TriggerDiagnosticGUIDriver());
-            
-            // Initialize event processing with the list of processors and reference to the application.
-            processing = new EventProcessing(this, processors, drivers);
+
+            // Add listener to push conditions changes to conditions panel.
+            List<ConditionsListener> conditionsListeners = new ArrayList<ConditionsListener>();
+            conditionsListeners.add(frame.conditionsPanel.new ConditionsPanelListener());
+            
+            // Instantiate the event processing wrapper.
+            processing = new EventProcessing(this, processors, drivers, conditionsListeners);
             
             // Connect to the ET system, if applicable.
             processing.connect();

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	Thu Mar 12 13:26:04 2015
@@ -30,6 +30,7 @@
     SystemStatusTable systemStatusTable;
     JPanel buttonsPanel;
     TriggerDiagnosticsPanel triggerPanel;
+    ConditionsPanel conditionsPanel;
     MenuBar menu; 
     
     JSplitPane mainSplitPane;
@@ -54,6 +55,9 @@
      */
     public MonitoringApplicationFrame(
             MonitoringApplication application) {
+        
+        // Disable interaction until specifically enabled externally after initialization.
+        setEnabled(false);
                 
         // Create the content panel.
         JPanel contentPanel = new JPanel();
@@ -118,6 +122,10 @@
         // Add the trigger diagnostics tables.
         triggerPanel = new TriggerDiagnosticsPanel();
         tableTabbedPane.addTab("Trigger Diagnostics", triggerPanel);
+        
+        // Add the conditions panel.
+        conditionsPanel = new ConditionsPanel();
+        tableTabbedPane.addTab("Detector Conditions", conditionsPanel);
         
         // Vertical split pane in left panel.
         leftSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, runPanel, tableTabbedPane);

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use