From 36196259d70b4344545a029f5dc19e6895355580 Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Wed, 23 Jan 2013 15:13:14 +0100
Subject: [PATCH] bug fix: hundreds of series on plot null pointer exception

---
 .../com/xeiam/xchart/demo/XChartDemo.java     |  4 ++
 .../xeiam/xchart/demo/charts/Example10.java   | 62 +++++++++++++++++++
 .../SeriesColorMarkerLineStyleCycler.java     |  6 +-
 3 files changed, 70 insertions(+), 2 deletions(-)
 create mode 100644 xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example10.java

diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java
index eeb98a18..9a3758d7 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/XChartDemo.java
@@ -30,6 +30,7 @@ import javax.swing.tree.TreeSelectionModel;
 
 import com.xeiam.xchart.XChartPanel;
 import com.xeiam.xchart.demo.charts.Example1;
+import com.xeiam.xchart.demo.charts.Example10;
 import com.xeiam.xchart.demo.charts.Example2;
 import com.xeiam.xchart.demo.charts.Example3;
 import com.xeiam.xchart.demo.charts.Example4;
@@ -158,6 +159,9 @@ public class XChartDemo extends JPanel implements TreeSelectionListener {
     chart = new DefaultMutableTreeNode(new ChartInfo("Example9 - Extensive chart customization", new Example9().getChart()));
     category.add(chart);
 
+    chart = new DefaultMutableTreeNode(new ChartInfo("Example10 - Plots Hundreds of Series on One Plot", new Example10().getChart()));
+    category.add(chart);
+
   }
 
   /**
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example10.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example10.java
new file mode 100644
index 00000000..77704de2
--- /dev/null
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/Example10.java
@@ -0,0 +1,62 @@
+/**
+ * Copyright 2011-2013 Xeiam LLC.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.xeiam.xchart.demo.charts;
+
+import com.xeiam.xchart.Chart;
+import com.xeiam.xchart.Series;
+import com.xeiam.xchart.SeriesColor;
+import com.xeiam.xchart.SeriesLineStyle;
+import com.xeiam.xchart.SeriesMarker;
+import com.xeiam.xchart.SwingWrapper;
+
+/**
+ * Plots Hundreds of Series on One Plot
+ * 
+ * @author timmolter
+ */
+public class Example10 implements ExampleChart {
+
+  public static void main(String[] args) {
+
+    ExampleChart exampleChart = new Example10();
+    Chart chart = exampleChart.getChart();
+    new SwingWrapper(chart).displayChart();
+  }
+
+  @Override
+  public Chart getChart() {
+
+    // Create Chart
+    Chart chart = new Chart(800, 600);
+
+    // Customize Chart
+    chart.setTitle("Example10");
+    chart.setXAxisTitle("X");
+    chart.setYAxisTitle("Y");
+    chart.setLegendVisible(false);
+
+    for (int i = 0; i < 200; i++) {
+      Series series = chart.addSeries("", new double[] { Math.random(), Math.random() }, new double[] { Math.random(), Math.random() });
+      series.setLineColor(SeriesColor.BLUE);
+      series.setLineStyle(SeriesLineStyle.SOLID);
+      series.setMarker(SeriesMarker.CIRCLE);
+      series.setMarkerColor(SeriesColor.BLUE);
+    }
+
+    return chart;
+  }
+
+}
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/misc/SeriesColorMarkerLineStyleCycler.java b/xchart/src/main/java/com/xeiam/xchart/internal/misc/SeriesColorMarkerLineStyleCycler.java
index 1fbed461..15d674a3 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/misc/SeriesColorMarkerLineStyleCycler.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/misc/SeriesColorMarkerLineStyleCycler.java
@@ -62,14 +62,16 @@ public class SeriesColorMarkerLineStyleCycler {
 
     // 2. Marker
     for (SeriesMarker seriesMarker : EnumSet.allOf(SeriesMarker.class)) {
-      if (seriesMarker.getIndex() >= 0) { // skip Marker.NONE
+      if (seriesMarker.getIndex() >= 0) { // skip SeriesMarker.NONE
         seriesMarkerMap.put(seriesMarker.getIndex(), seriesMarker);
       }
     }
 
     // 3. Stroke
     for (SeriesLineStyle seriesLineStyle : EnumSet.allOf(SeriesLineStyle.class)) {
-      seriesLineStyleMap.put(seriesLineStyle.getIndex(), seriesLineStyle);
+      if (seriesLineStyle.getIndex() >= 0) { // skip SeriesLineStyle.NONE
+        seriesLineStyleMap.put(seriesLineStyle.getIndex(), seriesLineStyle);
+      }
     }
   }
 
-- 
GitLab