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;
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));
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;
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:
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;
}
--- /dev/null
+/* ====================================================================
+ 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);
+ }
+ }
+}