Author: abearez Date: Mon Jan 13 00:27:06 2020 New Revision: 1872692 URL: http://svn.apache.org/viewvc?rev=1872692&view=rev Log: Error bar minus and plus as numerical data sources
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSource.java poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFErrorBars.java poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFNumericalDataSource.java Modified: poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java?rev=1872692&r1=1872691&r2=1872692&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java Mon Jan 13 00:27:06 2020 @@ -33,11 +33,9 @@ import org.openxmlformats.schemas.drawin import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumData; import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource; import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumRef; -import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumVal; import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx; import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrData; import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrRef; -import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrVal; import org.openxmlformats.schemas.drawingml.x2006.chart.CTUnsignedInt; /** @@ -211,16 +209,15 @@ public abstract class XDDFChartData { } public void plot() { - int numOfPoints = categoryData.getPointCount(); if (categoryData.isNumeric()) { CTNumData cache = retrieveNumCache(getAxDS(), categoryData); - fillNumCache(cache, numOfPoints, (XDDFNumericalDataSource<?>) categoryData); + ((XDDFNumericalDataSource<?>) categoryData).fillNumericalCache(cache); } else { CTStrData cache = retrieveStrCache(getAxDS(), categoryData); - fillStringCache(cache, numOfPoints, categoryData); + categoryData.fillStringCache(cache); } CTNumData cache = retrieveNumCache(getNumDS(), valuesData); - fillNumCache(cache, numOfPoints, valuesData); + valuesData.fillNumericalCache(cache); } /** @@ -343,61 +340,5 @@ public abstract class XDDFChartData { } return numCache; } - - private void fillStringCache(CTStrData cache, int numOfPoints, XDDFDataSource<?> data) { - cache.setPtArray(null); // unset old values - int effectiveNumOfPoints = 0; - for (int i = 0; i < numOfPoints; ++i) { - Object value = data.getPointAt(i); - if (value != null) { - CTStrVal ctStrVal = cache.addNewPt(); - ctStrVal.setIdx(i); - ctStrVal.setV(value.toString()); - effectiveNumOfPoints++; - } - } - if (effectiveNumOfPoints == 0) { - if (cache.isSetPtCount()) { - cache.unsetPtCount(); - } - } else { - if (cache.isSetPtCount()) { - cache.getPtCount().setVal(numOfPoints); - } else { - cache.addNewPtCount().setVal(numOfPoints); - } - } - } - - private void fillNumCache(CTNumData cache, int numOfPoints, XDDFNumericalDataSource<?> data) { - String formatCode = data.getFormatCode(); - if (formatCode == null) { - if (cache.isSetFormatCode()) { - cache.unsetFormatCode(); - } - } else { - cache.setFormatCode(formatCode); - } - cache.setPtArray(null); // unset old values - int effectiveNumOfPoints = 0; - for (int i = 0; i < numOfPoints; ++i) { - Object value = data.getPointAt(i); - if (value != null) { - CTNumVal ctNumVal = cache.addNewPt(); - ctNumVal.setIdx(i); - ctNumVal.setV(value.toString()); - effectiveNumOfPoints++; - } - } - if (effectiveNumOfPoints == 0) { - cache.unsetPtCount(); - } else { - if (cache.isSetPtCount()) { - cache.getPtCount().setVal(numOfPoints); - } else { - cache.addNewPtCount().setVal(numOfPoints); - } - } - } } } Modified: poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSource.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSource.java?rev=1872692&r1=1872691&r2=1872692&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSource.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSource.java Mon Jan 13 00:27:06 2020 @@ -20,6 +20,9 @@ package org.apache.poi.xddf.usermodel.chart; import org.apache.poi.util.Beta; +import org.apache.poi.util.Internal; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrData; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrVal; @Beta public interface XDDFDataSource<T> { @@ -46,4 +49,34 @@ public interface XDDFDataSource<T> { String getDataRangeReference(); String getFormula(); + + /** + * @since POI 4.1.2 + */ + @Internal + default void fillStringCache(CTStrData cache) { + cache.setPtArray(null); // unset old values + final int numOfPoints = getPointCount(); + int effectiveNumOfPoints = 0; + for (int i = 0; i < numOfPoints; ++i) { + Object value = getPointAt(i); + if (value != null) { + CTStrVal ctStrVal = cache.addNewPt(); + ctStrVal.setIdx(i); + ctStrVal.setV(value.toString()); + effectiveNumOfPoints++; + } + } + if (effectiveNumOfPoints == 0) { + if (cache.isSetPtCount()) { + cache.unsetPtCount(); + } + } else { + if (cache.isSetPtCount()) { + cache.getPtCount().setVal(numOfPoints); + } else { + cache.addNewPtCount().setVal(numOfPoints); + } + } + } } Modified: poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFErrorBars.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFErrorBars.java?rev=1872692&r1=1872691&r2=1872692&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFErrorBars.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFErrorBars.java Mon Jan 13 00:27:06 2020 @@ -22,6 +22,9 @@ import org.apache.poi.util.Internal; import org.apache.poi.xddf.usermodel.XDDFShapeProperties; import org.apache.xmlbeans.XmlObject; import org.openxmlformats.schemas.drawingml.x2006.chart.CTErrBars; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumData; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumRef; /** * @since POI 4.1.2 @@ -166,5 +169,61 @@ public class XDDFErrorBars { } } - // TODO handle minus and plus as numerical data sources + public XDDFNumericalDataSource<Double> getMinus() { + if (bars.isSetMinus()) { + return XDDFDataSourcesFactory.fromDataSource(bars.getMinus()); + } else { + return null; + } + } + + public void setMinus(XDDFNumericalDataSource<Double> ds) { + if (ds == null) { + if (bars.isSetMinus()) { + bars.unsetMinus(); + } + } else { + if (bars.isSetMinus()) { + ds.fillNumericalCache(retrieveCache(bars.getMinus(), ds.getDataRangeReference())); + } else { + CTNumDataSource ctDS = bars.addNewMinus(); + ctDS.addNewNumLit(); + ds.fillNumericalCache(retrieveCache(ctDS, ds.getDataRangeReference())); + } + } + } + + public XDDFNumericalDataSource<Double> getPlus() { + if (bars.isSetPlus()) { + return XDDFDataSourcesFactory.fromDataSource(bars.getPlus()); + } else { + return null; + } + } + + public void setPlus(XDDFNumericalDataSource<Double> ds) { + if (ds == null) { + if (bars.isSetPlus()) { + bars.unsetPlus(); + } + } else { + if (bars.isSetPlus()) { + ds.fillNumericalCache(retrieveCache(bars.getPlus(), ds.getDataRangeReference())); + } else { + CTNumDataSource ctDS = bars.addNewPlus(); + ctDS.addNewNumLit(); + ds.fillNumericalCache(retrieveCache(ctDS, ds.getDataRangeReference())); + } + } + } + + private CTNumData retrieveCache(CTNumDataSource ds, String dataRangeReference) { + if (ds.isSetNumRef()) { + CTNumRef numRef = ds.getNumRef(); + numRef.setF(dataRangeReference); + return numRef.getNumCache(); + } else { + return ds.getNumLit(); + } + } } Modified: poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFNumericalDataSource.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFNumericalDataSource.java?rev=1872692&r1=1872691&r2=1872692&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFNumericalDataSource.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFNumericalDataSource.java Mon Jan 13 00:27:06 2020 @@ -20,6 +20,9 @@ package org.apache.poi.xddf.usermodel.chart; import org.apache.poi.util.Beta; +import org.apache.poi.util.Internal; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumData; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumVal; @Beta public interface XDDFNumericalDataSource<T extends Number> extends XDDFDataSource<T> { @@ -31,4 +34,40 @@ public interface XDDFNumericalDataSource default boolean isLiteral() { return false; } + + /** + * @since POI 4.1.2 + */ + @Internal + default void fillNumericalCache(CTNumData cache) { + String formatCode = getFormatCode(); + if (formatCode == null) { + if (cache.isSetFormatCode()) { + cache.unsetFormatCode(); + } + } else { + cache.setFormatCode(formatCode); + } + cache.setPtArray(null); // unset old values + final int numOfPoints = getPointCount(); + int effectiveNumOfPoints = 0; + for (int i = 0; i < numOfPoints; ++i) { + Object value = getPointAt(i); + if (value != null) { + CTNumVal ctNumVal = cache.addNewPt(); + ctNumVal.setIdx(i); + ctNumVal.setV(value.toString()); + effectiveNumOfPoints++; + } + } + if (effectiveNumOfPoints == 0) { + cache.unsetPtCount(); + } else { + if (cache.isSetPtCount()) { + cache.getPtCount().setVal(numOfPoints); + } else { + cache.addNewPtCount().setVal(numOfPoints); + } + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org For additional commands, e-mail: commits-h...@poi.apache.org