Print

Print


Author: [log in to unmask]
Date: Sat Mar 14 12:26:02 2015
New Revision: 2450

Log:
Add global plotter registry for use in monitoring app.

Added:
    java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/PlotterRegistry.java
Modified:
    java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/MonitoringPlotFactory.java

Modified: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/MonitoringPlotFactory.java
 =============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/MonitoringPlotFactory.java	(original)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/MonitoringPlotFactory.java	Sat Mar 14 12:26:02 2015
@@ -22,7 +22,9 @@
  * by the MonitoringApplication before any calls to AIDA are made from Drivers.
  */
 public class MonitoringPlotFactory extends PlotterFactory {
-
+    
+    static PlotterRegistry plotters = new PlotterRegistry();
+    
     // The name of the factory which will be used in naming tabs in the monitoring app.
     String name = null;
 
@@ -33,6 +35,8 @@
     private static JTabbedPane rootPane = null;
 
     private static PlotterRegionListener regionListener;
+    
+    int tabIndex;
 
     public static void setPlotterRegionListener(PlotterRegionListener regionListener) {
         MonitoringPlotFactory.regionListener = regionListener;
@@ -66,7 +70,8 @@
         // FIXME: Hack to disregard call from an AIDA related class.
         if (!(new RuntimeException()).getStackTrace()[2].getClassName().equals("hep.aida.ref.plotter.style.registry.StyleStoreXMLReader")) {
             rootPane.addTab(name, tabs);
-            rootPane.setTabComponentAt(rootPane.getTabCount() - 1, new JLabel(name));
+            tabIndex = rootPane.getTabCount() - 1;
+            rootPane.setTabComponentAt(tabIndex, new JLabel(name));
         }
     }
 
@@ -98,10 +103,16 @@
     }
 
     private void setupPlotterTab(String plotterName, IPlotter plotter) {
+        
+        // Setup the plotter's GUI pane and tab.
         JPanel plotterPanel = new JPanel(new BorderLayout());
         plotterPanel.add(PlotterUtilities.componentForPlotter(plotter), BorderLayout.CENTER);
         tabs.addTab(plotterName, plotterPanel);
-        tabs.setTabComponentAt(tabs.getTabCount() - 1, new JLabel(plotterName));
+        int plotterIndex = tabs.getTabCount() - 1;
+        tabs.setTabComponentAt(plotterIndex, new JLabel(plotterName));
+        
+        // Register plotter globally with its tab indices.
+        plotters.register(plotter, tabIndex, plotterIndex);
     }
 
     private void addChart(JFreeChart chart) {
@@ -143,5 +154,13 @@
         stripChart.getLegend().setVisible(false); /* Legend turned off for now. */
         addChart(stripChart);
         return stripChart;
+    }       
+    
+    /**
+     * 
+     * @return
+     */
+    public static PlotterRegistry getPlotterRegistry() {
+        return plotters;
     }
-}
+}

Added: java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/PlotterRegistry.java
 =============================================================================
--- java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/PlotterRegistry.java	(added)
+++ java/trunk/monitoring-util/src/main/java/org/hps/monitoring/plotting/PlotterRegistry.java	Sat Mar 14 12:26:02 2015
@@ -0,0 +1,51 @@
+/**
+ * 
+ */
+package org.hps.monitoring.plotting;
+
+import hep.aida.IPlotter;
+import hep.aida.IPlotterRegion;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * @author Jeremy McCormick <[log in to unmask]>
+ *
+ */
+public class PlotterRegistry {
+
+    Set<IPlotter> plotters = new HashSet<IPlotter>();    
+    HashMap<IPlotter, int[]> tabMap = new HashMap<IPlotter, int[]>();
+    
+    public void clear() {
+        plotters.clear();
+    }
+    
+    public IPlotter find(IPlotterRegion region) {
+        for (IPlotter plotter : plotters) {
+            for (int i = 0; i < plotter.numberOfRegions(); i++) {
+                if (plotter.region(i) == region) {
+                    return plotter;
+                }
+            }
+        }
+        return null;
+    }
+    
+    public void register(IPlotter plotter, int index1, int index2) {
+        tabMap.put(plotter, new int[] { index1, index2 });
+    }
+    
+    public IPlotter find(int index1, int index2) {
+        for (Entry<IPlotter, int[]> entry : tabMap.entrySet()) {
+            int[] indices = entry.getValue();
+            if (indices[0] == index1 && indices[1] == index2) {
+                return entry.getKey();
+            }
+        }
+        return null;
+    }
+}