From 7f59cf2c3f673f4b7e7eeef25a17d6fdfd2ae8c5 Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Mon, 6 Jan 2014 19:17:56 +0100
Subject: [PATCH] improved generics so you can pass series as list<Double> for
 example

---
 .../xchart/standalone/RealtimeAttempt.java      | 14 +++++++-------
 .../main/java/com/xeiam/xchart/CSVExporter.java |  8 ++++----
 .../src/main/java/com/xeiam/xchart/Chart.java   |  4 ++--
 .../src/main/java/com/xeiam/xchart/Series.java  | 17 +++++++++--------
 .../xchart/internal/chartpart/AxisPair.java     |  2 +-
 .../internal/chartpart/PlotContentBarChart.java |  4 ++--
 .../chartpart/PlotContentLineChart.java         |  8 ++++----
 7 files changed, 29 insertions(+), 28 deletions(-)

diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt.java b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt.java
index 884ec792..668fbdb6 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/standalone/RealtimeAttempt.java
@@ -16,7 +16,7 @@
 package com.xeiam.xchart.standalone;
 
 import java.util.ArrayList;
-import java.util.Collection;
+import java.util.List;
 import java.util.Timer;
 import java.util.TimerTask;
 
@@ -77,7 +77,7 @@ public class RealtimeAttempt {
 
   public void buildPanel() {
 
-    Collection<Number> yData = getRandomData(5);
+    List<Double> yData = getRandomData(5);
 
     // Create Chart
     chart = new Chart(500, 400);
@@ -93,13 +93,13 @@ public class RealtimeAttempt {
   public void updateData() {
 
     // Get some new data
-    Collection<Number> newData = getRandomData(1);
+    List<Double> newData = getRandomData(1);
 
     // Replace the existing
-    ArrayList<Number> replacementData = new ArrayList<Number>();
+    List<Double> replacementData = new ArrayList<Double>();
 
     Series oldSeries = (Series) chart.getSeriesMap().values().toArray()[0];
-    Collection<Number> oldData = oldSeries.getYData();
+    List<Double> oldData = (List<Double>) oldSeries.getYData();
     replacementData.addAll(oldData);
 
     replacementData.addAll(newData);
@@ -132,9 +132,9 @@ public class RealtimeAttempt {
     return chartPanel;
   }
 
-  private static Collection<Number> getRandomData(int numPoints) {
+  private static List<Double> getRandomData(int numPoints) {
 
-    ArrayList<Number> data = new ArrayList<Number>();
+    List<Double> data = new ArrayList<Double>();
     for (int i = 0; i < numPoints; i++) {
       data.add(Math.random() * 100);
     }
diff --git a/xchart/src/main/java/com/xeiam/xchart/CSVExporter.java b/xchart/src/main/java/com/xeiam/xchart/CSVExporter.java
index 6e9a366e..4d29b4e9 100644
--- a/xchart/src/main/java/com/xeiam/xchart/CSVExporter.java
+++ b/xchart/src/main/java/com/xeiam/xchart/CSVExporter.java
@@ -82,11 +82,11 @@ public class CSVExporter {
 
       out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newFile), "UTF8"));
       Collection<?> xData = series.getXData();
-      Collection<Number> yData = series.getYData();
-      Collection<Number> errorBarData = series.getErrorBars();
+      Collection<? extends Number> yData = series.getYData();
+      Collection<? extends Number> errorBarData = series.getErrorBars();
       Iterator<?> itrx = xData.iterator();
-      Iterator<Number> itry = yData.iterator();
-      Iterator<Number> itrErrorBar = null;
+      Iterator<? extends Number> itry = yData.iterator();
+      Iterator<? extends Number> itrErrorBar = null;
       if (errorBarData != null) {
         itrErrorBar = errorBarData.iterator();
       }
diff --git a/xchart/src/main/java/com/xeiam/xchart/Chart.java b/xchart/src/main/java/com/xeiam/xchart/Chart.java
index ebac129e..3b250946 100644
--- a/xchart/src/main/java/com/xeiam/xchart/Chart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/Chart.java
@@ -151,7 +151,7 @@ public class Chart {
    * @param yData the Y-Axis data
    * @return A Series object that you can set properties on
    */
-  public Series addSeries(String seriesName, Collection<Number> xData, Collection<Number> yData) {
+  public Series addSeries(String seriesName, Collection<? extends Number> xData, Collection<? extends Number> yData) {
 
     return chartPainter.getAxisPair().addSeries(seriesName, xData, yData, null);
   }
@@ -165,7 +165,7 @@ public class Chart {
    * @param errorBars the error bar data
    * @return A Series object that you can set properties on
    */
-  public Series addSeries(String seriesName, Collection<Number> xData, Collection<Number> yData, Collection<Number> errorBars) {
+  public Series addSeries(String seriesName, Collection<? extends Number> xData, Collection<? extends Number> yData, Collection<? extends Number> errorBars) {
 
     return chartPainter.getAxisPair().addSeries(seriesName, xData, yData, errorBars);
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/Series.java b/xchart/src/main/java/com/xeiam/xchart/Series.java
index 96b01b3c..5748e273 100644
--- a/xchart/src/main/java/com/xeiam/xchart/Series.java
+++ b/xchart/src/main/java/com/xeiam/xchart/Series.java
@@ -39,10 +39,10 @@ public class Series {
   private Collection<?> xData;
   private AxisType xAxisType;
 
-  private Collection<Number> yData;
+  private Collection<? extends Number> yData;
   private AxisType yAxisType;
 
-  private Collection<Number> errorBars;
+  private Collection<? extends Number> errorBars;
 
   /** the minimum value of axis range */
   private BigDecimal xMin;
@@ -79,7 +79,8 @@ public class Series {
    * @param errorBars
    * @param seriesColorMarkerLineStyle
    */
-  public Series(String name, Collection<?> xData, AxisType xAxisType, Collection<Number> yData, AxisType yAxisType, Collection<Number> errorBars, SeriesColorMarkerLineStyle seriesColorMarkerLineStyle) {
+  public Series(String name, Collection<?> xData, AxisType xAxisType, Collection<? extends Number> yData, AxisType yAxisType, Collection<? extends Number> errorBars,
+      SeriesColorMarkerLineStyle seriesColorMarkerLineStyle) {
 
     if (name == null || name.length() < 1) {
       throw new IllegalArgumentException("Series name cannot be null or zero-length!!!");
@@ -147,13 +148,13 @@ public class Series {
    * @param data
    * @return
    */
-  private BigDecimal[] findMinMaxWithErrorBars(Collection<Number> data, Collection<Number> errorBars) {
+  private BigDecimal[] findMinMaxWithErrorBars(Collection<? extends Number> data, Collection<? extends Number> errorBars) {
 
     BigDecimal min = null;
     BigDecimal max = null;
 
-    Iterator<Number> itr = data.iterator();
-    Iterator<Number> ebItr = errorBars.iterator();
+    Iterator<? extends Number> itr = data.iterator();
+    Iterator<? extends Number> ebItr = errorBars.iterator();
     while (itr.hasNext()) {
       BigDecimal bigDecimal = new BigDecimal(itr.next().doubleValue());
       BigDecimal eb = new BigDecimal(ebItr.next().doubleValue());
@@ -249,12 +250,12 @@ public class Series {
     return xData;
   }
 
-  public Collection<Number> getYData() {
+  public Collection<? extends Number> getYData() {
 
     return yData;
   }
 
-  public Collection<Number> getErrorBars() {
+  public Collection<? extends Number> getErrorBars() {
 
     return errorBars;
   }
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java
index f062b68c..99535e46 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisPair.java
@@ -62,7 +62,7 @@ public class AxisPair implements ChartPart {
    * @param xData
    * @param yData
    */
-  public <T> Series addSeries(String seriesName, Collection<T> xData, Collection<Number> yData, Collection<Number> errorBars) {
+  public <T> Series addSeries(String seriesName, Collection<T> xData, Collection<? extends Number> yData, Collection<? extends Number> errorBars) {
 
     // Sanity checks
     if (seriesName == null) {
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java
index dd4961b2..acd946c2 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentBarChart.java
@@ -74,7 +74,7 @@ public class PlotContentBarChart extends PlotContent {
       // data points
       Collection<?> xData = series.getXData();
 
-      Collection<Number> yData = series.getYData();
+      Collection<? extends Number> yData = series.getYData();
       BigDecimal yMin = getChartPainter().getAxisPair().getyAxis().getMin();
       BigDecimal yMax = getChartPainter().getAxisPair().getyAxis().getMax();
 
@@ -121,7 +121,7 @@ public class PlotContentBarChart extends PlotContent {
       // System.out.println(yMax);
 
       Iterator<?> categoryItr = categories.iterator();
-      Iterator<Number> yItr = yData.iterator();
+      Iterator<? extends Number> yItr = yData.iterator();
 
       int barCounter = 0;
       while (categoryItr.hasNext()) {
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java
index 0f538856..33b41523 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/PlotContentLineChart.java
@@ -65,7 +65,7 @@ public class PlotContentLineChart extends PlotContent {
       BigDecimal xMin = getChartPainter().getAxisPair().getxAxis().getMin();
       BigDecimal xMax = getChartPainter().getAxisPair().getxAxis().getMax();
 
-      Collection<Number> yData = series.getYData();
+      Collection<? extends Number> yData = series.getYData();
       BigDecimal yMin = getChartPainter().getAxisPair().getyAxis().getMin();
       BigDecimal yMax = getChartPainter().getAxisPair().getyAxis().getMax();
 
@@ -92,14 +92,14 @@ public class PlotContentLineChart extends PlotContent {
         yMin = new BigDecimal(Math.log10(yMin.doubleValue()));
         yMax = new BigDecimal(Math.log10(yMax.doubleValue()));
       }
-      Collection<Number> errorBars = series.getErrorBars();
+      Collection<? extends Number> errorBars = series.getErrorBars();
 
       double previousX = Integer.MIN_VALUE;
       double previousY = Integer.MIN_VALUE;
 
       Iterator<?> xItr = xData.iterator();
-      Iterator<Number> yItr = yData.iterator();
-      Iterator<Number> ebItr = null;
+      Iterator<? extends Number> yItr = yData.iterator();
+      Iterator<? extends Number> ebItr = null;
       if (errorBars != null) {
         ebItr = errorBars.iterator();
       }
-- 
GitLab