Author: abearez
Date: Sat Nov 30 15:46:48 2019
New Revision: 1870628

URL: http://svn.apache.org/viewvc?rev=1870628&view=rev
Log:
Add Doughnut chart data series to XDDF

Added:
    
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDoughnutChartData.java
Modified:
    poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/ChartTypes.java
    poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java
    
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/TestNecessaryOOXMLClasses.java

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/ChartTypes.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/ChartTypes.java?rev=1870628&r1=1870627&r2=1870628&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/ChartTypes.java 
(original)
+++ 
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/ChartTypes.java 
Sat Nov 30 15:46:48 2019
@@ -21,6 +21,7 @@ public enum ChartTypes {
     AREA3D,
     BAR,
     BAR3D,
+    DOUGHNUT,
     LINE,
     LINE3D,
     PIE,

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java?rev=1870628&r1=1870627&r2=1870628&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java 
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java 
Sat Nov 30 15:46:48 2019
@@ -65,6 +65,7 @@ import org.openxmlformats.schemas.drawin
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTChartSpace;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTDateAx;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTDoughnutChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTLine3DChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTPie3DChart;
@@ -426,6 +427,11 @@ public abstract class XDDFChart extends
             series.add(new XDDFBar3DChartData(this, barChart, categories, 
values));
         }
 
+        for (int i = 0; i < plotArea.sizeOfDoughnutChartArray(); i++) {
+            CTDoughnutChart doughnutChart = plotArea.getDoughnutChartArray(i);
+            series.add(new XDDFDoughnutChartData(this, doughnutChart));
+        }
+
         for (int i = 0; i < plotArea.sizeOfLineChartArray(); i++) {
             CTLineChart lineChart = plotArea.getLineChartArray(i);
             series.add(new XDDFLineChartData(this, lineChart, categories, 
values));
@@ -465,7 +471,7 @@ public abstract class XDDFChart extends
             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
+        // TODO repeat above code for missing charts: Bubble, OfPie and Stock
 
         seriesCount = series.size();
         return series;
@@ -578,6 +584,8 @@ public abstract class XDDFChart extends
             return new XDDFBarChartData(this, plotArea.addNewBarChart(), 
categories, mapValues);
         case BAR3D:
             return new XDDFBar3DChartData(this, plotArea.addNewBar3DChart(), 
categories, mapValues);
+        case DOUGHNUT:
+            return new XDDFDoughnutChartData(this, 
plotArea.addNewDoughnutChart());
         case LINE:
             return new XDDFLineChartData(this, plotArea.addNewLineChart(), 
categories, mapValues);
         case LINE3D:
@@ -594,7 +602,7 @@ public abstract class XDDFChart extends
             return new XDDFSurfaceChartData(this, 
plotArea.addNewSurfaceChart(), categories, mapValues);
         case SURFACE3D:
             return new XDDFSurface3DChartData(this, 
plotArea.addNewSurface3DChart(), categories, mapValues);
-        // TODO repeat above code for missing charts: Bubble, Doughnut, OfPie 
and Stock
+        // TODO repeat above code for missing charts: Bubble, OfPie and Stock
         default:
             return null;
         }

Added: 
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDoughnutChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDoughnutChartData.java?rev=1870628&view=auto
==============================================================================
--- 
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDoughnutChartData.java
 (added)
+++ 
poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDoughnutChartData.java
 Sat Nov 30 15:46:48 2019
@@ -0,0 +1,172 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You 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 org.apache.poi.xddf.usermodel.chart;
+
+import org.apache.poi.util.Beta;
+import org.apache.poi.util.Internal;
+import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTDoughnutChart;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
+
+@Beta
+public class XDDFDoughnutChartData extends XDDFChartData {
+    private CTDoughnutChart chart;
+
+    @Internal
+    protected XDDFDoughnutChartData(XDDFChart parent, CTDoughnutChart chart) {
+        super(parent);
+        this.chart = chart;
+        for (CTPieSer series : chart.getSerList()) {
+            this.series.add(new Series(series, series.getCat(), 
series.getVal()));
+        }
+    }
+
+    @Internal
+    @Override
+    protected void removeCTSeries(int n) {
+        chart.removeSer(n);
+    }
+
+    @Override
+    public void setVaryColors(Boolean varyColors) {
+        if (varyColors == null) {
+            if (chart.isSetVaryColors()) {
+                chart.unsetVaryColors();
+            }
+        } else {
+            if (chart.isSetVaryColors()) {
+                chart.getVaryColors().setVal(varyColors);
+            } else {
+                chart.addNewVaryColors().setVal(varyColors);
+            }
+        }
+    }
+
+    @Override
+    public XDDFChartData.Series addSeries(XDDFDataSource<?> category,
+            XDDFNumericalDataSource<? extends Number> values) {
+        final int index = this.series.size();
+        final CTPieSer ctSer = this.chart.addNewSer();
+        ctSer.addNewCat();
+        ctSer.addNewVal();
+        ctSer.addNewIdx().setVal(index);
+        ctSer.addNewOrder().setVal(index);
+        final Series added = new Series(ctSer, category, values);
+        this.series.add(added);
+        return added;
+    }
+
+    public class Series extends XDDFChartData.Series {
+        private CTPieSer series;
+
+        protected Series(CTPieSer series, XDDFDataSource<?> category,
+                XDDFNumericalDataSource<? extends Number> values) {
+            super(category, values);
+            this.series = series;
+        }
+
+        protected Series(CTPieSer series, CTAxDataSource category, 
CTNumDataSource values) {
+            super(XDDFDataSourcesFactory.fromDataSource(category), 
XDDFDataSourcesFactory.fromDataSource(values));
+            this.series = series;
+        }
+
+        @Override
+        protected CTSerTx getSeriesText() {
+            if (series.isSetTx()) {
+                return series.getTx();
+            } else {
+                return series.addNewTx();
+            }
+        }
+
+        @Override
+        public void setShowLeaderLines(boolean showLeaderLines) {
+            if (!series.isSetDLbls()) {
+                series.addNewDLbls();
+            }
+            if (series.getDLbls().isSetShowLeaderLines()) {
+                series.getDLbls().getShowLeaderLines().setVal(showLeaderLines);
+            } else {
+                
series.getDLbls().addNewShowLeaderLines().setVal(showLeaderLines);
+            }
+        }
+
+        @Override
+        public XDDFShapeProperties getShapeProperties() {
+            if (series.isSetSpPr()) {
+                return new XDDFShapeProperties(series.getSpPr());
+            } else {
+                return null;
+            }
+        }
+
+        @Override
+        public void setShapeProperties(XDDFShapeProperties properties) {
+            if (properties == null) {
+                if (series.isSetSpPr()) {
+                    series.unsetSpPr();
+                }
+            } else {
+                if (series.isSetSpPr()) {
+                    series.setSpPr(properties.getXmlObject());
+                } else {
+                    series.addNewSpPr().set(properties.getXmlObject());
+                }
+            }
+        }
+
+        public long getExplosion() {
+            if (series.isSetExplosion()) {
+                return series.getExplosion().getVal();
+            } else {
+                return 0;
+            }
+        }
+
+        public void setExplosion(long explosion) {
+            if (series.isSetExplosion()) {
+                series.getExplosion().setVal(explosion);
+            } else {
+                series.addNewExplosion().setVal(explosion);
+            }
+        }
+
+        @Override
+        protected CTAxDataSource getAxDS() {
+            return series.getCat();
+        }
+
+        @Override
+        protected CTNumDataSource getNumDS() {
+            return series.getVal();
+        }
+
+        @Override
+        protected void setIndex(long val) {
+            series.getIdx().setVal(val);
+        }
+
+        @Override
+        protected void setOrder(long val) {
+            series.getOrder().setVal(val);
+        }
+    }
+}

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/TestNecessaryOOXMLClasses.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/TestNecessaryOOXMLClasses.java?rev=1870628&r1=1870627&r2=1870628&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/TestNecessaryOOXMLClasses.java
 (original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/TestNecessaryOOXMLClasses.java
 Sat Nov 30 15:46:48 2019
@@ -97,6 +97,8 @@ public class TestNecessaryOOXMLClasses {
         Assert.assertNotNull(ctArea3DChart);
         CTSurfaceChart ctSurfaceChart = CTSurfaceChart.Factory.newInstance();
         Assert.assertNotNull(ctSurfaceChart);
+        CTDoughnutChart ctDoughnutChart = 
CTDoughnutChart.Factory.newInstance();
+        Assert.assertNotNull(ctDoughnutChart);
         CTBar3DChart ctBar3DChart = CTBar3DChart.Factory.newInstance();
         Assert.assertNotNull(ctBar3DChart);
         CTLine3DChart ctLine3DChart = CTLine3DChart.Factory.newInstance();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org
For additional commands, e-mail: commits-h...@poi.apache.org

Reply via email to