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,
|
||||
BAR,
|
||||
BAR3D,
|
||||
DOUGHNUT,
|
||||
LINE,
|
||||
LINE3D,
|
||||
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.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 POIXMLDocumentPart implements TextContai
|
|||
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 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
|
||||
// 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 POIXMLDocumentPart implements TextContai
|
|||
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 POIXMLDocumentPart implements TextContai
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
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();
|
||||
|
|
Loading…
Reference in New Issue