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

Reply via email to