Author: fanningpj
Date: Sun Aug  7 22:19:10 2022
New Revision: 1903272

URL: http://svn.apache.org/viewvc?rev=1903272&view=rev
Log:
basic bubble chart support

Added:
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBubbleChartData.java
   (with props)
    
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/charts/TestXSSFBubbleChartData.java
      - copied, changed from r1903271, 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/charts/TestXSSFScatterChartData.java
Modified:
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFArea3DChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFAreaChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBar3DChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBarChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFDoughnutChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFLine3DChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFLineChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFPie3DChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFPieChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFRadarChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFScatterChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFSurface3DChartData.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFSurfaceChartData.java

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFArea3DChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFArea3DChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFArea3DChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFArea3DChartData.java
 Sun Aug  7 22:19:10 2022
@@ -150,6 +150,13 @@ public class XDDFArea3DChartData extends
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTAreaSer getCTAreaSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFAreaChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFAreaChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFAreaChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFAreaChartData.java
 Sun Aug  7 22:19:10 2022
@@ -23,12 +23,7 @@ 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.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;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 
 @Beta
 public class XDDFAreaChartData extends XDDFChartData {
@@ -131,6 +126,13 @@ public class XDDFAreaChartData extends X
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTAreaSer getCTAreaSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBar3DChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBar3DChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBar3DChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBar3DChartData.java
 Sun Aug  7 22:19:10 2022
@@ -24,12 +24,7 @@ import org.apache.poi.ooxml.util.POIXMLU
 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.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;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 
 @Beta
 public class XDDFBar3DChartData extends XDDFChartData {
@@ -202,6 +197,13 @@ public class XDDFBar3DChartData extends
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTBarSer getCTBarSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBarChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBarChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBarChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBarChartData.java
 Sun Aug  7 22:19:10 2022
@@ -24,12 +24,7 @@ import org.apache.poi.ooxml.util.POIXMLU
 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.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;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 
 @Beta
 public class XDDFBarChartData extends XDDFChartData {
@@ -192,6 +187,13 @@ public class XDDFBarChartData extends XD
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTBarSer getCTBarSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Added: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBubbleChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBubbleChartData.java?rev=1903272&view=auto
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBubbleChartData.java
 (added)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBubbleChartData.java
 Sun Aug  7 22:19:10 2022
@@ -0,0 +1,224 @@
+/* ====================================================================
+   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 java.util.List;
+import java.util.Map;
+import java.util.Collections;
+
+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.CTDPt;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTBubbleChart;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTBubbleSer;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumData;
+
+/**
+ * @since POI 5.2.3
+ */
+@Beta
+public class XDDFBubbleChartData extends XDDFChartData {
+    private CTBubbleChart chart;
+
+    public XDDFBubbleChartData(
+            XDDFChart parent,
+            CTBubbleChart chart,
+            XDDFChartAxis category,
+            XDDFValueAxis values) {
+        super(parent);
+        this.chart = chart;
+        Map<Long, XDDFChartAxis> categories = null;
+        Map<Long, XDDFValueAxis> mapValues = null;
+        categories = Collections.singletonMap(category.getId(), category);
+        mapValues = Collections.singletonMap(values.getId(), values);
+        for (CTBubbleSer series : chart.getSerList()) {
+            this.series.add(new Series(series, series.getXVal(), 
series.getYVal()));
+        }
+        defineAxes(categories, mapValues);
+    }
+
+    @Internal
+    protected XDDFBubbleChartData(
+            XDDFChart parent,
+            CTBubbleChart chart,
+            Map<Long, XDDFChartAxis> categories,
+            Map<Long, XDDFValueAxis> values) {
+        super(parent);
+        this.chart = chart;
+        for (CTBubbleSer series : chart.getSerList()) {
+            this.series.add(new Series(series, series.getXVal(), 
series.getYVal()));
+        }
+        defineAxes(categories, values);
+    }
+
+    private void defineAxes(Map<Long, XDDFChartAxis> categories, Map<Long, 
XDDFValueAxis> values) {
+        if (chart.sizeOfAxIdArray() == 0) {
+            for (Long id : categories.keySet()) {
+                chart.addNewAxId().setVal(id);
+            }
+            for (Long id : values.keySet()) {
+                chart.addNewAxId().setVal(id);
+            }
+        }
+        defineAxes(chart.getAxIdArray(), categories, values);
+    }
+
+    @Internal
+    @Override
+    protected void removeCTSeries(int n) {
+        chart.removeSer(n);
+    }
+
+    @Override
+    public void setVaryColors(Boolean varyColors) {
+        if (varyColors == null) {
+            if (chart.isSetVaryColors()) {
+                chart.unsetVaryColors();
+            }
+        } else {
+            if (chart.isSetVaryColors()) {
+                chart.getVaryColors().setVal(varyColors);
+            } else {
+                chart.addNewVaryColors().setVal(varyColors);
+            }
+        }
+    }
+
+    @Override
+    public XDDFChartData.Series addSeries(XDDFDataSource<?> category,
+                                          XDDFNumericalDataSource<? extends 
Number> values) {
+        final long index = this.parent.incrementSeriesCount();
+        try {
+            final CTBubbleSer ctSer = this.chart.addNewSer();
+            ctSer.addNewXVal();
+            ctSer.addNewYVal();
+            ctSer.addNewIdx().setVal(index);
+            ctSer.addNewOrder().setVal(index);
+            final Series added = new Series(ctSer, category, values);
+            this.series.add(added);
+            return added;
+        } catch (Exception ex) {
+           throw new RuntimeException(ex);
+        }
+    }
+
+    public class Series extends XDDFChartData.Series {
+        private CTBubbleSer series;
+
+        protected Series(CTBubbleSer series, XDDFDataSource<?> category, 
XDDFNumericalDataSource<?> values) {
+            super(category, values);
+            this.series = series;
+        }
+
+        /**
+         * @since POI 5.2.3
+         */
+        public CTBubbleSer getCTBubbleSer() {
+            return series;
+        }
+
+        protected Series(CTBubbleSer series, CTAxDataSource category, 
CTNumDataSource values) {
+            super(XDDFDataSourcesFactory.fromDataSource(category), 
XDDFDataSourcesFactory.fromDataSource(values));
+            this.series = series;
+        }
+
+        public void setBubbleSizes(XDDFNumericalDataSource<?> values) {
+            try {
+                if (series.isSetBubbleSize()) series.unsetBubbleSize();
+                CTNumDataSource bubbleSizes = series.addNewBubbleSize();
+                CTNumData cache = retrieveNumCache(bubbleSizes, values);
+                values.fillNumericalCache(cache);
+            } catch (Exception ex) {
+                throw new RuntimeException(ex);
+            }
+        }
+
+        @Override
+        protected CTSerTx getSeriesText() {
+            if (series.isSetTx()) {
+                return series.getTx();
+            } else {
+                return series.addNewTx();
+            }
+        }
+
+        @Override
+        public void setShowLeaderLines(boolean showLeaderLines) {
+            if (!series.isSetDLbls()) {
+                series.addNewDLbls();
+            }
+            if (series.getDLbls().isSetShowLeaderLines()) {
+                series.getDLbls().getShowLeaderLines().setVal(showLeaderLines);
+            } else {
+                
series.getDLbls().addNewShowLeaderLines().setVal(showLeaderLines);
+            }
+        }
+
+        @Override
+        public XDDFShapeProperties getShapeProperties() {
+            if (series.isSetSpPr()) {
+                return new XDDFShapeProperties(series.getSpPr());
+            } else {
+                return null;
+            }
+        }
+
+        @Override
+        public void setShapeProperties(XDDFShapeProperties properties) {
+            if (properties == null) {
+                if (series.isSetSpPr()) {
+                    series.unsetSpPr();
+                }
+            } else {
+                if (series.isSetSpPr()) {
+                    series.setSpPr(properties.getXmlObject());
+                } else {
+                    series.addNewSpPr().set(properties.getXmlObject());
+                }
+            }
+        }
+
+        @Override
+        protected CTAxDataSource getAxDS() {
+            return series.getXVal();
+        }
+
+        @Override
+        protected CTNumDataSource getNumDS() {
+            return series.getYVal();
+        }
+
+        @Override
+        protected void setIndex(long val) {
+            series.getIdx().setVal(val);
+        }
+
+        @Override
+        protected void setOrder(long val) {
+            series.getOrder().setVal(val);
+        }
+
+        @Override
+        protected List<CTDPt> getDPtList() {
+            return series.getDPtList();
+        }
+    }
+}

Propchange: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFBubbleChartData.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChartData.java
 Sun Aug  7 22:19:10 2022
@@ -380,7 +380,7 @@ public abstract class XDDFChartData {
             return strCache;
         }
 
-        private CTNumData retrieveNumCache(final CTNumDataSource 
numDataSource, XDDFDataSource<?> data) {
+        protected CTNumData retrieveNumCache(final CTNumDataSource 
numDataSource, XDDFDataSource<?> data) {
             CTNumData numCache;
             if (data.isReference()) {
                 CTNumRef numRef;

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFDoughnutChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFDoughnutChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFDoughnutChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFDoughnutChartData.java
 Sun Aug  7 22:19:10 2022
@@ -23,12 +23,7 @@ import org.apache.poi.ooxml.util.POIXMLU
 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;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 
 @Beta
 public class XDDFDoughnutChartData extends XDDFChartData {
@@ -142,6 +137,13 @@ public class XDDFDoughnutChartData exten
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTPieSer getCTPieSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFLine3DChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFLine3DChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFLine3DChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFLine3DChartData.java
 Sun Aug  7 22:19:10 2022
@@ -87,31 +87,31 @@ public class XDDFLine3DChartData extends
         return Grouping.valueOf(chart.getGrouping().getVal());
     }
 
-   public void setGrouping(Grouping grouping) {
-      if (chart.getGrouping() != null) {
-         chart.getGrouping().setVal(grouping.underlying);
-      } else {
-         chart.addNewGrouping().setVal(grouping.underlying);
-      }
-   }
-
-   public Integer getGapDepth() {
-       return (chart.isSetGapDepth()) ? 
POIXMLUnits.parsePercent(chart.getGapDepth().xgetVal()) / 1000 : null;
-   }
-
-   public void setGapDepth(Integer depth) {
-       if (depth == null) {
-           if (chart.isSetGapDepth()) {
-               chart.unsetGapDepth();
-           }
-       } else {
-           if (chart.isSetGapDepth()) {
-               chart.getGapDepth().setVal(depth);
-           } else {
-               chart.addNewGapDepth().setVal(depth);
-           }
-       }
-   }
+    public void setGrouping(Grouping grouping) {
+        if (chart.getGrouping() != null) {
+            chart.getGrouping().setVal(grouping.underlying);
+        } else {
+            chart.addNewGrouping().setVal(grouping.underlying);
+        }
+    }
+
+    public Integer getGapDepth() {
+        return (chart.isSetGapDepth()) ? 
POIXMLUnits.parsePercent(chart.getGapDepth().xgetVal()) / 1000 : null;
+    }
+
+    public void setGapDepth(Integer depth) {
+        if (depth == null) {
+            if (chart.isSetGapDepth()) {
+                chart.unsetGapDepth();
+            }
+        } else {
+            if (chart.isSetGapDepth()) {
+                chart.getGapDepth().setVal(depth);
+            } else {
+                chart.addNewGapDepth().setVal(depth);
+            }
+        }
+    }
 
     @Override
     public XDDFChartData.Series addSeries(XDDFDataSource<?> category,
@@ -141,6 +141,13 @@ public class XDDFLine3DChartData extends
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTLineSer getCTLineSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFLineChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFLineChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFLineChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFLineChartData.java
 Sun Aug  7 22:19:10 2022
@@ -23,13 +23,7 @@ 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;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 
 @Beta
 public class XDDFLineChartData extends XDDFChartData {
@@ -122,6 +116,13 @@ public class XDDFLineChartData extends X
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTLineSer getCTLineSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFPie3DChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFPie3DChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFPie3DChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFPie3DChartData.java
 Sun Aug  7 22:19:10 2022
@@ -22,12 +22,7 @@ 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;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 
 @Beta
 public class XDDFPie3DChartData extends XDDFChartData {
@@ -91,6 +86,13 @@ public class XDDFPie3DChartData extends
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTPieSer getCTPieSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFPieChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFPieChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFPieChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFPieChartData.java
 Sun Aug  7 22:19:10 2022
@@ -116,6 +116,13 @@ public class XDDFPieChartData extends XD
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTPieSer getCTPieSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFRadarChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFRadarChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFRadarChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFRadarChartData.java
 Sun Aug  7 22:19:10 2022
@@ -23,13 +23,7 @@ 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;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTRadarStyle;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 
 @Beta
 public class XDDFRadarChartData extends XDDFChartData {
@@ -122,6 +116,13 @@ public class XDDFRadarChartData extends
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTRadarSer getCTRadarSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFScatterChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFScatterChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFScatterChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFScatterChartData.java
 Sun Aug  7 22:19:10 2022
@@ -23,14 +23,7 @@ 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;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTScatterSer;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTScatterStyle;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 
 @Beta
 public class XDDFScatterChartData extends XDDFChartData {
@@ -128,6 +121,13 @@ public class XDDFScatterChartData extend
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTScatterSer getCTScatterSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFSurface3DChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFSurface3DChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFSurface3DChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFSurface3DChartData.java
 Sun Aug  7 22:19:10 2022
@@ -23,12 +23,7 @@ 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;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTSurfaceSer;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 
 @Beta
 public class XDDFSurface3DChartData extends XDDFChartData {
@@ -128,6 +123,13 @@ public class XDDFSurface3DChartData exte
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTSurfaceSer getCTSurfaceSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFSurfaceChartData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFSurfaceChartData.java?rev=1903272&r1=1903271&r2=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFSurfaceChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFSurfaceChartData.java
 Sun Aug  7 22:19:10 2022
@@ -128,6 +128,13 @@ public class XDDFSurfaceChartData extend
             this.series = series;
         }
 
+        /**
+         * @since POI 5.2.3
+         */
+        public CTSurfaceSer getCTSurfaceSer() {
+            return series;
+        }
+
         @Override
         protected CTSerTx getSeriesText() {
             if (series.isSetTx()) {

Copied: 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/charts/TestXSSFBubbleChartData.java
 (from r1903271, 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/charts/TestXSSFScatterChartData.java)
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/charts/TestXSSFBubbleChartData.java?p2=poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/charts/TestXSSFBubbleChartData.java&p1=poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/charts/TestXSSFScatterChartData.java&r1=1903271&r2=1903272&rev=1903272&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/charts/TestXSSFScatterChartData.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/charts/TestXSSFBubbleChartData.java
 Sun Aug  7 22:19:10 2022
@@ -17,63 +17,215 @@
 
 package org.apache.poi.xssf.usermodel.charts;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertSame;
-
-import java.io.IOException;
-
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.DataFormat;
+import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.util.CellRangeAddress;
-import org.apache.poi.ss.util.SheetBuilder;
-import org.apache.poi.xddf.usermodel.chart.AxisPosition;
-import org.apache.poi.xddf.usermodel.chart.ChartTypes;
-import org.apache.poi.xddf.usermodel.chart.ScatterStyle;
-import org.apache.poi.xddf.usermodel.chart.XDDFChartData;
-import org.apache.poi.xddf.usermodel.chart.XDDFDataSource;
-import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
-import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
-import org.apache.poi.xddf.usermodel.chart.XDDFScatterChartData;
-import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis;
-import org.apache.poi.xssf.usermodel.XSSFChart;
-import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
-import org.apache.poi.xssf.usermodel.XSSFDrawing;
-import org.apache.poi.xssf.usermodel.XSSFSheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.xddf.usermodel.PresetColor;
+import org.apache.poi.xddf.usermodel.XDDFColor;
+import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
+import org.apache.poi.xddf.usermodel.XDDFSolidFillProperties;
+import org.apache.poi.xddf.usermodel.chart.*;
+import org.apache.poi.xssf.usermodel.*;
 import org.junit.jupiter.api.Test;
+import org.openxmlformats.schemas.drawingml.x2006.chart.*;
+
+import java.io.IOException;
+import java.util.GregorianCalendar;
 
 /**
- * Tests for XSSFScatterChartData.
+ * Tests for XSSFBubbleChartData.
  */
-public final class TestXSSFScatterChartData {
-
-    private static final Object[][] plotData = {
-            {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"},
-            {  1,    2,   3,    4,    5,   6,    7,   8,    9,  10}
-    };
+public final class TestXSSFBubbleChartData {
 
     @Test
-    void testOneSeriesPlot() throws IOException {
-        XSSFWorkbook wb = new XSSFWorkbook();
-        XSSFSheet sheet = (XSSFSheet) new SheetBuilder(wb, plotData).build();
-        XSSFDrawing drawing = sheet.createDrawingPatriarch();
-        XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 1, 1, 10, 
30);
-        XSSFChart chart = drawing.createChart(anchor);
-
-        XDDFValueAxis bottomAxis = chart.createValueAxis(AxisPosition.BOTTOM);
-        XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
-
-        XDDFDataSource<String> xs = 
XDDFDataSourcesFactory.fromStringCellRange(sheet, 
CellRangeAddress.valueOf("A1:J1"));
-        XDDFNumericalDataSource<Double> ys = 
XDDFDataSourcesFactory.fromNumericCellRange(sheet, 
CellRangeAddress.valueOf("A2:J2"));
-
-        XDDFScatterChartData scatterChartData = (XDDFScatterChartData) 
chart.createData(ChartTypes.SCATTER, bottomAxis, leftAxis);
-        XDDFChartData.Series series = scatterChartData.addSeries(xs, ys);
-
-        assertEquals(ScatterStyle.LINE_MARKER, scatterChartData.getStyle());
-        assertNotNull(series);
-        assertEquals(1, scatterChartData.getSeriesCount());
-        assertSame(series, scatterChartData.getSeries(0));
+    void testExample() throws IOException {
+        Object[][] chartData = new Object[][]{
+                new Object[]{"", "Category 1"},
+                new Object[]{"Bubble Size", "Bubble Date"},
+                new Object[]{1000, new GregorianCalendar(2020, 0, 1)},
+                new Object[]{10, new GregorianCalendar(2020, 0, 1)},
+                new Object[]{300, new GregorianCalendar(2021, 0, 1)},
+                new Object[]{"", ""},
+                new Object[]{"", "Category 2"},
+                new Object[]{"Bubble Size", "Bubble Date"},
+                new Object[]{100, new GregorianCalendar(2018, 0, 1)},
+                new Object[]{100, new GregorianCalendar(2020, 0, 1)}
+        };
+
+        try (XSSFWorkbook wb = new XSSFWorkbook()) {
+            XSSFSheet sheet = wb.createSheet("bubblechart");
+            DataFormat format = wb.createDataFormat();
+            XSSFCellStyle dateStyle = wb.createCellStyle();
+            dateStyle.setDataFormat(14);
+
+            // put sheet data
+            Row row;
+            Cell cell;
+            int rowIndex = 0;
+            int colIndex = 0;
+            for (Object[] dataRow : chartData) {
+                row = sheet.createRow((short) rowIndex);
+                colIndex = 0;
+                for (Object value : dataRow) {
+                    cell = row.createCell((short) colIndex);
+                    if (value instanceof String) 
cell.setCellValue((String)value);
+                    if (value instanceof Number) 
cell.setCellValue(((Number)value).doubleValue());
+                    if (value instanceof GregorianCalendar) {
+                        cell.setCellValue((GregorianCalendar)value);
+                        cell.setCellStyle(dateStyle);
+                    }
+                    colIndex++;
+                }
+                rowIndex++;
+            }
+
+            sheet.autoSizeColumn(0);
+            sheet.autoSizeColumn(1);
+
+            // create the chart
+
+            // chart data sources
+            XDDFDataSource<Double> xs1 = 
XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(2, 4, 
1, 1));
+            XDDFNumericalDataSource<Double> ys1 = 
XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(2, 4, 
0, 0));
+            XDDFNumericalDataSource<Double> bSz1 = 
XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(2, 4, 
0, 0));
+
+            XDDFDataSource<Double> xs2 = 
XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(8, 9, 
1, 1));
+            XDDFNumericalDataSource<Double> ys2 = 
XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(8, 9, 
0, 0));
+            XDDFNumericalDataSource<Double> bSz2 = 
XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(8, 9, 
0, 0));
+
+            // chart in drawing
+            XSSFDrawing drawing = sheet.createDrawingPatriarch();
+            XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 3, 0, 
15, 20);
+            XSSFChart chart = drawing.createChart(anchor);
+            chart.setTitleText("Chart Title");
+            chart.setTitleOverlay(false);
+            
chart.getFormattedTitle().getParagraph(0).addDefaultRunProperties().setFontSize(20d);
+
+            // value axis x
+            XDDFValueAxis valAxisX = 
chart.createValueAxis(AxisPosition.BOTTOM);
+            valAxisX.setTitle("Axis Title");
+
+            // value axis y
+            XDDFValueAxis valAxisY = chart.createValueAxis(AxisPosition.LEFT);
+            valAxisY.setTitle("Axis Title");
+
+            // cross axes
+            valAxisY.setCrosses(AxisCrosses.AUTO_ZERO);
+
+            // chart data
+            //XDDFChartData data = chart.createData(ChartTypes.???, valAxisX, 
valAxisY);
+            XDDFBubbleChartData data = new XDDFBubbleChartData(chart, 
chart.getCTChart().getPlotArea().addNewBubbleChart(), valAxisX, valAxisY);
+
+            // series
+            XDDFBubbleChartData.Series series1 = 
(XDDFBubbleChartData.Series)data.addSeries(xs1, ys1);
+            series1.setTitle("Category 1", new 
CellReference(sheet.getSheetName(), 0, 1, true, true));
+            // set bubble sizes
+            series1.setBubbleSizes(bSz1);
+            // add data labels
+            // pos 8 = INT_R , showVal = true, showLegendKey= false, 
showCatName = true
+            CTDLbls ctDLbls = setDataLabels(series1, 8, true, false, true);
+
+            XDDFBubbleChartData.Series series2 = 
(XDDFBubbleChartData.Series)data.addSeries(xs2, ys2);
+            series2.setTitle("Category 2", new 
CellReference(sheet.getSheetName(), 6, 1, true, true));
+            // set bubble sizes
+            series2.setBubbleSizes(bSz2);
+            // add data labels
+            // pos 8 = INT_R , showVal = true, showLegendKey= false, 
showCatName = true
+            ctDLbls = setDataLabels(series2, 8, true, false, true);
+
+            // plot chart
+            chart.plot(data);
+
+            // legend
+            XDDFChartLegend legend = chart.getOrAddLegend();
+            legend.setPosition(LegendPosition.RIGHT);
+
+            // set series fill color
+            solidFillSeries(data, 0, PresetColor.BLUE);
+            solidFillSeries(data, 1, PresetColor.RED);
+
+            // set rounded corners false
+            setRoundedCorners(chart, false);
+
+            // Write the output to a file
+            try (UnsynchronizedByteArrayOutputStream outStream = new 
UnsynchronizedByteArrayOutputStream()) {
+                wb.write(outStream);
+                try (XSSFWorkbook wb2 = new 
XSSFWorkbook(outStream.toInputStream())) {
+                    // see if this fails
+                }
+            }
+        }
+    }
+
+    private static void solidFillSeries(XDDFChartData data, int index, 
PresetColor color) {
+        XDDFSolidFillProperties fill = new 
XDDFSolidFillProperties(XDDFColor.from(color));
+        XDDFChartData.Series series = data.getSeries(index);
+        XDDFShapeProperties properties = series.getShapeProperties();
+        if (properties == null) {
+            properties = new XDDFShapeProperties();
+        }
+        properties.setFillProperties(fill);
+        series.setShapeProperties(properties);
+    }
+
+    private static CTDLbls setDataLabels(XDDFChartData.Series series, int pos, 
boolean... show) {
+        /*
+        INT_BEST_FIT   1
+        INT_B          2
+        INT_CTR        3
+        INT_IN_BASE    4
+        INT_IN_END     5
+        INT_L          6
+        INT_OUT_END    7
+        INT_R          8
+        INT_T          9
+        */
+        CTDLbls ctDLbls = null;
+        if (series instanceof XDDFBarChartData.Series) {
+            CTBarSer ctBarSer = 
((XDDFBarChartData.Series)series).getCTBarSer();
+            if (ctBarSer.isSetDLbls()) ctBarSer.unsetDLbls();
+            ctDLbls = ctBarSer.addNewDLbls();
+            if (!(pos == 3 || pos == 4 || pos == 5 || pos == 7)) pos = 3; // 
bar chart does not provide other pos
+            ctDLbls.addNewDLblPos().setVal(STDLblPos.Enum.forInt(pos));
+        } else if (series instanceof XDDFLineChartData.Series) {
+            CTLineSer ctLineSer = 
((XDDFLineChartData.Series)series).getCTLineSer();
+            if (ctLineSer.isSetDLbls()) ctLineSer.unsetDLbls();
+            ctDLbls = ctLineSer.addNewDLbls();
+            if (!(pos == 3 || pos == 6 || pos == 8 || pos == 9 || pos == 2)) 
pos = 3; // line chart does not provide other pos
+            ctDLbls.addNewDLblPos().setVal(STDLblPos.Enum.forInt(pos));
+        } else if (series instanceof XDDFPieChartData.Series) {
+            CTPieSer ctPieSer = 
((XDDFPieChartData.Series)series).getCTPieSer();
+            if (ctPieSer.isSetDLbls()) ctPieSer.unsetDLbls();
+            ctDLbls = ctPieSer.addNewDLbls();
+            if (!(pos == 3 || pos == 1 || pos == 4 || pos == 5)) pos = 3; // 
pie chart does not provide other pos
+            ctDLbls.addNewDLblPos().setVal(STDLblPos.Enum.forInt(pos));
+        } else if (series instanceof XDDFBubbleChartData.Series) {
+            CTBubbleSer ctBubbleSer = 
((XDDFBubbleChartData.Series)series).getCTBubbleSer();
+            if (ctBubbleSer.isSetDLbls()) ctBubbleSer.unsetDLbls();
+            ctDLbls = ctBubbleSer.addNewDLbls();
+            if (!(pos == 3 || pos == 2 || pos == 6 || pos == 8 || pos == 9)) 
pos = 3; // bubble chart does not provide other pos
+            ctDLbls.addNewDLblPos().setVal(STDLblPos.Enum.forInt(pos));
+        }// else if ...
+
+        if (ctDLbls != null) {
+            ctDLbls.addNewShowVal().setVal((show.length>0)?show[0]:false);
+            
ctDLbls.addNewShowLegendKey().setVal((show.length>1)?show[1]:false);
+            ctDLbls.addNewShowCatName().setVal((show.length>2)?show[2]:false);
+            ctDLbls.addNewShowSerName().setVal((show.length>3)?show[3]:false);
+            ctDLbls.addNewShowPercent().setVal((show.length>4)?show[4]:false);
+            
ctDLbls.addNewShowBubbleSize().setVal((show.length>5)?show[5]:false);
+            
ctDLbls.addNewShowLeaderLines().setVal((show.length>6)?show[8]:false);
+
+            return ctDLbls;
+        }
+        return null;
+    }
 
-        chart.plot(scatterChartData);
-        wb.close();
+    private static void setRoundedCorners(XDDFChart chart, boolean setVal) {
+        if (chart.getCTChartSpace().getRoundedCorners() == null) 
chart.getCTChartSpace().addNewRoundedCorners();
+        chart.getCTChartSpace().getRoundedCorners().setVal(setVal);
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to