changeset 2481:bcf729e138c8

[Byteman] Refactor GraphDataset. Reviewed-by: aazores Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-October/021298.html
author Severin Gehwolf <sgehwolf@redhat.com>
date Mon, 17 Oct 2016 20:50:14 +0200
parents e2e5b4797c2a
children e8cf2946b207
files vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDataset.java vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/SwingVmBytemanView.java vm-byteman/client-swing/src/test/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDatasetTest.java
diffstat 3 files changed, 39 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDataset.java	Tue Sep 20 19:07:51 2016 +0200
+++ b/vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDataset.java	Mon Oct 17 20:50:14 2016 +0200
@@ -98,10 +98,11 @@
     String ykey;
     CoordinateType xtype;
     CoordinateType ytype;
-    private static CategoryDataset emptyCategoryDataset = new DefaultCategoryDataset();
-    private static PieDataset emptyPieDataset = new DefaultPieDataset();
-    private static XYDataset emptyXYDataset = new XYSeriesCollection();
-    private static Number frequencyUnit = Long.valueOf(1);
+    private static final CategoryDataset emptyCategoryDataset = new DefaultCategoryDataset();
+    private static final PieDataset emptyPieDataset = new DefaultPieDataset();
+    private static final XYDataset emptyXYDataset = new XYSeriesCollection();
+    private static final CategoryTimePlotData emptyCategoryTimePlotData = new CategoryTimePlotData(emptyXYDataset, new String[] {});
+    private static final Number frequencyUnit = Long.valueOf(1);
 
     public GraphDataset(List<BytemanMetric> metrics, String xkey, String ykey, String filter, String value)
     {
@@ -274,10 +275,10 @@
         return pieDataset;
     }
 
-    public XYDataset getCategoryTimePlot(String[][] symbolsReturn)
+    public CategoryTimePlotData getCategoryTimePlot()
     {
         if (xtype != CoordinateType.TIME || ytype != CoordinateType.CATEGORY) {
-            return emptyXYDataset;
+            return emptyCategoryTimePlotData;
         }
 
         // we need to display changing category state over time
@@ -308,12 +309,10 @@
             symbols[value] = key;
         }
 
-        symbolsReturn[0] = symbols;
-
         XYSeriesCollection xycollection = new  XYSeriesCollection();
         xycollection.addSeries(xyseries);
 
-        return xycollection;
+        return new CategoryTimePlotData(xycollection, symbols);
     }
 
     public String getXLabel() {
@@ -398,4 +397,23 @@
         }
         return value;
     }
+    
+    static class CategoryTimePlotData {
+        
+        private final XYDataset dataSet;
+        private final String[] symbols;
+        
+        private CategoryTimePlotData(XYDataset dataSet, String[] yLegend) {
+            this.dataSet = dataSet;
+            this.symbols = yLegend;
+        }
+        
+        XYDataset getXYDataSet() {
+            return dataSet;
+        }
+        
+        String[] getSymbols() {
+            return symbols;
+        }
+    }
 }
\ No newline at end of file
--- a/vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/SwingVmBytemanView.java	Tue Sep 20 19:07:51 2016 +0200
+++ b/vm-byteman/client-swing/src/main/java/com/redhat/thermostat/vm/byteman/client/swing/internal/SwingVmBytemanView.java	Mon Oct 17 20:50:14 2016 +0200
@@ -113,6 +113,7 @@
 import com.redhat.thermostat.common.utils.LoggingUtils;
 import com.redhat.thermostat.shared.locale.LocalizedString;
 import com.redhat.thermostat.shared.locale.Translate;
+import com.redhat.thermostat.vm.byteman.client.swing.internal.GraphDataset.CategoryTimePlotData;
 import com.redhat.thermostat.vm.byteman.client.swing.internal.GraphDataset.CoordinateType;
 import com.redhat.thermostat.vm.byteman.client.swing.internal.PredefinedKeysMapper.MapDirection;
 import com.redhat.thermostat.vm.byteman.common.BytemanMetric;
@@ -957,14 +958,14 @@
                     //
                     // we create a numeric time series plot with a mapping
                     // from numeric values to symbolic keys
-                    String[][] symbolsReturn = new String[1][];
-                    XYDataset xydataset = dataset.getCategoryTimePlot(symbolsReturn);
+                    CategoryTimePlotData categoryData = dataset.getCategoryTimePlot(); 
+                    XYDataset xydataset = categoryData.getXYDataSet();
                     graph = ChartFactory.createXYStepChart(BYTEMAN_CHART_LABEL, xlabel, ylabel,
                                                            xydataset, PlotOrientation.VERTICAL,
                                                            true, true, false);
                     // now we change the range axis of the xyplot to draw symbols in
                     // place of numeric values
-                    graph.getXYPlot().setRangeAxis(0, new SymbolAxis(ykey, symbolsReturn[0]));
+                    graph.getXYPlot().setRangeAxis(0, new SymbolAxis(ykey, categoryData.getSymbols()));
                 } else {
                     // draw a graph of numeric value against time
                     XYDataset xydataset = dataset.getXYDataset();
--- a/vm-byteman/client-swing/src/test/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDatasetTest.java	Tue Sep 20 19:07:51 2016 +0200
+++ b/vm-byteman/client-swing/src/test/java/com/redhat/thermostat/vm/byteman/client/swing/internal/GraphDatasetTest.java	Mon Oct 17 20:50:14 2016 +0200
@@ -48,6 +48,7 @@
 import org.junit.Test;
 
 import com.redhat.thermostat.common.Pair;
+import com.redhat.thermostat.vm.byteman.client.swing.internal.GraphDataset.CategoryTimePlotData;
 import com.redhat.thermostat.vm.byteman.client.swing.internal.GraphDataset.CoordinateType;
 import com.redhat.thermostat.vm.byteman.common.BytemanMetric;
 
@@ -373,18 +374,17 @@
         final List<BytemanMetric> empty = Collections.emptyList();
         // x => marker
         GraphDataset dataset = new GraphDataset(empty, GraphDataset.MARKER_KEY, GraphDataset.TIMESTAMP_KEY, null, null);
-        XYDataset actualDataset = dataset.getCategoryTimePlot(new String[][] { {""} });
-        assertEquals(0, actualDataset.getSeriesCount());
+        CategoryTimePlotData actualDataset = dataset.getCategoryTimePlot();
+        assertEquals(0, actualDataset.getXYDataSet().getSeriesCount());
         
         // y => timestamp
         dataset = new GraphDataset(empty, GraphDataset.TIMESTAMP_KEY, GraphDataset.TIMESTAMP_KEY, null, null);
-        actualDataset = dataset.getCategoryTimePlot(new String[][] { {""} });
-        assertEquals(0, actualDataset.getSeriesCount());
+        actualDataset = dataset.getCategoryTimePlot();
+        assertEquals(0, actualDataset.getXYDataSet().getSeriesCount());
     }
     
     @Test
     public void testCategoryTimePlotBasic() {
-        final String[][] retvals = new String[][] { {""} };
         final String evenMarker = "even_marker";
         final String oddMarker = "odd_marker";
         final int numMetrics = 5;
@@ -413,7 +413,8 @@
             
         });
         GraphDataset dataset = new GraphDataset(mList, GraphDataset.TIMESTAMP_KEY, GraphDataset.MARKER_KEY, null, null);
-        XYDataset actualDataset = dataset.getCategoryTimePlot(retvals);
+        CategoryTimePlotData actualData = dataset.getCategoryTimePlot();
+        XYDataset actualDataset = actualData.getXYDataSet();
         assertEquals("Expected one series, exactly", 1, actualDataset.getSeriesCount());
         assertEquals(5, actualDataset.getItemCount(0));
         for (int i = 0; i < numMetrics; i++) {
@@ -434,7 +435,7 @@
         }
         
         // verify correct return values have been set
-        List<String> retvalList = Arrays.asList(retvals[0]);
+        List<String> retvalList = Arrays.asList(actualData.getSymbols());
         Collections.sort(retvalList);
         assertEquals(evenMarker, retvalList.get(0));
         assertEquals(oddMarker, retvalList.get(1));