mirror of https://github.com/apache/poi.git
Add Doughnut chart data series to XDDF
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1870628 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
3fbdd25608
commit
4f8aeb705e
|
@ -21,6 +21,7 @@ public enum ChartTypes {
|
||||||
AREA3D,
|
AREA3D,
|
||||||
BAR,
|
BAR,
|
||||||
BAR3D,
|
BAR3D,
|
||||||
|
DOUGHNUT,
|
||||||
LINE,
|
LINE,
|
||||||
LINE3D,
|
LINE3D,
|
||||||
PIE,
|
PIE,
|
||||||
|
|
|
@ -65,6 +65,7 @@ import org.openxmlformats.schemas.drawingml.x2006.chart.CTCatAx;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
|
import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTChartSpace;
|
import org.openxmlformats.schemas.drawingml.x2006.chart.CTChartSpace;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTDateAx;
|
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.CTLine3DChart;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart;
|
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart;
|
||||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPie3DChart;
|
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPie3DChart;
|
||||||
|
@ -426,6 +427,11 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
|
||||||
series.add(new XDDFBar3DChartData(this, barChart, categories, values));
|
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++) {
|
for (int i = 0; i < plotArea.sizeOfLineChartArray(); i++) {
|
||||||
CTLineChart lineChart = plotArea.getLineChartArray(i);
|
CTLineChart lineChart = plotArea.getLineChartArray(i);
|
||||||
series.add(new XDDFLineChartData(this, lineChart, categories, values));
|
series.add(new XDDFLineChartData(this, lineChart, categories, values));
|
||||||
|
@ -465,7 +471,7 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
|
||||||
CTSurface3DChart surfaceChart = plotArea.getSurface3DChartArray(i);
|
CTSurface3DChart surfaceChart = plotArea.getSurface3DChartArray(i);
|
||||||
series.add(new XDDFSurface3DChartData(this, surfaceChart, categories, values));
|
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();
|
seriesCount = series.size();
|
||||||
return series;
|
return series;
|
||||||
|
@ -578,6 +584,8 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
|
||||||
return new XDDFBarChartData(this, plotArea.addNewBarChart(), categories, mapValues);
|
return new XDDFBarChartData(this, plotArea.addNewBarChart(), categories, mapValues);
|
||||||
case BAR3D:
|
case BAR3D:
|
||||||
return new XDDFBar3DChartData(this, plotArea.addNewBar3DChart(), categories, mapValues);
|
return new XDDFBar3DChartData(this, plotArea.addNewBar3DChart(), categories, mapValues);
|
||||||
|
case DOUGHNUT:
|
||||||
|
return new XDDFDoughnutChartData(this, plotArea.addNewDoughnutChart());
|
||||||
case LINE:
|
case LINE:
|
||||||
return new XDDFLineChartData(this, plotArea.addNewLineChart(), categories, mapValues);
|
return new XDDFLineChartData(this, plotArea.addNewLineChart(), categories, mapValues);
|
||||||
case LINE3D:
|
case LINE3D:
|
||||||
|
@ -594,7 +602,7 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
|
||||||
return new XDDFSurfaceChartData(this, plotArea.addNewSurfaceChart(), categories, mapValues);
|
return new XDDFSurfaceChartData(this, plotArea.addNewSurfaceChart(), categories, mapValues);
|
||||||
case SURFACE3D:
|
case SURFACE3D:
|
||||||
return new XDDFSurface3DChartData(this, plotArea.addNewSurface3DChart(), categories, mapValues);
|
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:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -97,6 +97,8 @@ public class TestNecessaryOOXMLClasses {
|
||||||
Assert.assertNotNull(ctArea3DChart);
|
Assert.assertNotNull(ctArea3DChart);
|
||||||
CTSurfaceChart ctSurfaceChart = CTSurfaceChart.Factory.newInstance();
|
CTSurfaceChart ctSurfaceChart = CTSurfaceChart.Factory.newInstance();
|
||||||
Assert.assertNotNull(ctSurfaceChart);
|
Assert.assertNotNull(ctSurfaceChart);
|
||||||
|
CTDoughnutChart ctDoughnutChart = CTDoughnutChart.Factory.newInstance();
|
||||||
|
Assert.assertNotNull(ctDoughnutChart);
|
||||||
CTBar3DChart ctBar3DChart = CTBar3DChart.Factory.newInstance();
|
CTBar3DChart ctBar3DChart = CTBar3DChart.Factory.newInstance();
|
||||||
Assert.assertNotNull(ctBar3DChart);
|
Assert.assertNotNull(ctBar3DChart);
|
||||||
CTLine3DChart ctLine3DChart = CTLine3DChart.Factory.newInstance();
|
CTLine3DChart ctLine3DChart = CTLine3DChart.Factory.newInstance();
|
||||||
|
|
Loading…
Reference in New Issue