]> source.dussan.org Git - poi.git/commitdiff
Allow for numerical category in charts
authorAlain Béarez <abearez@apache.org>
Mon, 2 Mar 2020 23:57:05 +0000 (23:57 +0000)
committerAlain Béarez <abearez@apache.org>
Mon, 2 Mar 2020 23:57:05 +0000 (23:57 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1874705 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSource.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDataSourcesFactory.java
src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFNumericalDataSource.java

index 1066e6da81212ad430c2f677e7ccf2904e4cd209..937ed1bbb6ec30fb2aa2e7d72fcf91b23589c025 100644 (file)
@@ -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);
index 2a51f32bd376aacb7c1d71e2d97b718c57ab4dc4..3bfd18bbe8b58cdf72506faaad579cd26fb0d519 100644 (file)
@@ -21,6 +21,8 @@ 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;
 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
      */
index b2bf4f6806213a8f0f7c1dfdb65cbdba2b699dc3..c45fbaa6a78f125f76f58f6f05dbb2f92b53ad4a 100644 (file)
@@ -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; }
     }
 }
index 74e1fb33649fead34877fb482d89d2a69365ba52..95ef676462f133cecadfad0d314cffa336a1dbc0 100644 (file)
@@ -26,48 +26,10 @@ import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumVal;
 
 @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);
-            }
-        }
-    }
 }