fixed bug while creating chart with bar and line series. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1859589 13f79535-47bb-0310-9956-ffa450edef68pull/139/head
@@ -134,17 +134,26 @@ public class BarAndLineChart { | |||
lineCategories.crossAxis(rightValues); | |||
// the bar chart | |||
XDDFBarChartData bar = (XDDFBarChartData) chart.createData(ChartTypes.BAR, lineCategories, rightValues); | |||
XDDFBarChartData bar = (XDDFBarChartData) chart.createData(ChartTypes.BAR, barCategories, leftValues); | |||
XDDFBarChartData.Series series1 = (XDDFBarChartData.Series) bar.addSeries(xs, ys1); | |||
series1.setTitle("Bars", new CellReference("Sheet1!$B$1")); | |||
bar.setVaryColors(true); | |||
bar.setBarDirection(BarDirection.COL); | |||
chart.plot(bar); | |||
// the line chart | |||
// the line chart on secondary axis | |||
XDDFLineChartData lines = (XDDFLineChartData) chart.createData(ChartTypes.LINE, lineCategories, | |||
rightValues); | |||
//uncomment below line if only primary axis required and comment above line | |||
// the line chart on primary axis | |||
/*XDDFLineChartData lines = (XDDFLineChartData) chart.createData(ChartTypes.LINE, lineCategories, | |||
leftValues);*/ | |||
XDDFLineChartData.Series series2 = (XDDFLineChartData.Series) lines.addSeries(xs, ys2); | |||
series2.updateIdXVal(1); | |||
series2.updateOrderVal(1); | |||
series2.setTitle("Lines", new CellReference("Sheet1!$C$1")); | |||
lines.setVaryColors(true); | |||
chart.plot(lines); |
@@ -17,9 +17,16 @@ | |||
package org.apache.poi.xddf.usermodel.chart; | |||
public enum ChartTypes { | |||
AREA, | |||
AREA3D, | |||
BAR, | |||
BAR3D, | |||
LINE, | |||
LINE3D, | |||
PIE, | |||
PIE3D, | |||
RADAR, | |||
SCATTER | |||
SCATTER, | |||
SURFACE, | |||
SURFACE3D | |||
} |
@@ -0,0 +1,169 @@ | |||
/* ==================================================================== | |||
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 java.util.Map; | |||
import org.apache.poi.util.Beta; | |||
import org.apache.poi.xddf.usermodel.XDDFShapeProperties; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTArea3DChart; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAreaSer; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx; | |||
@Beta | |||
public class XDDFArea3DChartData extends XDDFChartData { | |||
private CTArea3DChart chart; | |||
public XDDFArea3DChartData(CTArea3DChart chart, Map<Long, XDDFChartAxis> categories, | |||
Map<Long, XDDFValueAxis> values) { | |||
this.chart = chart; | |||
for (CTAreaSer series : chart.getSerList()) { | |||
this.series.add(new Series(series, series.getCat(), series.getVal())); | |||
} | |||
defineAxes(categories, values); | |||
} | |||
private void defineAxes(Map<Long, XDDFChartAxis> categories, Map<Long, XDDFValueAxis> values) { | |||
if (chart.sizeOfAxIdArray() == 0) { | |||
for (Long id : categories.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
for (Long id : values.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
} | |||
defineAxes(chart.getAxIdArray(), categories, values); | |||
} | |||
@Override | |||
public void setVaryColors(boolean varyColors) { | |||
if (chart.isSetVaryColors()) { | |||
chart.getVaryColors().setVal(varyColors); | |||
} else { | |||
chart.addNewVaryColors().setVal(varyColors); | |||
} | |||
} | |||
public Grouping getGrouping() { | |||
return Grouping.valueOf(chart.getGrouping().getVal()); | |||
} | |||
public void setGrouping(Grouping grouping) { | |||
if (chart.getGrouping() != null) { | |||
chart.getGrouping().setVal(grouping.underlying); | |||
} else { | |||
chart.addNewGrouping().setVal(grouping.underlying); | |||
} | |||
} | |||
@Override | |||
public XDDFChartData.Series addSeries(XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
final int index = this.series.size(); | |||
final CTAreaSer 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 CTAreaSer series; | |||
protected Series(CTAreaSer series, XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
super(category, values); | |||
this.series = series; | |||
} | |||
protected Series(CTAreaSer 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()); | |||
} | |||
} | |||
} | |||
@Override | |||
protected CTAxDataSource getAxDS() { | |||
return series.getCat(); | |||
} | |||
@Override | |||
protected CTNumDataSource getNumDS() { | |||
return series.getVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -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 java.util.Map; | |||
import org.apache.poi.util.Beta; | |||
import org.apache.poi.xddf.usermodel.XDDFShapeProperties; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAreaChart; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAreaSer; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineSer; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTMarker; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx; | |||
@Beta | |||
public class XDDFAreaChartData extends XDDFChartData { | |||
private CTAreaChart chart; | |||
public XDDFAreaChartData(CTAreaChart chart, Map<Long, XDDFChartAxis> categories, | |||
Map<Long, XDDFValueAxis> values) { | |||
this.chart = chart; | |||
for (CTAreaSer series : chart.getSerList()) { | |||
this.series.add(new Series(series, series.getCat(), series.getVal())); | |||
} | |||
defineAxes(categories, values); | |||
} | |||
private void defineAxes(Map<Long, XDDFChartAxis> categories, Map<Long, XDDFValueAxis> values) { | |||
if (chart.sizeOfAxIdArray() == 0) { | |||
for (Long id : categories.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
for (Long id : values.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
} | |||
defineAxes(chart.getAxIdArray(), categories, values); | |||
} | |||
@Override | |||
public void setVaryColors(boolean varyColors) { | |||
if (chart.isSetVaryColors()) { | |||
chart.getVaryColors().setVal(varyColors); | |||
} else { | |||
chart.addNewVaryColors().setVal(varyColors); | |||
} | |||
} | |||
public Grouping getGrouping() { | |||
return Grouping.valueOf(chart.getGrouping().getVal()); | |||
} | |||
public void setGrouping(Grouping grouping) { | |||
if (chart.getGrouping() != null) { | |||
chart.getGrouping().setVal(grouping.underlying); | |||
} else { | |||
chart.addNewGrouping().setVal(grouping.underlying); | |||
} | |||
} | |||
@Override | |||
public XDDFChartData.Series addSeries(XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
final int index = this.series.size(); | |||
final CTAreaSer 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 CTAreaSer series; | |||
protected Series(CTAreaSer series, XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
super(category, values); | |||
this.series = series; | |||
} | |||
protected Series(CTAreaSer 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()); | |||
} | |||
} | |||
} | |||
@Override | |||
protected CTAxDataSource getAxDS() { | |||
return series.getCat(); | |||
} | |||
@Override | |||
protected CTNumDataSource getNumDS() { | |||
return series.getVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -0,0 +1,201 @@ | |||
/* ==================================================================== | |||
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 java.util.Map; | |||
import org.apache.poi.util.Beta; | |||
import org.apache.poi.xddf.usermodel.XDDFShapeProperties; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBar3DChart; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarSer; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx; | |||
@Beta | |||
public class XDDFBar3DChartData extends XDDFChartData { | |||
private CTBar3DChart chart; | |||
public XDDFBar3DChartData(CTBar3DChart chart, Map<Long, XDDFChartAxis> categories, | |||
Map<Long, XDDFValueAxis> values) { | |||
this.chart = chart; | |||
if (chart.getBarDir() == null) { | |||
chart.addNewBarDir().setVal(BarDirection.BAR.underlying); | |||
} | |||
for (CTBarSer series : chart.getSerList()) { | |||
this.series.add(new Series(series, series.getCat(), series.getVal())); | |||
} | |||
defineAxes(categories, values); | |||
} | |||
private void defineAxes(Map<Long, XDDFChartAxis> categories, Map<Long, XDDFValueAxis> values) { | |||
if (chart.sizeOfAxIdArray() == 0) { | |||
for (Long id : categories.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
for (Long id : values.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
} | |||
defineAxes(chart.getAxIdArray(), categories, values); | |||
} | |||
@Override | |||
public void setVaryColors(boolean varyColors) { | |||
if (chart.isSetVaryColors()) { | |||
chart.getVaryColors().setVal(varyColors); | |||
} else { | |||
chart.addNewVaryColors().setVal(varyColors); | |||
} | |||
} | |||
public BarDirection getBarDirection() { | |||
return BarDirection.valueOf(chart.getBarDir().getVal()); | |||
} | |||
public void setBarDirection(BarDirection direction) { | |||
chart.getBarDir().setVal(direction.underlying); | |||
} | |||
public BarGrouping getBarGrouping() { | |||
if (chart.isSetGrouping()) { | |||
return BarGrouping.valueOf(chart.getGrouping().getVal()); | |||
} else { | |||
return BarGrouping.STANDARD; | |||
} | |||
} | |||
public void setBarGrouping(BarGrouping grouping) { | |||
if (chart.isSetGrouping()) { | |||
chart.getGrouping().setVal(grouping.underlying); | |||
} else { | |||
chart.addNewGrouping().setVal(grouping.underlying); | |||
} | |||
} | |||
public int getGapWidth() { | |||
if (chart.isSetGapWidth()) { | |||
return chart.getGapWidth().getVal(); | |||
} else { | |||
return 0; | |||
} | |||
} | |||
public void setGapWidth(int width) { | |||
if (chart.isSetGapWidth()) { | |||
chart.getGapWidth().setVal(width); | |||
} else { | |||
chart.addNewGapWidth().setVal(width); | |||
} | |||
} | |||
@Override | |||
public XDDFChartData.Series addSeries(XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
final int index = this.series.size(); | |||
final CTBarSer ctSer = this.chart.addNewSer(); | |||
ctSer.addNewTx(); | |||
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 CTBarSer series; | |||
protected Series(CTBarSer series, XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
super(category, values); | |||
this.series = series; | |||
} | |||
protected Series(CTBarSer 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()); | |||
} | |||
} | |||
} | |||
@Override | |||
protected CTAxDataSource getAxDS() { | |||
return series.getCat(); | |||
} | |||
@Override | |||
protected CTNumDataSource getNumDS() { | |||
return series.getVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -187,5 +187,15 @@ public class XDDFBarChartData extends XDDFChartData { | |||
protected CTNumDataSource getNumDS() { | |||
return series.getVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -72,6 +72,7 @@ import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerAx; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSurface; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTitle; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTValAx; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTView3D; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.ChartSpaceDocument; | |||
import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties; | |||
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties; | |||
@@ -301,6 +302,21 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai | |||
} | |||
} | |||
/** | |||
* Get or Add chart 3D view into chart | |||
* | |||
* @return this method will add 3D view | |||
*/ | |||
public XDDFView3D getOrAddView3D() { | |||
CTView3D view3D; | |||
if (chart.isSetView3D()) { | |||
view3D = chart.getView3D(); | |||
} else { | |||
view3D = chart.addNewView3D(); | |||
} | |||
return new XDDFView3D(view3D); | |||
} | |||
/** | |||
* Get the chart title body if there is one, i.e. title is set and is not a | |||
* formula. | |||
@@ -436,6 +452,23 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai | |||
return valueAxis; | |||
} | |||
/** | |||
* this method will return series axis with specified position | |||
* | |||
* @param pos axis position Left, Right, Top, Bottom | |||
* @return series axis with specified position | |||
*/ | |||
public XDDFSeriesAxis createSeriesAxis(AxisPosition pos) { | |||
XDDFSeriesAxis seriesAxis = new XDDFSeriesAxis(chart.getPlotArea(), pos); | |||
if (axes.size() == 1) { | |||
XDDFChartAxis axis = axes.get(0); | |||
axis.crossAxis(seriesAxis); | |||
seriesAxis.crossAxis(axis); | |||
} | |||
axes.add(seriesAxis); | |||
return seriesAxis; | |||
} | |||
public XDDFCategoryAxis createCategoryAxis(AxisPosition pos) { | |||
XDDFCategoryAxis categoryAxis = new XDDFCategoryAxis(chart.getPlotArea(), pos); | |||
if (axes.size() == 1) { | |||
@@ -458,21 +491,50 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai | |||
return dateAxis; | |||
} | |||
/** | |||
* this method will return specified chart data with category and series values | |||
* | |||
* @param type chart type | |||
* @param category category values of chart | |||
* @param values series values of chart | |||
* @return specified chart data. | |||
*/ | |||
public XDDFChartData createData(ChartTypes type, XDDFChartAxis category, XDDFValueAxis values) { | |||
Map<Long, XDDFChartAxis> categories = Collections.singletonMap(category.getId(), category); | |||
Map<Long, XDDFValueAxis> mapValues = Collections.singletonMap(values.getId(), values); | |||
Map<Long, XDDFChartAxis> categories = null; | |||
Map<Long, XDDFValueAxis> mapValues = null; | |||
if(ChartTypes.PIE != type && ChartTypes.PIE3D != type) | |||
{ | |||
categories = Collections.singletonMap(category.getId(), category); | |||
mapValues = Collections.singletonMap(values.getId(), values); | |||
} | |||
final CTPlotArea plotArea = getCTPlotArea(); | |||
switch (type) { | |||
case AREA: | |||
return new XDDFAreaChartData(plotArea.addNewAreaChart(), categories, mapValues); | |||
case AREA3D: | |||
return new XDDFArea3DChartData(plotArea.addNewArea3DChart(), categories, mapValues); | |||
case BAR: | |||
return new XDDFBarChartData(plotArea.addNewBarChart(), categories, mapValues); | |||
case BAR3D: | |||
return new XDDFBar3DChartData(plotArea.addNewBar3DChart(), categories, mapValues); | |||
case LINE: | |||
return new XDDFLineChartData(plotArea.addNewLineChart(), categories, mapValues); | |||
case LINE3D: | |||
return new XDDFLine3DChartData(plotArea.addNewLine3DChart(), categories, mapValues); | |||
case PIE: | |||
return new XDDFPieChartData(plotArea.addNewPieChart()); | |||
case PIE3D: | |||
return new XDDFPie3DChartData(plotArea.addNewPie3DChart()); | |||
case RADAR: | |||
return new XDDFRadarChartData(plotArea.addNewRadarChart(), categories, mapValues); | |||
case SCATTER: | |||
return new XDDFScatterChartData(plotArea.addNewScatterChart(), categories, mapValues); | |||
case SURFACE: | |||
return new XDDFSurfaceChartData(plotArea.addNewSurfaceChart(), categories, mapValues); | |||
case SURFACE3D: | |||
return new XDDFSurface3DChartData(plotArea.addNewSurface3DChart(), categories, mapValues); | |||
default: | |||
return null; | |||
} |
@@ -98,6 +98,20 @@ public abstract class XDDFChartData { | |||
protected abstract CTNumDataSource getNumDS(); | |||
/** | |||
* This method will update series id value | |||
* | |||
* @param val | |||
*/ | |||
public abstract void updateIdXVal(long val); | |||
/** | |||
* this method will update series order value | |||
* | |||
* @param val | |||
*/ | |||
public abstract void updateOrderVal(long val); | |||
protected Series(XDDFDataSource<?> category, XDDFNumericalDataSource<? extends Number> values) { | |||
replaceData(category, values); | |||
} |
@@ -0,0 +1,231 @@ | |||
/* ==================================================================== | |||
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 java.util.Map; | |||
import org.apache.poi.util.Beta; | |||
import org.apache.poi.xddf.usermodel.XDDFShapeProperties; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLine3DChart; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineSer; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTMarker; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx; | |||
@Beta | |||
public class XDDFLine3DChartData extends XDDFChartData { | |||
private CTLine3DChart chart; | |||
public XDDFLine3DChartData(CTLine3DChart chart, Map<Long, XDDFChartAxis> categories, | |||
Map<Long, XDDFValueAxis> values) { | |||
this.chart = chart; | |||
for (CTLineSer series : chart.getSerList()) { | |||
this.series.add(new Series(series, series.getCat(), series.getVal())); | |||
} | |||
defineAxes(categories, values); | |||
} | |||
private void defineAxes(Map<Long, XDDFChartAxis> categories, Map<Long, XDDFValueAxis> values) { | |||
if (chart.sizeOfAxIdArray() == 0) { | |||
for (Long id : categories.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
for (Long id : values.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
} | |||
defineAxes(chart.getAxIdArray(), categories, values); | |||
} | |||
@Override | |||
public void setVaryColors(boolean varyColors) { | |||
if (chart.isSetVaryColors()) { | |||
chart.getVaryColors().setVal(varyColors); | |||
} else { | |||
chart.addNewVaryColors().setVal(varyColors); | |||
} | |||
} | |||
public Grouping getGrouping() { | |||
return Grouping.valueOf(chart.getGrouping().getVal()); | |||
} | |||
public void setGrouping(Grouping grouping) { | |||
if (chart.getGrouping() != null) { | |||
chart.getGrouping().setVal(grouping.underlying); | |||
} else { | |||
chart.addNewGrouping().setVal(grouping.underlying); | |||
} | |||
} | |||
@Override | |||
public XDDFChartData.Series addSeries(XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
final int index = this.series.size(); | |||
final CTLineSer 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 CTLineSer series; | |||
protected Series(CTLineSer series, XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
super(category, values); | |||
this.series = series; | |||
} | |||
protected Series(CTLineSer 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 Boolean getSmooth() { | |||
if (series.isSetSmooth()) { | |||
return series.getSmooth().getVal(); | |||
} else { | |||
return null; | |||
} | |||
} | |||
/** | |||
* @param smooth | |||
* whether or not to smooth lines, if <code>null</code> then reverts to default. | |||
* | |||
*/ | |||
public void setSmooth(Boolean smooth) { | |||
if (smooth == null) { | |||
if (series.isSetSmooth()) { | |||
series.unsetSmooth(); | |||
} | |||
} else { | |||
if (series.isSetSmooth()) { | |||
series.getSmooth().setVal(smooth); | |||
} else { | |||
series.addNewSmooth().setVal(smooth); | |||
} | |||
} | |||
} | |||
/** | |||
* @param size | |||
* <dl><dt>Minimum inclusive:</dt><dd>2</dd><dt>Maximum inclusive:</dt><dd>72</dd></dl> | |||
*/ | |||
public void setMarkerSize(short size) { | |||
if (size < 2 || 72 < size) { | |||
throw new IllegalArgumentException("Minimum inclusive: 2; Maximum inclusive: 72"); | |||
} | |||
CTMarker marker = getMarker(); | |||
if (marker.isSetSize()) { | |||
marker.getSize().setVal(size); | |||
} else { | |||
marker.addNewSize().setVal(size); | |||
} | |||
} | |||
public void setMarkerStyle(MarkerStyle style) { | |||
CTMarker marker = getMarker(); | |||
if (marker.isSetSymbol()) { | |||
marker.getSymbol().setVal(style.underlying); | |||
} else { | |||
marker.addNewSymbol().setVal(style.underlying); | |||
} | |||
} | |||
private CTMarker getMarker() { | |||
if (series.isSetMarker()) { | |||
return series.getMarker(); | |||
} else { | |||
return series.addNewMarker(); | |||
} | |||
} | |||
@Override | |||
protected CTAxDataSource getAxDS() { | |||
return series.getCat(); | |||
} | |||
@Override | |||
protected CTNumDataSource getNumDS() { | |||
return series.getVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -66,9 +66,13 @@ public class XDDFLineChartData extends XDDFChartData { | |||
return Grouping.valueOf(chart.getGrouping().getVal()); | |||
} | |||
public void setGrouping(Grouping grouping) { | |||
chart.getGrouping().setVal(grouping.underlying); | |||
} | |||
public void setGrouping(Grouping grouping) { | |||
if (chart.getGrouping() != null) { | |||
chart.getGrouping().setVal(grouping.underlying); | |||
} else { | |||
chart.addNewGrouping().setVal(grouping.underlying); | |||
} | |||
} | |||
@Override | |||
public XDDFChartData.Series addSeries(XDDFDataSource<?> category, | |||
@@ -215,5 +219,15 @@ public class XDDFLineChartData extends XDDFChartData { | |||
protected CTNumDataSource getNumDS() { | |||
return series.getVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -0,0 +1,157 @@ | |||
/* ==================================================================== | |||
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.xddf.usermodel.XDDFShapeProperties; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPie3DChart; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx; | |||
@Beta | |||
public class XDDFPie3DChartData extends XDDFChartData { | |||
private CTPie3DChart chart; | |||
public XDDFPie3DChartData(CTPie3DChart chart) { | |||
this.chart = chart; | |||
for (CTPieSer series : chart.getSerList()) { | |||
this.series.add(new Series(series, series.getCat(), series.getVal())); | |||
} | |||
} | |||
@Override | |||
public void setVaryColors(boolean varyColors) { | |||
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 | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -143,5 +143,15 @@ public class XDDFPieChartData extends XDDFChartData { | |||
protected CTNumDataSource getNumDS() { | |||
return series.getVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -156,5 +156,15 @@ public class XDDFRadarChartData extends XDDFChartData { | |||
protected CTNumDataSource getNumDS() { | |||
return series.getVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -228,5 +228,15 @@ public class XDDFScatterChartData extends XDDFChartData { | |||
protected CTNumDataSource getNumDS() { | |||
return series.getYVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -0,0 +1,173 @@ | |||
/* ==================================================================== | |||
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 java.util.Map; | |||
import org.apache.poi.util.Beta; | |||
import org.apache.poi.xddf.usermodel.XDDFShapeProperties; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSurface3DChart; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSurfaceSer; | |||
@Beta | |||
public class XDDFSurface3DChartData extends XDDFChartData { | |||
private CTSurface3DChart chart; | |||
public XDDFSurface3DChartData(CTSurface3DChart chart, Map<Long, XDDFChartAxis> categories, | |||
Map<Long, XDDFValueAxis> values) { | |||
this.chart = chart; | |||
for (CTSurfaceSer series : chart.getSerList()) { | |||
this.series.add(new Series(series, series.getCat(), series.getVal())); | |||
} | |||
defineAxes(categories, values); | |||
} | |||
private void defineAxes(Map<Long, XDDFChartAxis> categories, Map<Long, XDDFValueAxis> values) { | |||
if (chart.sizeOfAxIdArray() == 0) { | |||
for (Long id : categories.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
for (Long id : values.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
} | |||
defineAxes(chart.getAxIdArray(), categories, values); | |||
} | |||
public void setSeriesAxisId(XDDFSeriesAxis seriesAxis) { | |||
chart.addNewAxId().setVal(seriesAxis.getId()); | |||
} | |||
public CTBoolean getWireframe() { | |||
if (chart.isSetWireframe()) { | |||
return chart.getWireframe(); | |||
} else { | |||
return chart.addNewWireframe(); | |||
} | |||
} | |||
public void setWireframe(boolean val) { | |||
if (chart.isSetWireframe()) { | |||
chart.getWireframe().setVal(val); | |||
} else { | |||
chart.addNewWireframe().setVal(val); | |||
} | |||
} | |||
/** | |||
* Surface chart is not supporting vary color property | |||
*/ | |||
@Override | |||
public void setVaryColors(boolean varyColors) { | |||
} | |||
@Override | |||
public XDDFChartData.Series addSeries(XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
final int index = this.series.size(); | |||
final CTSurfaceSer 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 CTSurfaceSer series; | |||
protected Series(CTSurfaceSer series, XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
super(category, values); | |||
this.series = series; | |||
} | |||
protected Series(CTSurfaceSer 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(); | |||
} | |||
} | |||
/** | |||
* Surface chart is not supporting vary show leader lines property | |||
*/ | |||
@Override | |||
public void setShowLeaderLines(boolean 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()); | |||
} | |||
} | |||
} | |||
@Override | |||
protected CTAxDataSource getAxDS() { | |||
return series.getCat(); | |||
} | |||
@Override | |||
protected CTNumDataSource getNumDS() { | |||
return series.getVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -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 java.util.Map; | |||
import org.apache.poi.util.Beta; | |||
import org.apache.poi.xddf.usermodel.XDDFShapeProperties; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSurfaceChart; | |||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSurfaceSer; | |||
@Beta | |||
public class XDDFSurfaceChartData extends XDDFChartData { | |||
private CTSurfaceChart chart; | |||
public XDDFSurfaceChartData(CTSurfaceChart chart, Map<Long, XDDFChartAxis> categories, | |||
Map<Long, XDDFValueAxis> values) { | |||
this.chart = chart; | |||
for (CTSurfaceSer series : chart.getSerList()) { | |||
this.series.add(new Series(series, series.getCat(), series.getVal())); | |||
} | |||
defineAxes(categories, values); | |||
} | |||
private void defineAxes(Map<Long, XDDFChartAxis> categories, Map<Long, XDDFValueAxis> values) { | |||
if (chart.sizeOfAxIdArray() == 0) { | |||
for (Long id : categories.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
for (Long id : values.keySet()) { | |||
chart.addNewAxId().setVal(id); | |||
} | |||
} | |||
defineAxes(chart.getAxIdArray(), categories, values); | |||
} | |||
public void setSeriesAxisId(XDDFSeriesAxis seriesAxis) { | |||
chart.addNewAxId().setVal(seriesAxis.getId()); | |||
} | |||
public CTBoolean getWireframe() { | |||
if (chart.isSetWireframe()) { | |||
return chart.getWireframe(); | |||
} else { | |||
return chart.addNewWireframe(); | |||
} | |||
} | |||
public void setWireframe(boolean val) { | |||
if (chart.isSetWireframe()) { | |||
chart.getWireframe().setVal(val); | |||
} else { | |||
chart.addNewWireframe().setVal(val); | |||
} | |||
} | |||
/** | |||
* Surface chart is not supporting vary color property | |||
*/ | |||
@Override | |||
public void setVaryColors(boolean varyColors) { | |||
} | |||
@Override | |||
public XDDFChartData.Series addSeries(XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
final int index = this.series.size(); | |||
final CTSurfaceSer 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 CTSurfaceSer series; | |||
protected Series(CTSurfaceSer series, XDDFDataSource<?> category, | |||
XDDFNumericalDataSource<? extends Number> values) { | |||
super(category, values); | |||
this.series = series; | |||
} | |||
protected Series(CTSurfaceSer 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(); | |||
} | |||
} | |||
/** | |||
* Surface chart is not supporting vary show leader lines property | |||
*/ | |||
@Override | |||
public void setShowLeaderLines(boolean 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()); | |||
} | |||
} | |||
} | |||
@Override | |||
protected CTAxDataSource getAxDS() { | |||
return series.getCat(); | |||
} | |||
@Override | |||
protected CTNumDataSource getNumDS() { | |||
return series.getVal(); | |||
} | |||
@Override | |||
public void updateIdXVal(long val) { | |||
series.getIdx().setVal(val); | |||
} | |||
@Override | |||
public void updateOrderVal(long val) { | |||
series.getOrder().setVal(val); | |||
} | |||
} | |||
} |
@@ -0,0 +1,103 @@ | |||
/* | |||
* ==================================================================== | |||
* 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.openxmlformats.schemas.drawingml.x2006.chart.CTView3D; | |||
public class XDDFView3D { | |||
private final CTView3D view3D; | |||
public XDDFView3D(CTView3D view3D) { | |||
this.view3D = view3D; | |||
} | |||
public int getXRotationAngle() { | |||
return view3D.getRotX().getVal(); | |||
} | |||
public void setXRotationAngle(int val) { | |||
if (view3D.isSetRotY()) { | |||
view3D.getRotY().setVal(val); | |||
} else { | |||
view3D.addNewRotY().setVal(val); | |||
} | |||
} | |||
public int getYRotationAngle() { | |||
return view3D.getRotY().getVal(); | |||
} | |||
public void setYRotationAngle(int val) { | |||
if (view3D.isSetRotY()) { | |||
view3D.getRotY().setVal(val); | |||
} else { | |||
view3D.addNewRotY().setVal(val); | |||
} | |||
} | |||
public boolean getRightAngleAxes() { | |||
return view3D.getRAngAx().getVal(); | |||
} | |||
public void setRightAngleAxes(boolean val) { | |||
if (view3D.isSetRAngAx()) { | |||
view3D.getRAngAx().setVal(val); | |||
} else { | |||
view3D.addNewRAngAx().setVal(val); | |||
} | |||
} | |||
public short getPerspectiveAngle() { | |||
return view3D.getPerspective().getVal(); | |||
} | |||
public void setPerspectiveAngle(short val) { | |||
if (view3D.isSetPerspective()) { | |||
view3D.getPerspective().setVal(val); | |||
} else { | |||
view3D.addNewPerspective().setVal(val); | |||
} | |||
} | |||
public int getDepthPercentVal() { | |||
return view3D.getDepthPercent().getVal(); | |||
} | |||
public void setDepthPercent(int val) { | |||
if (view3D.isSetDepthPercent()) { | |||
view3D.getDepthPercent().setVal(val); | |||
} else { | |||
view3D.addNewDepthPercent().setVal(val); | |||
} | |||
} | |||
public int getHeightPercent() { | |||
return view3D.getHPercent().getVal(); | |||
} | |||
public void setHeightPercent(int val) { | |||
if (view3D.isSetHPercent()) { | |||
view3D.getHPercent().setVal(val); | |||
} else { | |||
view3D.addNewHPercent().setVal(val); | |||
} | |||
} | |||
} |