Author: abearez Date: Mon Mar 2 23:57:05 2020 New Revision: 1874705 URL: http://svn.apache.org/viewvc?rev=1874705&view=rev Log: Allow for numerical category in charts
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/XDDFDataSourcesFactory.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=1874705&r1=1874704&r2=1874705&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 Mar 2 23:57:05 2020 @@ -211,7 +211,7 @@ public abstract class XDDFChartData { public void plot() { if (categoryData.isNumeric()) { CTNumData cache = retrieveNumCache(getAxDS(), categoryData); - ((XDDFNumericalDataSource<?>) categoryData).fillNumericalCache(cache); + categoryData.fillNumericalCache(cache); } else { CTStrData cache = retrieveStrCache(getAxDS(), categoryData); categoryData.fillStringCache(cache); 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=1874705&r1=1874704&r2=1874705&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 Mar 2 23:57:05 2020 @@ -21,6 +21,8 @@ package org.apache.poi.xddf.usermodel.ch 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; import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrData; import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrVal; @@ -50,6 +52,44 @@ public interface XDDFDataSource<T> { String getFormula(); + String getFormatCode(); + + /** + * @since POI 4.1.3 + */ + @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); + } + } + } + /** * @since POI 4.1.2 */ Modified: poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSourcesFactory.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSourcesFactory.java?rev=1874705&r1=1874704&r2=1874705&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSourcesFactory.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSourcesFactory.java Mon Mar 2 23:57:05 2020 @@ -45,6 +45,7 @@ public class XDDFDataSourcesFactory { if (categoryDS.getStrRef() == null) { return new XDDFCategoryDataSource() { private CTNumData category = (CTNumData) categoryDS.getNumRef().getNumCache().copy(); + private String formatCode = category.isSetFormatCode() ? category.getFormatCode() : null; @Override public boolean isCellRange() { @@ -70,6 +71,9 @@ public class XDDFDataSourcesFactory { public String getPointAt(int index) { return category.getPtArray(index).getV(); } + + @Override + public String getFormatCode() { return formatCode; } }; } else { return new XDDFCategoryDataSource() { @@ -94,6 +98,9 @@ public class XDDFDataSourcesFactory { public String getPointAt(int index) { return category.getPtArray(index).getV(); } + + @Override + public String getFormatCode() { return null; } }; } } @@ -287,6 +294,9 @@ public class XDDFDataSourcesFactory { public String getFormula() { return getDataRangeReference(); } + + @Override + public String getFormatCode() { return null; } } private static class LiteralNumericalArrayDataSource<T extends Number> extends NumericalArrayDataSource<T> { @@ -430,5 +440,8 @@ public class XDDFDataSourcesFactory { public boolean isNumeric() { return false; } + + @Override + public String getFormatCode() { return null; } } } 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=1874705&r1=1874704&r2=1874705&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 Mar 2 23:57:05 2020 @@ -26,48 +26,10 @@ import org.openxmlformats.schemas.drawin @Beta public interface XDDFNumericalDataSource<T extends Number> extends XDDFDataSource<T> { - String getFormatCode(); - void setFormatCode(String formatCode); @Override 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