firstSeries.replaceData(categoriesData, valuesData);
firstSeries.setTitle(chartTitle, chart.setSheetTitle(chartTitle, 0));
firstSeries.setExplosion(25L);
+ firstSeries.getDataPoint(1).setExplosion(35L);
chart.plot(pie);
// save the result
// some colors
XDDFFillProperties solidChartreuse = new XDDFSolidFillProperties(XDDFColor.from(PresetColor.CHARTREUSE));
XDDFFillProperties solidTurquoise = new XDDFSolidFillProperties(XDDFColor.from(PresetColor.TURQUOISE));
- XDDFLineProperties solidLines = new XDDFLineProperties(solidTurquoise);
+ XDDFLineProperties linesChartreuse = new XDDFLineProperties(solidChartreuse);
+ XDDFLineProperties linesTurquoise = new XDDFLineProperties(solidTurquoise);
series1.setFillProperties(solidChartreuse);
- series1.setLineProperties(solidLines); // bar border color different from fill
- series2.setLineProperties(solidLines);
+ series1.setLineProperties(linesTurquoise); // bar border color different from fill
+ series1.getDataPoint(2).setFillProperties(solidTurquoise); // this specific bar has inverted colors
+ series1.getDataPoint(2).setLineProperties(linesChartreuse);
+ series2.setLineProperties(linesTurquoise);
+ series2.getDataPoint(2).setMarkerStyle(MarkerStyle.STAR);
+ series2.getDataPoint(2).setLineProperties(linesChartreuse);
// legend
XDDFChartLegend legend = chart.getOrAddLegend();
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
import java.util.Map;
import org.apache.poi.ooxml.util.POIXMLUnits;
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
import java.util.Map;
import org.apache.poi.util.Beta;
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
import java.util.Map;
import org.apache.poi.ooxml.util.POIXMLUnits;
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
import java.util.Map;
import org.apache.poi.ooxml.util.POIXMLUnits;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarSer;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
protected void setOrder(long order) {
series.getOrder().setVal(order);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
import org.apache.poi.xddf.usermodel.XDDFLineProperties;
import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumData;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumRef;
protected abstract void setOrder(long order);
+ protected abstract List<CTDPt> getDPtList();
+
protected Series(XDDFDataSource<?> category, XDDFNumericalDataSource<? extends Number> values) {
replaceData(category, values);
}
setShapeProperties(properties);
}
+ /**
+ * If a data point definition with the given <code>index</code> exists, then remove it.
+ * Otherwise do nothing.
+ *
+ * @param index
+ * data point index.
+ * @since POI 5.0.1
+ */
+ public void clearDataPoint(long index) {
+ List<CTDPt> points = getDPtList();
+ for (int i = 0; i < points.size(); i++) {
+ if (points.get(i).getIdx().getVal() == index) {
+ points.remove(i);
+ i = points.size();
+ }
+ }
+ }
+
+ /**
+ * If a data point definition with the given <code>index</code> exists, then return it.
+ * Otherwise create a new data point definition and return it.
+ *
+ * @param index
+ * data point index.
+ * @return
+ * the data point with the given <code>index</code>.
+ * @since POI 5.0.1
+ */
+ public XDDFDataPoint getDataPoint(long index) {
+ List<CTDPt> points = getDPtList();
+ for (int i = 0; i < points.size(); i++) {
+ if (points.get(i).getIdx().getVal() == index) {
+ return new XDDFDataPoint(points.get(i));
+ }
+ if (points.get(i).getIdx().getVal() > index) {
+ points.add(i, CTDPt.Factory.newInstance());
+ CTDPt point = points.get(i);
+ point.addNewIdx().setVal(index);
+ return new XDDFDataPoint(point);
+ }
+ }
+ points.add(CTDPt.Factory.newInstance());
+ CTDPt point = points.get(points.size() - 1);
+ point.addNewIdx().setVal(index);
+ return new XDDFDataPoint(point);
+ }
+
private CTNumData retrieveNumCache(final CTAxDataSource axDataSource, XDDFDataSource<?> data) {
CTNumData numCache;
if (data.isReference()) {
--- /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.XDDFFillProperties;
+import org.apache.poi.xddf.usermodel.XDDFLineProperties;
+import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTDPt;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTMarker;
+
+/**
+ * @since 5.0.1
+ */
+@Beta
+public class XDDFDataPoint {
+ private final CTDPt point;
+
+ @Internal
+ protected XDDFDataPoint(CTDPt point) {
+ this.point = point;
+ }
+
+ public long getIndex() {
+ return point.getIdx().getVal();
+ }
+
+ /**
+ * @param fill
+ * fill property for the shape representing the point.
+ */
+ public void setFillProperties(XDDFFillProperties fill) {
+ XDDFShapeProperties properties = getShapeProperties();
+ if (properties == null) {
+ properties = new XDDFShapeProperties();
+ }
+ properties.setFillProperties(fill);
+ setShapeProperties(properties);
+ }
+
+ /**
+ * @param line
+ * line property for the shape representing the point.
+ */
+ public void setLineProperties(XDDFLineProperties line) {
+ XDDFShapeProperties properties = getShapeProperties();
+ if (properties == null) {
+ properties = new XDDFShapeProperties();
+ }
+ properties.setLineProperties(line);
+ setShapeProperties(properties);
+ }
+
+ public XDDFShapeProperties getShapeProperties() {
+ if (point.isSetSpPr()) {
+ return new XDDFShapeProperties(point.getSpPr());
+ } else {
+ return null;
+ }
+ }
+
+ public void setShapeProperties(XDDFShapeProperties properties) {
+ if (properties == null) {
+ if (point.isSetSpPr()) {
+ point.unsetSpPr();
+ }
+ } else {
+ if (point.isSetSpPr()) {
+ point.setSpPr(properties.getXmlObject());
+ } else {
+ point.addNewSpPr().set(properties.getXmlObject());
+ }
+ }
+ }
+
+ public Long getExplosion() {
+ if (point.isSetExplosion()) {
+ return point.getExplosion().getVal();
+ } else {
+ return null;
+ }
+ }
+
+ public void setExplosion(Long explosion) {
+ if (explosion == null) {
+ if (point.isSetExplosion()) {
+ point.unsetExplosion();
+ }
+ } else {
+ if (point.isSetExplosion()) {
+ point.getExplosion().setVal(explosion);
+ } else {
+ point.addNewExplosion().setVal(explosion);
+ }
+ }
+ }
+
+ public boolean getInvertIfNegative() {
+ if (point.isSetInvertIfNegative()) {
+ return point.getInvertIfNegative().getVal();
+ }
+ return false;
+ }
+
+ public void setInvertIfNegative(boolean invertIfNegative) {
+ if (point.isSetInvertIfNegative()) {
+ point.getInvertIfNegative().setVal(invertIfNegative);
+ } else {
+ point.addNewInvertIfNegative().setVal(invertIfNegative);
+ }
+ }
+
+ /**
+ * @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 (point.isSetMarker()) {
+ return point.getMarker();
+ } else {
+ return point.addNewMarker();
+ }
+ }
+
+}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
+
import org.apache.poi.ooxml.util.POIXMLUnits;
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTDoughnutChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
import java.util.Map;
import org.apache.poi.ooxml.util.POIXMLUnits;
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLine3DChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTMarker;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
import java.util.Map;
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineSer;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTMarker;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
+
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPie3DChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
+
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
import java.util.Map;
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTRadarChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTRadarSer;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
import java.util.Map;
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTMarker;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTScatterChart;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ return series.getDPtList();
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
import java.util.Map;
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSurface3DChart;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ throw new IllegalStateException("Surface data series don't support data point settings.");
+ }
}
}
package org.apache.poi.xddf.usermodel.chart;
+import java.util.List;
import java.util.Map;
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.CTDPt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSurfaceChart;
protected void setOrder(long val) {
series.getOrder().setVal(val);
}
+
+ @Override
+ protected List<CTDPt> getDPtList() {
+ throw new IllegalStateException("Surface data series don't support data point settings.");
+ }
}
-}
\ No newline at end of file
+}
assertNotNull(CTErrValType.Factory.newInstance());
assertNotNull(CTErrDir.Factory.newInstance());
assertNotNull(CTHoleSize.Factory.newInstance());
+ assertNotNull(CTDPt.Factory.newInstance());
STErrBarType.Enum e9 = STErrBarType.Enum.forString("both");
assertNotNull(e9);