]> source.dussan.org Git - poi.git/commitdiff
Clean-up code for more recent chart types
authorAlain Béarez <abearez@apache.org>
Sat, 30 Nov 2019 01:20:20 +0000 (01:20 +0000)
committerAlain Béarez <abearez@apache.org>
Sat, 30 Nov 2019 01:20:20 +0000 (01:20 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1870603 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFArea3DChartData.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFAreaChartData.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFBar3DChartData.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFLine3DChartData.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFPie3DChartData.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFSurface3DChartData.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFSurfaceChartData.java

index fda803f6aaf4b3563b7a9d9984881a2641787e43..1c132a283057e2cadb7cd4bc93194788ad638e9b 100644 (file)
@@ -126,7 +126,7 @@ public class XDDFArea3DChartData extends XDDFChartData {
     @Override
     public XDDFChartData.Series addSeries(XDDFDataSource<?> category,
             XDDFNumericalDataSource<? extends Number> values) {
-        final int index = this.series.size();
+        final long index = this.parent.incrementSeriesCount();
         final CTAreaSer ctSer = this.chart.addNewSer();
         ctSer.addNewCat();
         ctSer.addNewVal();
index 0de052a727f214b9f067c24854587e2ddc5034a2..1d67f106861c42ceae6f83589a5b1ba7abe71069 100644 (file)
@@ -104,7 +104,7 @@ public class XDDFAreaChartData extends XDDFChartData {
     @Override
     public XDDFChartData.Series addSeries(XDDFDataSource<?> category,
             XDDFNumericalDataSource<? extends Number> values) {
-        final int index = this.series.size();
+        final long index = this.parent.incrementSeriesCount();
         final CTAreaSer ctSer = this.chart.addNewSer();
         ctSer.addNewCat();
         ctSer.addNewVal();
index ff4d65f179850a5b2d779ddc2bcc99088e2f4dc5..4adb94c950ba7225a153190c4a3cca7b7b87b688 100644 (file)
@@ -181,7 +181,7 @@ public class XDDFBar3DChartData extends XDDFChartData {
     @Override
     public XDDFChartData.Series addSeries(XDDFDataSource<?> category,
             XDDFNumericalDataSource<? extends Number> values) {
-        final int index = this.series.size();
+        final long index = this.parent.incrementSeriesCount();
         final CTBarSer ctSer = this.chart.addNewSer();
         ctSer.addNewTx();
         ctSer.addNewCat();
index 3e2434618a1a62d888d5d0483996a42cfaf4b334..41feef8f1ae2426e792f959fd1b26b0b183b3aa9 100644 (file)
@@ -380,7 +380,7 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
     }
 
     public XDDFManualLayout getOrAddManualLayout() {
-        return new XDDFManualLayout(chart.getPlotArea());
+        return new XDDFManualLayout(getCTPlotArea());
     }
 
     private long seriesCount = 0;
@@ -390,7 +390,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
 
     public void plot(XDDFChartData data) {
         XSSFSheet sheet = getSheet();
-        for (XDDFChartData.Series series : data.getSeries()) {
+        for (int idx = 0; idx < data.getSeriesCount(); idx++) {
+            XDDFChartData.Series series = data.getSeries(idx);
             series.plot();
             XDDFDataSource<?> categoryDS = series.getCategoryData();
             XDDFNumericalDataSource<? extends Number> valuesDS = series.getValuesData();
@@ -468,7 +469,6 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
             CTSurface3DChart surfaceChart = plotArea.getSurface3DChartArray(i);
             series.add(new XDDFSurface3DChartData(this, surfaceChart, categories, values));
         }
-
         // TODO repeat above code for missing charts: Bubble, Doughnut, OfPie and Stock
         return series;
     }
@@ -496,7 +496,7 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
     }
 
     public XDDFValueAxis createValueAxis(AxisPosition pos) {
-        XDDFValueAxis valueAxis = new XDDFValueAxis(chart.getPlotArea(), pos);
+        XDDFValueAxis valueAxis = new XDDFValueAxis(getCTPlotArea(), pos);
         if (axes.size() == 1) {
             XDDFChartAxis axis = axes.get(0);
             axis.crossAxis(valueAxis);
@@ -513,7 +513,7 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
      * @return series axis with specified position
      */
     public XDDFSeriesAxis createSeriesAxis(AxisPosition pos) {
-        XDDFSeriesAxis seriesAxis = new XDDFSeriesAxis(chart.getPlotArea(), pos);
+        XDDFSeriesAxis seriesAxis = new XDDFSeriesAxis(getCTPlotArea(), pos);
         if (axes.size() == 1) {
             XDDFChartAxis axis = axes.get(0);
             axis.crossAxis(seriesAxis);
@@ -524,7 +524,7 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
     }
 
     public XDDFCategoryAxis createCategoryAxis(AxisPosition pos) {
-        XDDFCategoryAxis categoryAxis = new XDDFCategoryAxis(chart.getPlotArea(), pos);
+        XDDFCategoryAxis categoryAxis = new XDDFCategoryAxis(getCTPlotArea(), pos);
         if (axes.size() == 1) {
             XDDFChartAxis axis = axes.get(0);
             axis.crossAxis(categoryAxis);
@@ -535,7 +535,7 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
     }
 
     public XDDFDateAxis createDateAxis(AxisPosition pos) {
-        XDDFDateAxis dateAxis = new XDDFDateAxis(chart.getPlotArea(), pos);
+        XDDFDateAxis dateAxis = new XDDFDateAxis(getCTPlotArea(), pos);
         if (axes.size() == 1) {
             XDDFChartAxis axis = axes.get(0);
             axis.crossAxis(dateAxis);
@@ -602,23 +602,23 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
     }
 
     private boolean hasAxes() {
-        CTPlotArea ctPlotArea = chart.getPlotArea();
+        CTPlotArea ctPlotArea = getCTPlotArea();
         int totalAxisCount = ctPlotArea.sizeOfValAxArray() + ctPlotArea.sizeOfCatAxArray() + ctPlotArea
             .sizeOfDateAxArray() + ctPlotArea.sizeOfSerAxArray();
         return totalAxisCount > 0;
     }
 
     private void parseAxes() {
-        for (CTCatAx catAx : chart.getPlotArea().getCatAxArray()) {
+        for (CTCatAx catAx : getCTPlotArea().getCatAxArray()) {
             axes.add(new XDDFCategoryAxis(catAx));
         }
-        for (CTDateAx dateAx : chart.getPlotArea().getDateAxArray()) {
+        for (CTDateAx dateAx : getCTPlotArea().getDateAxArray()) {
             axes.add(new XDDFDateAxis(dateAx));
         }
-        for (CTSerAx serAx : chart.getPlotArea().getSerAxArray()) {
+        for (CTSerAx serAx : getCTPlotArea().getSerAxArray()) {
             axes.add(new XDDFSeriesAxis(serAx));
         }
-        for (CTValAx valAx : chart.getPlotArea().getValAxArray()) {
+        for (CTValAx valAx : getCTPlotArea().getValAxArray()) {
             axes.add(new XDDFValueAxis(valAx));
         }
     }
@@ -775,10 +775,11 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
      * @since POI 4.0.0
      */
     private XSSFRow getRow(XSSFSheet sheet, int index) {
-        if (sheet.getRow(index) != null) {
-            return sheet.getRow(index);
-        } else {
+        XSSFRow row = sheet.getRow(index);
+        if (row == null) {
             return sheet.createRow(index);
+        } else {
+            return row;
         }
     }
 
@@ -794,10 +795,11 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
      * @since POI 4.0.0
      */
     private XSSFCell getCell(XSSFRow row, int index) {
-        if (row.getCell(index) != null) {
-            return row.getCell(index);
-        } else {
+        XSSFCell cell = row.getCell(index);
+        if (cell == null) {
             return row.createCell(index);
+        } else {
+            return cell;
         }
     }
 
index 618ac4e91686e85de1f84a34c2df6f9f7d899098..0034862eeb90564f590e4d754c6a355d04365348 100644 (file)
@@ -346,20 +346,26 @@ public abstract class XDDFChartData {
 
         private void fillStringCache(CTStrData cache, int numOfPoints, XDDFDataSource<?> data) {
             cache.setPtArray(null); // unset old values
-            if (data.getPointAt(0) != null) { // assuming no value for first is no values at all
+            int effectiveNumOfPoints = 0;
+            for (int i = 0; i < numOfPoints; ++i) {
+                Object value = data.getPointAt(i);
+                if (value != null) {
+                    CTStrVal ctStrVal = cache.addNewPt();
+                    ctStrVal.setIdx(i);
+                    ctStrVal.setV(value.toString());
+                    effectiveNumOfPoints++;
+                }
+            }
+            if (effectiveNumOfPoints == 0) {
+                if (cache.isSetPtCount()) {
+                    cache.unsetPtCount();
+                }
+            } else {
                 if (cache.isSetPtCount()) {
                     cache.getPtCount().setVal(numOfPoints);
                 } else {
                     cache.addNewPtCount().setVal(numOfPoints);
                 }
-                for (int i = 0; i < numOfPoints; ++i) {
-                    String value = data.getPointAt(i).toString();
-                    if (value != null) {
-                        CTStrVal ctStrVal = cache.addNewPt();
-                        ctStrVal.setIdx(i);
-                        ctStrVal.setV(value);
-                    }
-                }
             }
         }
 
@@ -373,20 +379,24 @@ public abstract class XDDFChartData {
                 cache.setFormatCode(formatCode);
             }
             cache.setPtArray(null); // unset old values
-            if (data.getPointAt(0) != null) { // assuming no value for first is no values at all
+            int effectiveNumOfPoints = 0;
+            for (int i = 0; i < numOfPoints; ++i) {
+                Object value = data.getPointAt(i);
+                if (value != null) {
+                    CTNumVal ctNumVal = cache.addNewPt();
+                    ctNumVal.setIdx(i);
+                    ctNumVal.setV(value.toString());
+                    effectiveNumOfPoints++;
+                }
+            }
+            if (effectiveNumOfPoints == 0) {
+                cache.unsetPtCount();
+            } else {
                 if (cache.isSetPtCount()) {
                     cache.getPtCount().setVal(numOfPoints);
                 } else {
                     cache.addNewPtCount().setVal(numOfPoints);
                 }
-                for (int i = 0; i < numOfPoints; ++i) {
-                    Object value = data.getPointAt(i);
-                    if (value != null) {
-                        CTNumVal ctNumVal = cache.addNewPt();
-                        ctNumVal.setIdx(i);
-                        ctNumVal.setV(value.toString());
-                    }
-                }
             }
         }
     }
index 362ca90985d54ce5f27649dc06a46896d0d9c71f..d744d4d2ed36a176ce44c646ac5e5f7100edb16e 100644 (file)
@@ -117,7 +117,7 @@ public class XDDFLine3DChartData extends XDDFChartData {
     @Override
     public XDDFChartData.Series addSeries(XDDFDataSource<?> category,
             XDDFNumericalDataSource<? extends Number> values) {
-        final int index = this.series.size();
+        final long index = this.parent.incrementSeriesCount();
         final CTLineSer ctSer = this.chart.addNewSer();
         ctSer.addNewCat();
         ctSer.addNewVal();
index 5db479ea8a9660d24ca184c5675221a9180a1ff0..b7a8092adb589371dfc9e26421c5571e1aa1a4d8 100644 (file)
@@ -63,7 +63,7 @@ public class XDDFPie3DChartData extends XDDFChartData {
     @Override
     public XDDFChartData.Series addSeries(XDDFDataSource<?> category,
             XDDFNumericalDataSource<? extends Number> values) {
-        final int index = this.series.size();
+        final long index = this.parent.incrementSeriesCount();
         final CTPieSer ctSer = this.chart.addNewSer();
         ctSer.addNewCat();
         ctSer.addNewVal();
index e4e4559b8093de8ca2c6e6f49f368a2906827e99..819ef1e2a3b9c8292552385bbaa04fc833174c93 100644 (file)
@@ -101,7 +101,7 @@ public class XDDFSurface3DChartData extends XDDFChartData {
     @Override
     public XDDFChartData.Series addSeries(XDDFDataSource<?> category,
             XDDFNumericalDataSource<? extends Number> values) {
-        final int index = this.series.size();
+        final long index = this.parent.incrementSeriesCount();
         final CTSurfaceSer ctSer = this.chart.addNewSer();
         ctSer.addNewCat();
         ctSer.addNewVal();
index 096199d6b3c3ba3d77d0143a3769241d3b5b3e0e..b3e98563f7cbbe0178d8af6424c50eb497a89bd1 100644 (file)
@@ -101,7 +101,7 @@ public class XDDFSurfaceChartData extends XDDFChartData {
     @Override
     public XDDFChartData.Series addSeries(XDDFDataSource<?> category,
             XDDFNumericalDataSource<? extends Number> values) {
-        final int index = this.series.size();
+        final long index = this.parent.incrementSeriesCount();
         final CTSurfaceSer ctSer = this.chart.addNewSer();
         ctSer.addNewCat();
         ctSer.addNewVal();