You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ab...@apache.org on 2017/11/26 14:03:03 UTC

svn commit: r1816383 [4/5] - in /poi/trunk: ./ src/examples/src/org/apache/poi/xslf/usermodel/ src/examples/src/org/apache/poi/xssf/usermodel/examples/ src/java/org/apache/poi/hssf/usermodel/ src/java/org/apache/poi/ss/usermodel/ src/java/org/apache/po...

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java Sun Nov 26 14:03:01 2017
@@ -26,15 +26,13 @@ import java.util.List;
 
 import javax.xml.namespace.QName;
 
-import org.apache.poi.POIXMLDocumentPart;
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.ss.usermodel.Chart;
-import org.apache.poi.ss.usermodel.charts.AxisPosition;
 import org.apache.poi.ss.usermodel.charts.ChartAxis;
 import org.apache.poi.ss.usermodel.charts.ChartAxisFactory;
 import org.apache.poi.ss.usermodel.charts.ChartData;
-import org.apache.poi.util.Internal;
 import org.apache.poi.util.Removal;
+import org.apache.poi.xddf.usermodel.chart.XDDFChart;
 import org.apache.poi.xssf.usermodel.charts.XSSFCategoryAxis;
 import org.apache.poi.xssf.usermodel.charts.XSSFChartAxis;
 import org.apache.poi.xssf.usermodel.charts.XSSFChartDataFactory;
@@ -46,7 +44,6 @@ import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlObject;
 import org.apache.xmlbeans.XmlOptions;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTCatAx;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTChartSpace;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTDateAx;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTPageMargins;
@@ -56,7 +53,6 @@ import org.openxmlformats.schemas.drawin
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTTitle;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTTx;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTValAx;
-import org.openxmlformats.schemas.drawingml.x2006.chart.ChartSpaceDocument;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextField;
@@ -68,139 +64,119 @@ import org.w3c.dom.Text;
 /**
  * Represents a SpreadsheetML Chart
  */
-public final class XSSFChart extends POIXMLDocumentPart implements Chart, ChartAxisFactory {
+public final class XSSFChart extends XDDFChart implements Chart, ChartAxisFactory {
 
-	/**
-	 * Parent graphic frame.
-	 */
-	private XSSFGraphicFrame frame;
+    /**
+     * Parent graphic frame.
+     */
+    private XSSFGraphicFrame frame;
 
-	/**
-	 * Root element of the SpreadsheetML Chart part
-	 */
-	private CTChartSpace chartSpace;
-	/**
-	 * The Chart within that
-	 */
-	private CTChart chart;
+    @Deprecated
+    @Removal(version="4.2")
+    List<XSSFChartAxis> axis = new ArrayList<>();
 
-	List<XSSFChartAxis> axis = new ArrayList<>();
+    /**
+     * Create a new SpreadsheetML chart
+     */
+    protected XSSFChart() {
+        super();
+        createChart();
+    }
 
-	/**
-	 * Create a new SpreadsheetML chart
-	 */
-	protected XSSFChart() {
-		super();
-		createChart();
-	}
+    /**
+     * Construct a SpreadsheetML chart from a package part.
+     *
+     * @param part
+     *            the package part holding the chart data, the content type must be
+     *            <code>application/vnd.openxmlformats-officedocument.drawingml.chart+xml</code>
+     *
+     * @since POI 3.14-Beta1
+     */
+    protected XSSFChart(PackagePart part) throws IOException, XmlException {
+        super(part);
+    }
 
-	/**
-	 * Construct a SpreadsheetML chart from a package part.
-	 *
-	 * @param part the package part holding the chart data,
-	 * the content type must be <code>application/vnd.openxmlformats-officedocument.drawingml.chart+xml</code>
-	 * 
-	 * @since POI 3.14-Beta1
-	 */
-	protected XSSFChart(PackagePart part) throws IOException, XmlException {
-		super(part);
+    /**
+     * Construct a new CTChartSpace bean. By default, it's just an empty placeholder for chart objects.
+     */
+    private void createChart() {
+        CTPlotArea plotArea = getCTPlotArea();
 
-		chartSpace = ChartSpaceDocument.Factory.parse(part.getInputStream(), DEFAULT_XML_OPTIONS).getChartSpace(); 
-		chart = chartSpace.getChart();
-	}
-	
-	/**
-	 * Construct a new CTChartSpace bean.
-	 * By default, it's just an empty placeholder for chart objects.
-	 */
-	private void createChart() {
-		chartSpace = CTChartSpace.Factory.newInstance();
-		chart = chartSpace.addNewChart();
-		CTPlotArea plotArea = chart.addNewPlotArea();
-
-		plotArea.addNewLayout();
-		chart.addNewPlotVisOnly().setVal(true);
-
-		CTPrintSettings printSettings = chartSpace.addNewPrintSettings();
-		printSettings.addNewHeaderFooter();
-
-		CTPageMargins pageMargins = printSettings.addNewPageMargins();
-		pageMargins.setB(0.75);
-		pageMargins.setL(0.70);
-		pageMargins.setR(0.70);
-		pageMargins.setT(0.75);
-		pageMargins.setHeader(0.30);
-		pageMargins.setFooter(0.30);
-		printSettings.addNewPageSetup();
-	}
+        plotArea.addNewLayout();
+        chart.addNewPlotVisOnly().setVal(true);
 
-	/**
-	 * Return the underlying CTChartSpace bean, the root element of the SpreadsheetML Chart part.
-	 *
-	 * @return the underlying CTChartSpace bean
-	 */
-	@Internal
-	public CTChartSpace getCTChartSpace(){
-		return chartSpace;
-	}
+        CTPrintSettings printSettings = chartSpace.addNewPrintSettings();
+        printSettings.addNewHeaderFooter();
 
-	/**
-	 * Return the underlying CTChart bean, within the Chart Space
-	 *
-	 * @return the underlying CTChart bean
-	 */
-	@Internal
-	public CTChart getCTChart(){
-		return chart;
-	}
-
-	@Override
-	protected void commit() throws IOException {
-		XmlOptions xmlOptions = new XmlOptions(DEFAULT_XML_OPTIONS);
-
-		/*
-		   Saved chart space must have the following namespaces set:
-		   <c:chartSpace
-		      xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart"
-		      xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
-		      xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
-		 */
-		xmlOptions.setSaveSyntheticDocumentElement(new QName(CTChartSpace.type.getName().getNamespaceURI(), "chartSpace", "c"));
-
-		PackagePart part = getPackagePart();
-		OutputStream out = part.getOutputStream();
-		chartSpace.save(out, xmlOptions);
-		out.close();
-	}
+        CTPageMargins pageMargins = printSettings.addNewPageMargins();
+        pageMargins.setB(0.75);
+        pageMargins.setL(0.70);
+        pageMargins.setR(0.70);
+        pageMargins.setT(0.75);
+        pageMargins.setHeader(0.30);
+        pageMargins.setFooter(0.30);
+        printSettings.addNewPageSetup();
+    }
 
-	/**
-	 * Returns the parent graphic frame.
-	 * @return the graphic frame this chart belongs to
-	 */
-	public XSSFGraphicFrame getGraphicFrame() {
-		return frame;
-	}
+    @Override
+    protected void commit() throws IOException {
+        XmlOptions xmlOptions = new XmlOptions(DEFAULT_XML_OPTIONS);
+
+        /*
+         * Saved chart space must have the following namespaces set: <c:chartSpace
+         * xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart"
+         * xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r=
+         * "http://schemas.openxmlformats.org/officeDocument/2006/relationships">
+         */
+        xmlOptions.setSaveSyntheticDocumentElement(new QName(CTChartSpace.type.getName().getNamespaceURI(), "chartSpace", "c"));
+
+        PackagePart part = getPackagePart();
+        try (OutputStream out = part.getOutputStream()) {
+            chartSpace.save(out, xmlOptions);
+        }
+    }
 
-	/**
-	 * Sets the parent graphic frame.
-	 */
-	protected void setGraphicFrame(XSSFGraphicFrame frame) {
-		this.frame = frame;
-	}
+    /**
+     * Returns the parent graphic frame.
+     *
+     * @return the graphic frame this chart belongs to
+     */
+    public XSSFGraphicFrame getGraphicFrame() {
+        return frame;
+    }
+
+    /**
+     * Sets the parent graphic frame.
+     */
+    protected void setGraphicFrame(XSSFGraphicFrame frame) {
+        this.frame = frame;
+    }
 
+    @Override
+    @Deprecated
+    @Removal(version="4.2")
 	public XSSFChartDataFactory getChartDataFactory() {
 		return XSSFChartDataFactory.getInstance();
 	}
 
+    @Override
+    @Deprecated
+    @Removal(version="4.2")
 	public XSSFChart getChartAxisFactory() {
 		return this;
 	}
 
+    @Override
+    @Deprecated
+    @Removal(version="4.2")
 	public void plot(ChartData data, ChartAxis... chartAxis) {
 		data.fillChart(this, chartAxis);
 	}
 
-	public XSSFValueAxis createValueAxis(AxisPosition pos) {
+    @Override
+    @Deprecated
+    @Removal(version="4.2")
+	public XSSFValueAxis createValueAxis(org.apache.poi.ss.usermodel.charts.AxisPosition pos) {
 		long id = axis.size() + 1;
 		XSSFValueAxis valueAxis = new XSSFValueAxis(this, id, pos);
 		if (axis.size() == 1) {
@@ -212,7 +188,10 @@ public final class XSSFChart extends POI
 		return valueAxis;
 	}
 
-	public XSSFCategoryAxis createCategoryAxis(AxisPosition pos) {
+    @Override
+    @Deprecated
+    @Removal(version="4.2")
+	public XSSFCategoryAxis createCategoryAxis(org.apache.poi.ss.usermodel.charts.AxisPosition pos) {
 		long id = axis.size() + 1;
 		XSSFCategoryAxis categoryAxis = new XSSFCategoryAxis(this, id, pos);
 		if (axis.size() == 1) {
@@ -224,46 +203,42 @@ public final class XSSFChart extends POI
 		return categoryAxis;
 	}
 
-	public XSSFDateAxis createDateAxis(AxisPosition pos) {
-	    long id = axis.size() + 1;
-	    XSSFDateAxis dateAxis = new XSSFDateAxis(this, id, pos);
-	    if (axis.size() == 1) {
-	        ChartAxis ax = axis.get(0);
-	        ax.crossAxis(dateAxis);
-	        dateAxis.crossAxis(ax);
-	    }
-	    axis.add(dateAxis);
-	    return dateAxis;
+    @Override
+    @Deprecated
+    @Removal(version="4.2")
+	public XSSFDateAxis createDateAxis(org.apache.poi.ss.usermodel.charts.AxisPosition pos) {
+		long id = axis.size() + 1;
+		XSSFDateAxis dateAxis = new XSSFDateAxis(this, id, pos);
+		if (axis.size() == 1) {
+			ChartAxis ax = axis.get(0);
+			ax.crossAxis(dateAxis);
+			dateAxis.crossAxis(ax);
+		}
+		axis.add(dateAxis);
+		return dateAxis;
 	}
-	
+
+    /**
+     * @deprecated use {@link getAxes} instead
+     */
+    @Override
+    @Deprecated
+    @Removal(version="4.2")
     public List<? extends XSSFChartAxis> getAxis() {
         if (axis.isEmpty() && hasAxis()) {
             parseAxis();
         }
         return axis;
     }
-	
+
+    @Override
+    @Deprecated
+    @Removal(version="4.2")
 	public XSSFManualLayout getManualLayout() {
 		return new XSSFManualLayout(this);
 	}
 
 	/**
-	 * @return true if only visible cells will be present on the chart,
-	 *         false otherwise
-	 */
-	public boolean isPlotOnlyVisibleCells() {
-		return chart.getPlotVisOnly().getVal();
-	}
-
-	/**
-	 * @param plotVisOnly a flag specifying if only visible cells should be
-	 *        present on the chart
-	 */
-	public void setPlotOnlyVisibleCells(boolean plotVisOnly) {
-		chart.getPlotVisOnly().setVal(plotVisOnly);
-	}
-
-	/**
 	 * Returns the title static text, or null if none is set.
 	 * Note that a title formula may be set instead.
 	 * @return static title text, if set
@@ -274,14 +249,14 @@ public final class XSSFChart extends POI
 	public XSSFRichTextString getTitle() {
 	    return getTitleText();
 	}
-	
+
 	/**
      * Returns the title static text, or null if none is set.
      * Note that a title formula may be set instead.
      * Empty text result is for backward compatibility, and could mean the title text is empty or there is a formula instead.
      * Check for a formula first, falling back on text for cleaner logic.
-     * @return static title text if set, 
-     *         null if there is no title, 
+     * @return static title text if set,
+     *         null if there is no title,
      *         empty string if the title text is empty or the title uses a formula instead
 	 */
 	public XSSFRichTextString getTitleText() {
@@ -295,8 +270,8 @@ public final class XSSFChart extends POI
 		StringBuilder text = new StringBuilder(64);
 		XmlObject[] t = title
 			.selectPath("declare namespace a='"+XSSFDrawing.NAMESPACE_A+"' .//a:t");
-		for (int m = 0; m < t.length; m++) {
-			NodeList kids = t[m].getDomNode().getChildNodes();
+		for (XmlObject element : t) {
+			NodeList kids = element.getDomNode().getChildNodes();
 			final int count = kids.getLength();
 			for (int n = 0; n < count; n++) {
 				Node kid = kids.item(n);
@@ -315,161 +290,169 @@ public final class XSSFChart extends POI
 	 * @deprecated POI 3.16, use {@link #setTitleText(String)} instead.
 	 */
     @Deprecated
-    @Removal(version="4.0")
-	public void setTitle(String newTitle) {
-	    
-	}
-	
+    @Removal(version = "4.0")
+    public void setTitle(String newTitle) {
+
+    }
+
     /**
      * Sets the title text as a static string.
-     * @param newTitle to use
+     *
+     * @param newTitle
+     *            to use
      */
-	public void setTitleText(String newTitle) {
-		CTTitle ctTitle;
-		if (chart.isSetTitle()) {
-			ctTitle = chart.getTitle();
-		} else {
-			ctTitle = chart.addNewTitle();
-		}
+    public void setTitleText(String newTitle) {
+        CTTitle ctTitle;
+        if (chart.isSetTitle()) {
+            ctTitle = chart.getTitle();
+        } else {
+            ctTitle = chart.addNewTitle();
+        }
 
-		CTTx tx;
-		if (ctTitle.isSetTx()) {
-			tx = ctTitle.getTx();
-		} else {
-			tx = ctTitle.addNewTx();
-		}
+        CTTx tx;
+        if (ctTitle.isSetTx()) {
+            tx = ctTitle.getTx();
+        } else {
+            tx = ctTitle.addNewTx();
+        }
 
-		if (tx.isSetStrRef()) {
-			tx.unsetStrRef();
-		}
+        if (tx.isSetStrRef()) {
+            tx.unsetStrRef();
+        }
 
-		CTTextBody rich;
-		if (tx.isSetRich()) {
-			rich = tx.getRich();
-		} else {
-			rich = tx.addNewRich();
-			rich.addNewBodyPr();  // body properties must exist (but can be empty)
-		}
+        CTTextBody rich;
+        if (tx.isSetRich()) {
+            rich = tx.getRich();
+        } else {
+            rich = tx.addNewRich();
+            rich.addNewBodyPr(); // body properties must exist (but can be
+                                 // empty)
+        }
 
-		CTTextParagraph para;
-		if (rich.sizeOfPArray() > 0) {
-			para = rich.getPArray(0);
-		} else {
-			para = rich.addNewP();
-		}
+        CTTextParagraph para;
+        if (rich.sizeOfPArray() > 0) {
+            para = rich.getPArray(0);
+        } else {
+            para = rich.addNewP();
+        }
 
-		if (para.sizeOfRArray() > 0) {
-			CTRegularTextRun run = para.getRArray(0);
-			run.setT(newTitle);
-		} else if (para.sizeOfFldArray() > 0) {
-			CTTextField fld = para.getFldArray(0);
-			fld.setT(newTitle);
-		} else {
-			CTRegularTextRun run = para.addNewR();
-			run.setT(newTitle);
-		}
-	}
-	
-	/**
-	 * Get the chart title formula expression if there is one
-	 * @return formula expression or null
-	 */
-	public String getTitleFormula() {
-	    if(! chart.isSetTitle()) {
-	        return null;
-	    }
-
-	    CTTitle title = chart.getTitle();
-	    
-	    if (! title.isSetTx()) {
-	        return null;
-	    }
-	    
-	    CTTx tx = title.getTx();
-	    
-	    if (! tx.isSetStrRef()) {
-	        return null;
-	    }
-	    
-	    return tx.getStrRef().getF();
-	}
-	
-	/**
-	 * Set the formula expression to use for the chart title
-	 * @param formula
-	 */
-	public void setTitleFormula(String formula) {
-	    CTTitle ctTitle;
-	    if (chart.isSetTitle()) {
-	        ctTitle = chart.getTitle();
-	    } else {
-	        ctTitle = chart.addNewTitle();
-	    }
-
-	    CTTx tx;
-	    if (ctTitle.isSetTx()) {
-	        tx = ctTitle.getTx();
-	    } else {
-	        tx = ctTitle.addNewTx();
-	    }
-
-	    if (tx.isSetRich()) {
-	        tx.unsetRich();
-	    }
-	    
-	    CTStrRef strRef;
-	    if (tx.isSetStrRef()) {
-	        strRef = tx.getStrRef();
-	    } else {
-	        strRef = tx.addNewStrRef();
-	    }
-	    
-	    strRef.setF(formula);
-	}
+        if (para.sizeOfRArray() > 0) {
+            CTRegularTextRun run = para.getRArray(0);
+            run.setT(newTitle);
+        } else if (para.sizeOfFldArray() > 0) {
+            CTTextField fld = para.getFldArray(0);
+            fld.setT(newTitle);
+        } else {
+            CTRegularTextRun run = para.addNewR();
+            run.setT(newTitle);
+        }
+    }
+
+    /**
+     * Get the chart title formula expression if there is one
+     *
+     * @return formula expression or null
+     */
+    public String getTitleFormula() {
+        if (!chart.isSetTitle()) {
+            return null;
+        }
+
+        CTTitle title = chart.getTitle();
+
+        if (!title.isSetTx()) {
+            return null;
+        }
+
+        CTTx tx = title.getTx();
+
+        if (!tx.isSetStrRef()) {
+            return null;
+        }
 
+        return tx.getStrRef().getF();
+    }
+
+    /**
+     * Set the formula expression to use for the chart title
+     *
+     * @param formula
+     */
+    public void setTitleFormula(String formula) {
+        CTTitle ctTitle;
+        if (chart.isSetTitle()) {
+            ctTitle = chart.getTitle();
+        } else {
+            ctTitle = chart.addNewTitle();
+        }
+
+        CTTx tx;
+        if (ctTitle.isSetTx()) {
+            tx = ctTitle.getTx();
+        } else {
+            tx = ctTitle.addNewTx();
+        }
+
+        if (tx.isSetRich()) {
+            tx.unsetRich();
+        }
+
+        CTStrRef strRef;
+        if (tx.isSetStrRef()) {
+            strRef = tx.getStrRef();
+        } else {
+            strRef = tx.addNewStrRef();
+        }
+
+        strRef.setF(formula);
+    }
+
+    @Override
+    @Deprecated
+    @Removal(version="4.2")
 	public XSSFChartLegend getOrCreateLegend() {
 		return new XSSFChartLegend(this);
 	}
 
-	public void deleteLegend() {
-		if (chart.isSetLegend()) {
-			chart.unsetLegend();
-		}
-	}
-
+	@Deprecated
+	@Removal(version="4.2")
 	private boolean hasAxis() {
-		CTPlotArea ctPlotArea = chart.getPlotArea();
-		int totalAxisCount =
-			ctPlotArea.sizeOfValAxArray()  +
-			ctPlotArea.sizeOfCatAxArray()  +
-			ctPlotArea.sizeOfDateAxArray() +
-			ctPlotArea.sizeOfSerAxArray();
-		return totalAxisCount > 0;
-	}
-
-	private void parseAxis() {
-		// TODO: add other axis types
-		parseCategoryAxis();
-		parseDateAxis();
-		parseValueAxis();
-	}
-
-	private void parseCategoryAxis() {
-		for (CTCatAx catAx : chart.getPlotArea().getCatAxArray()) {
-			axis.add(new XSSFCategoryAxis(this, catAx));
-		}
+        CTPlotArea ctPlotArea = chart.getPlotArea();
+        int totalAxisCount = ctPlotArea.sizeOfValAxArray() + ctPlotArea.sizeOfCatAxArray() + ctPlotArea.sizeOfDateAxArray() + ctPlotArea.sizeOfSerAxArray();
+        return totalAxisCount > 0;
 	}
 
-	private void parseDateAxis() {
-	    for (CTDateAx dateAx : chart.getPlotArea().getDateAxArray()) {
-	        axis.add(new XSSFDateAxis(this, dateAx));
-	    }
-	}
-	
-	private void parseValueAxis() {
-		for (CTValAx valAx : chart.getPlotArea().getValAxArray()) {
-			axis.add(new XSSFValueAxis(this, valAx));
-		}
-	}
+    @Deprecated
+    @Removal(version="4.2")
+    private void parseAxis() {
+        // TODO: add other axis types
+        parseCategoryAxis();
+        parseDateAxis();
+        parseValueAxis();
+    }
+
+    @Deprecated
+    @Removal(version="4.2")
+    private void parseCategoryAxis() {
+        for (CTCatAx catAx : chart.getPlotArea().getCatAxArray()) {
+            axis.add(new XSSFCategoryAxis(this, catAx));
+        }
+    }
+
+    @Deprecated
+    @Removal(version="4.2")
+    private void parseDateAxis() {
+        for (CTDateAx dateAx : chart.getPlotArea().getDateAxArray()) {
+            axis.add(new XSSFDateAxis(this, dateAx));
+        }
+    }
+
+    @Deprecated
+    @Removal(version="4.2")
+    private void parseValueAxis() {
+        for (CTValAx valAx : chart.getPlotArea().getValAxArray()) {
+            axis.add(new XSSFValueAxis(this, valAx));
+        }
+    }
 
 }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java Sun Nov 26 14:03:01 2017
@@ -239,7 +239,12 @@ public final class XSSFDrawing extends P
         return chart;
     }
 
-	@Override
+	/**
+	 * Creates a chart.
+	 * @param anchor the client anchor describes how this chart is attached to
+	 *               the sheet.
+	 * @return the newly created chart
+	 */
     public XSSFChart createChart(ClientAnchor anchor) {
 		return createChart((XSSFClientAnchor)anchor);
 	}
@@ -389,7 +394,7 @@ public final class XSSFDrawing extends P
 
         /*
          * The shape id of the ole object seems to be a legacy shape id.
-         * 
+         *
          * see 5.3.2.1 legacyDrawing (Legacy Drawing Object):
          * Legacy Shape ID that is unique throughout the entire document.
          * Legacy shape IDs should be assigned based on which portion of the document the
@@ -439,7 +444,7 @@ public final class XSSFDrawing extends P
         cur1.insertAttributeWithValue("moveWithCells", "1");
 
         CTTwoCellAnchor ctAnchor = createTwoCellAnchor((XSSFClientAnchor)anchor);
-        
+
         XmlCursor cur2 = ctAnchor.newCursor();
         cur2.copyXmlContents(cur1);
         cur2.dispose();
@@ -456,12 +461,12 @@ public final class XSSFDrawing extends P
         CTShape ctShape = ctAnchor.addNewSp();
         ctShape.set(XSSFObjectData.prototype());
         ctShape.getSpPr().setXfrm(createXfrm((XSSFClientAnchor)anchor));
-        
+
         // workaround for not having the vmlDrawing filled
         CTBlipFillProperties blipFill = ctShape.getSpPr().addNewBlipFill();
         blipFill.addNewBlip().setEmbed(imgDrawPR.getId());
         blipFill.addNewStretch().addNewFillRect();
-        
+
         CTNonVisualDrawingProps cNvPr = ctShape.getNvSpPr().getCNvPr();
         cNvPr.setId(shapeId);
         cNvPr.setName("Object "+shapeId);

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/AbstractXSSFChartSeries.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/AbstractXSSFChartSeries.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/AbstractXSSFChartSeries.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/AbstractXSSFChartSeries.java Sun Nov 26 14:03:01 2017
@@ -20,27 +20,36 @@ package org.apache.poi.xssf.usermodel.ch
 import org.apache.poi.ss.usermodel.charts.ChartSeries;
 import org.apache.poi.ss.usermodel.charts.TitleType;
 import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.util.Removal;
+import org.apache.poi.xddf.usermodel.chart.XDDFChartData;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
 
 /**
  * Base of all XSSF Chart Series
+ *
+ * @deprecated use {@link XDDFChartData.Series} instead
  */
+@Deprecated
+@Removal(version="4.2")
 public abstract class AbstractXSSFChartSeries implements ChartSeries {
 
     private String titleValue;
     private CellReference titleRef;
     private TitleType titleType;
 
+    @Override
     public void setTitle(CellReference titleReference) {
         titleType = TitleType.CELL_REFERENCE;
         titleRef = titleReference;
     }
 
+    @Override
     public void setTitle(String title) {
         titleType = TitleType.STRING;
         titleValue = title;
     }
 
+    @Override
     public CellReference getTitleCellReference() {
         if (TitleType.CELL_REFERENCE.equals(titleType)) {
             return titleRef;
@@ -48,6 +57,7 @@ public abstract class AbstractXSSFChartS
         throw new IllegalStateException("Title type is not CellReference.");
     }
 
+    @Override
     public String getTitleString() {
         if (TitleType.STRING.equals(titleType)) {
             return titleValue;
@@ -55,6 +65,7 @@ public abstract class AbstractXSSFChartS
         throw new IllegalStateException("Title type is not String.");
     }
 
+    @Override
     public TitleType getTitleType() {
         return titleType;
     }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java Sun Nov 26 14:03:01 2017
@@ -22,8 +22,9 @@ import org.apache.poi.ss.usermodel.chart
 import org.apache.poi.ss.usermodel.charts.AxisPosition;
 import org.apache.poi.ss.usermodel.charts.AxisTickMark;
 import org.apache.poi.ss.usermodel.charts.ChartAxis;
-import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
+import org.apache.poi.util.Removal;
+import org.apache.poi.xddf.usermodel.chart.XDDFCategoryAxis;
 import org.apache.poi.xssf.usermodel.XSSFChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxPos;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
@@ -39,9 +40,10 @@ import org.openxmlformats.schemas.drawin
 /**
  * Category axis type.
  *
- * @author Martin Andersson
+ * @deprecated use {@link XDDFCategoryAxis} instead
  */
-@Beta
+@Deprecated
+@Removal(version="4.2")
 public class XSSFCategoryAxis extends XSSFChartAxis {
 
 	private CTCatAx ctCatAx;
@@ -66,7 +68,7 @@ public class XSSFCategoryAxis extends XS
 	public CTShapeProperties getLine() {
 	    return ctCatAx.getSpPr();
 	}
-	
+
 	@Override
 	protected CTAxPos getCTAxPos() {
 		return ctCatAx.getAxPos();
@@ -110,7 +112,7 @@ public class XSSFCategoryAxis extends XS
 	public CTChartLines getMajorGridLines() {
 	    return ctCatAx.getMajorGridlines();
 	}
-	
+
 	@Override
 	public void crossAxis(ChartAxis axis) {
 		ctCatAx.getCrossAx().setVal(axis.getId());

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java Sun Nov 26 14:03:01 2017
@@ -22,8 +22,9 @@ import org.apache.poi.ss.usermodel.chart
 import org.apache.poi.ss.usermodel.charts.AxisPosition;
 import org.apache.poi.ss.usermodel.charts.AxisTickMark;
 import org.apache.poi.ss.usermodel.charts.ChartAxis;
-import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
+import org.apache.poi.util.Removal;
+import org.apache.poi.xddf.usermodel.chart.XDDFChartAxis;
 import org.apache.poi.xssf.usermodel.XSSFChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxPos;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
@@ -43,9 +44,10 @@ import org.openxmlformats.schemas.drawin
 /**
  * Base class for all axis types.
  *
- * @author Roman Kashitsyn
+ * @deprecated use {@link XDDFChartAxis} instead
  */
-@Beta
+@Deprecated
+@Removal(version="4.2")
 public abstract class XSSFChartAxis implements ChartAxis {
 
 	protected XSSFChart chart;
@@ -221,7 +223,7 @@ public abstract class XSSFChartAxis impl
 	protected abstract CTTickMark getMinorCTTickMark();
 	@Internal public abstract CTChartLines getMajorGridLines();
 	@Internal public abstract CTShapeProperties getLine();
-	
+
 	private static STOrientation.Enum fromAxisOrientation(AxisOrientation orientation) {
 		switch (orientation) {
 			case MIN_MAX: return STOrientation.MIN_MAX;

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartDataFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartDataFactory.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartDataFactory.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartDataFactory.java Sun Nov 26 14:03:01 2017
@@ -17,13 +17,14 @@
 
 package org.apache.poi.xssf.usermodel.charts;
 
-import org.apache.poi.ss.usermodel.charts.*;
-import org.apache.poi.util.Beta;
+import org.apache.poi.ss.usermodel.charts.ChartDataFactory;
+import org.apache.poi.util.Removal;
 
 /**
- * @author Roman Kashitsyn
+ * @deprecated
  */
-@Beta
+@Deprecated
+@Removal(version="4.2")
 public class XSSFChartDataFactory implements ChartDataFactory {
 
 	private static XSSFChartDataFactory instance;
@@ -35,14 +36,16 @@ public class XSSFChartDataFactory implem
 	/**
 	 * @return new scatter charts data instance
 	 */
-	public XSSFScatterChartData createScatterChartData() {
+	@Override
+    public XSSFScatterChartData createScatterChartData() {
 		return new XSSFScatterChartData();
 	}
 
 	/**
 	 * @return new line charts data instance
 	 */
-	public XSSFLineChartData createLineChartData() {
+	@Override
+    public XSSFLineChartData createLineChartData() {
 		return new XSSFLineChartData();
 	}
 

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartLegend.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartLegend.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartLegend.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartLegend.java Sun Nov 26 14:03:01 2017
@@ -17,10 +17,11 @@
 
 package org.apache.poi.xssf.usermodel.charts;
 
-import org.apache.poi.util.Beta;
-import org.apache.poi.util.Internal;
 import org.apache.poi.ss.usermodel.charts.ChartLegend;
 import org.apache.poi.ss.usermodel.charts.LegendPosition;
+import org.apache.poi.util.Internal;
+import org.apache.poi.util.Removal;
+import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend;
 import org.apache.poi.xssf.usermodel.XSSFChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTLegend;
@@ -29,10 +30,10 @@ import org.openxmlformats.schemas.drawin
 
 /**
  * Represents a SpreadsheetML chart legend
- * @author Roman Kashitsyn
- * @author Martin Andersson
+ * @deprecated use {@link XDDFChartLegend} instead
  */
-@Beta
+@Deprecated
+@Removal(version="4.2")
 public final class XSSFChartLegend implements ChartLegend {
 
 	/**
@@ -72,7 +73,8 @@ public final class XSSFChartLegend imple
 		return legend;
 	}
 
-	public void setPosition(LegendPosition position) {
+	@Override
+    public void setPosition(LegendPosition position) {
 		if (!legend.isSetLegendPos()) {
 			legend.addNewLegendPos();
 		}
@@ -82,7 +84,8 @@ public final class XSSFChartLegend imple
 	/*
 	 * According to ECMA-376 default position is RIGHT.
 	 */
-	public LegendPosition getPosition() {
+	@Override
+    public LegendPosition getPosition() {
 		if (legend.isSetLegendPos()) {
 			return toLegendPosition(legend.getLegendPos());
 		} else {
@@ -90,18 +93,21 @@ public final class XSSFChartLegend imple
 		}
 	}
 
-	public XSSFManualLayout getManualLayout() {
+	@Override
+    public XSSFManualLayout getManualLayout() {
 		if (!legend.isSetLayout()) {
 			legend.addNewLayout();
 		}
 		return new XSSFManualLayout(legend.getLayout());
 	}
 
-	public boolean isOverlay() {
+	@Override
+    public boolean isOverlay() {
 		return legend.getOverlay().getVal();
 	}
 
-	public void setOverlay(boolean value) {
+	@Override
+    public void setOverlay(boolean value) {
 		legend.getOverlay().setVal(value);
 	}
 

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartUtil.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartUtil.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartUtil.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartUtil.java Sun Nov 26 14:03:01 2017
@@ -20,13 +20,23 @@
 package org.apache.poi.xssf.usermodel.charts;
 
 import org.apache.poi.ss.usermodel.charts.ChartDataSource;
-import org.openxmlformats.schemas.drawingml.x2006.chart.*;
+import org.apache.poi.util.Removal;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
+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.CTStrData;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrRef;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrVal;
 
 /**
  * Package private class with utility methods.
  *
- * @author Roman Kashitsyn
+ * @deprecated
  */
+@Deprecated
+@Removal(version="4.2")
 class XSSFChartUtil {
 
     private XSSFChartUtil() {}

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFDateAxis.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFDateAxis.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFDateAxis.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFDateAxis.java Sun Nov 26 14:03:01 2017
@@ -22,8 +22,9 @@ import org.apache.poi.ss.usermodel.chart
 import org.apache.poi.ss.usermodel.charts.AxisPosition;
 import org.apache.poi.ss.usermodel.charts.AxisTickMark;
 import org.apache.poi.ss.usermodel.charts.ChartAxis;
-import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
+import org.apache.poi.util.Removal;
+import org.apache.poi.xddf.usermodel.chart.XDDFDateAxis;
 import org.apache.poi.xssf.usermodel.XSSFChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxPos;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
@@ -38,8 +39,11 @@ import org.openxmlformats.schemas.drawin
 
 /**
  * Date axis type.  Currently only implements the same values as {@link XSSFCategoryAxis}, since the two are nearly identical.
+ *
+ * @deprecated use {@link XDDFDateAxis} instead
  */
-@Beta
+@Deprecated
+@Removal(version="4.2")
 public class XSSFDateAxis extends XSSFChartAxis {
 
 	private CTDateAx ctDateAx;
@@ -108,7 +112,7 @@ public class XSSFDateAxis extends XSSFCh
 	public CTChartLines getMajorGridLines() {
 	    return ctDateAx.getMajorGridlines();
 	}
-	
+
 	@Override
 	public void crossAxis(ChartAxis axis) {
 		ctDateAx.getCrossAx().setVal(axis.getId());

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFLineChartData.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFLineChartData.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFLineChartData.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFLineChartData.java Sun Nov 26 14:03:01 2017
@@ -25,7 +25,8 @@ import org.apache.poi.ss.usermodel.chart
 import org.apache.poi.ss.usermodel.charts.ChartDataSource;
 import org.apache.poi.ss.usermodel.charts.LineChartData;
 import org.apache.poi.ss.usermodel.charts.LineChartSeries;
-import org.apache.poi.util.Beta;
+import org.apache.poi.util.Removal;
+import org.apache.poi.xddf.usermodel.chart.XDDFLineChartData;
 import org.apache.poi.xssf.usermodel.XSSFChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart;
@@ -36,8 +37,11 @@ import org.openxmlformats.schemas.drawin
 
 /**
  * Holds data for a XSSF Line Chart
+ *
+ * @deprecated use {@link XDDFLineChartData} instead
  */
-@Beta
+@Deprecated
+@Removal(version="4.2")
 public class XSSFLineChartData implements LineChartData {
 
     /**
@@ -46,7 +50,7 @@ public class XSSFLineChartData implement
     private List<Series> series;
 
     public XSSFLineChartData() {
-        series = new ArrayList<>();
+        series = new ArrayList<Series>();
     }
 
     static class Series extends AbstractXSSFChartSeries implements LineChartSeries {
@@ -64,10 +68,12 @@ public class XSSFLineChartData implement
             this.values = values;
         }
 
+        @Override
         public ChartDataSource<?> getCategoryAxisData() {
             return categories;
         }
 
+        @Override
         public ChartDataSource<? extends Number> getValues() {
             return values;
         }
@@ -91,6 +97,7 @@ public class XSSFLineChartData implement
         }
     }
 
+    @Override
     public LineChartSeries addSeries(ChartDataSource<?> categoryAxisData, ChartDataSource<? extends Number> values) {
         if (!values.isNumeric()) {
             throw new IllegalArgumentException("Value data source must be numeric.");
@@ -101,10 +108,12 @@ public class XSSFLineChartData implement
         return newSeries;
     }
 
+    @Override
     public List<? extends LineChartSeries> getSeries() {
         return series;
     }
 
+    @Override
     public void fillChart(Chart chart, ChartAxis... axis) {
         if (!(chart instanceof XSSFChart)) {
             throw new IllegalArgumentException("Chart must be instance of XSSFChart");

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFManualLayout.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFManualLayout.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFManualLayout.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFManualLayout.java Sun Nov 26 14:03:01 2017
@@ -17,25 +17,27 @@
 
 package org.apache.poi.xssf.usermodel.charts;
 
-import org.apache.poi.util.Beta;
-import org.apache.poi.util.Internal;
-import org.apache.poi.ss.usermodel.charts.ManualLayout;
 import org.apache.poi.ss.usermodel.charts.LayoutMode;
 import org.apache.poi.ss.usermodel.charts.LayoutTarget;
+import org.apache.poi.ss.usermodel.charts.ManualLayout;
+import org.apache.poi.util.Internal;
+import org.apache.poi.util.Removal;
+import org.apache.poi.xddf.usermodel.chart.XDDFManualLayout;
 import org.apache.poi.xssf.usermodel.XSSFChart;
-import org.openxmlformats.schemas.drawingml.x2006.chart.STLayoutTarget;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTLayout;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTManualLayout;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTLayoutMode;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTLayoutTarget;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTManualLayout;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
 import org.openxmlformats.schemas.drawingml.x2006.chart.STLayoutMode;
+import org.openxmlformats.schemas.drawingml.x2006.chart.STLayoutTarget;
 
 /**
  * Represents a SpreadsheetML manual layout.
- * @author Roman Kashitsyn
+ * @deprecated use {@link XDDFManualLayout instead}
  */
-@Beta
+@Deprecated
+@Removal(version="4.2")
 public final class XSSFManualLayout implements ManualLayout {
 
 	/**
@@ -75,126 +77,144 @@ public final class XSSFManualLayout impl
 		return layout;
 	}
 
-	public void setWidthRatio(double ratio) {
+	@Override
+    public void setWidthRatio(double ratio) {
 		if (!layout.isSetW()) {
 			layout.addNewW();
 		}
 		layout.getW().setVal(ratio);
 	}
 
-	public double getWidthRatio() {
+	@Override
+    public double getWidthRatio() {
 		if (!layout.isSetW()) {
 			return 0.0;
 		}
 		return layout.getW().getVal();
 	}
 
-	public void setHeightRatio(double ratio) {
+	@Override
+    public void setHeightRatio(double ratio) {
 		if (!layout.isSetH()) {
 			layout.addNewH();
 		}
 		layout.getH().setVal(ratio);
 	}
 
-	public double getHeightRatio() {
+	@Override
+    public double getHeightRatio() {
 		if (!layout.isSetH()) {
 			return 0.0;
 		}
 		return layout.getH().getVal();
 	}
 
-	public LayoutTarget getTarget() {
+	@Override
+    public LayoutTarget getTarget() {
 		if (!layout.isSetLayoutTarget()) {
 			return defaultLayoutTarget;
 		}
 		return toLayoutTarget(layout.getLayoutTarget());
 	}
 
-	public void setTarget(LayoutTarget target) {
+	@Override
+    public void setTarget(LayoutTarget target) {
 		if (!layout.isSetLayoutTarget()) {
 			layout.addNewLayoutTarget();
 		}
 		layout.getLayoutTarget().setVal(fromLayoutTarget(target));
 	}
 
-	public LayoutMode getXMode() {
+	@Override
+    public LayoutMode getXMode() {
 		if (!layout.isSetXMode()) {
 			return defaultLayoutMode;
 		}
 		return toLayoutMode(layout.getXMode());
 	}
 
-	public void setXMode(LayoutMode mode) {
+	@Override
+    public void setXMode(LayoutMode mode) {
 		if (!layout.isSetXMode()) {
 			layout.addNewXMode();
 		}
 		layout.getXMode().setVal(fromLayoutMode(mode));
 	}
 
-	public LayoutMode getYMode() {
+	@Override
+    public LayoutMode getYMode() {
 		if (!layout.isSetYMode()) {
 			return defaultLayoutMode;
 		}
 		return toLayoutMode(layout.getYMode());
 	}
 
-	public void setYMode(LayoutMode mode) {
+	@Override
+    public void setYMode(LayoutMode mode) {
 		if (!layout.isSetYMode()) {
 			layout.addNewYMode();
 		}
 		layout.getYMode().setVal(fromLayoutMode(mode));
 	}
 
-	public double getX() {
+	@Override
+    public double getX() {
 		if (!layout.isSetX()) {
 			return 0.0;
 		}
 		return layout.getX().getVal();
 	}
 
-	public void setX(double x) {
+	@Override
+    public void setX(double x) {
 		if (!layout.isSetX()) {
 			layout.addNewX();
 		}
 		layout.getX().setVal(x);
 	}
 
-	public double getY() {
+	@Override
+    public double getY() {
 		if (!layout.isSetY()) {
 			return 0.0;
 		}
 		return layout.getY().getVal();
 	}
 
-	public void setY(double y) {
+	@Override
+    public void setY(double y) {
 		if (!layout.isSetY()) {
 			layout.addNewY();
 		}
 		layout.getY().setVal(y);
 	}
 
-	public LayoutMode getWidthMode() {
+	@Override
+    public LayoutMode getWidthMode() {
 		if (!layout.isSetWMode()) {
 			return defaultLayoutMode;
 		}
 		return toLayoutMode(layout.getWMode());
 	}
 
-	public void setWidthMode(LayoutMode mode) {
+	@Override
+    public void setWidthMode(LayoutMode mode) {
 		if (!layout.isSetWMode()) {
 			layout.addNewWMode();
 		}
 		layout.getWMode().setVal(fromLayoutMode(mode));
 	}
 
-	public LayoutMode getHeightMode() {
+	@Override
+    public LayoutMode getHeightMode() {
 		if (!layout.isSetHMode()) {
 			return defaultLayoutMode;
 		}
 		return toLayoutMode(layout.getHMode());
 	}
 
-	public void setHeightMode(LayoutMode mode) {
+	@Override
+    public void setHeightMode(LayoutMode mode) {
 		if (!layout.isSetHMode()) {
 			layout.addNewHMode();
 		}

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFScatterChartData.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFScatterChartData.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFScatterChartData.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFScatterChartData.java Sun Nov 26 14:03:01 2017
@@ -25,7 +25,8 @@ import org.apache.poi.ss.usermodel.chart
 import org.apache.poi.ss.usermodel.charts.ChartDataSource;
 import org.apache.poi.ss.usermodel.charts.ScatterChartData;
 import org.apache.poi.ss.usermodel.charts.ScatterChartSeries;
-import org.apache.poi.util.Beta;
+import org.apache.poi.util.Removal;
+import org.apache.poi.xddf.usermodel.chart.XDDFScatterChartData;
 import org.apache.poi.xssf.usermodel.XSSFChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
@@ -38,8 +39,11 @@ import org.openxmlformats.schemas.drawin
 
 /**
  * Represents DrawingML scatter charts.
+ *
+ * @deprecated use {@link XDDFScatterChartData} instead
  */
-@Beta
+@Deprecated
+@Removal(version="4.2")
 public class XSSFScatterChartData implements ScatterChartData {
 
     /**
@@ -48,7 +52,7 @@ public class XSSFScatterChartData implem
     private List<Series> series;
 
     public XSSFScatterChartData() {
-        series = new ArrayList<>();
+        series = new ArrayList<Series>();
     }
 
     /**
@@ -74,6 +78,7 @@ public class XSSFScatterChartData implem
          * Returns data source used for X axis values.
          * @return data source used for X axis values
          */
+        @Override
         public ChartDataSource<?> getXValues() {
             return xs;
         }
@@ -82,6 +87,7 @@ public class XSSFScatterChartData implem
          * Returns data source used for Y axis values.
          * @return data source used for Y axis values
          */
+        @Override
         public ChartDataSource<? extends Number> getYValues() {
             return ys;
         }
@@ -103,6 +109,7 @@ public class XSSFScatterChartData implem
         }
     }
 
+    @Override
     public ScatterChartSeries addSerie(ChartDataSource<?> xs,
                                       ChartDataSource<? extends Number> ys) {
         if (!ys.isNumeric()) {
@@ -114,6 +121,7 @@ public class XSSFScatterChartData implem
         return newSerie;
     }
 
+    @Override
     public void fillChart(Chart chart, ChartAxis... axis) {
         if (!(chart instanceof XSSFChart)) {
             throw new IllegalArgumentException("Chart must be instance of XSSFChart");
@@ -133,6 +141,7 @@ public class XSSFScatterChartData implem
         }
     }
 
+    @Override
     public List<? extends Series> getSeries() {
         return series;
     }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java Sun Nov 26 14:03:01 2017
@@ -24,8 +24,9 @@ import org.apache.poi.ss.usermodel.chart
 import org.apache.poi.ss.usermodel.charts.AxisTickMark;
 import org.apache.poi.ss.usermodel.charts.ChartAxis;
 import org.apache.poi.ss.usermodel.charts.ValueAxis;
-import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
+import org.apache.poi.util.Removal;
+import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis;
 import org.apache.poi.xssf.usermodel.XSSFChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxPos;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
@@ -42,9 +43,10 @@ import org.openxmlformats.schemas.drawin
 /**
  * Value axis type.
  *
- * @author Roman Kashitsyn
+ * @deprecated use {@link XDDFValueAxis} instead
  */
-@Beta
+@Deprecated
+@Removal(version="4.2")
 public class XSSFValueAxis extends XSSFChartAxis implements ValueAxis {
 
 	private CTValAx ctValAx;

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFChart.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFChart.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFChart.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFChart.java Sun Nov 26 14:03:01 2017
@@ -22,39 +22,23 @@ import static org.apache.poi.POIXMLTypeL
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.Arrays;
 
 import javax.xml.namespace.QName;
 
-import org.apache.poi.POIXMLDocumentPart;
 import org.apache.poi.POIXMLException;
-import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.openxml4j.opc.PackagePart;
-import org.apache.poi.openxml4j.opc.PackageRelationship;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.IOUtils;
-import org.apache.poi.util.Internal;
+import org.apache.poi.xddf.usermodel.chart.XDDFChart;
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlOptions;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTChartSpace;
-import org.openxmlformats.schemas.drawingml.x2006.chart.ChartSpaceDocument;
 
 /**
  * Represents a Chart in a .docx file
  */
 @Beta
-public class XWPFChart extends POIXMLDocumentPart {
-
-    /**
-     * Root element of the Chart part
-     */
-    private final CTChartSpace chartSpace;
-
-    /**
-     * The Chart within that
-     */
-    private final CTChart chart;
+public class XWPFChart extends XDDFChart {
 
     // lazy initialization
     private Long checksum;
@@ -64,39 +48,11 @@ public class XWPFChart extends POIXMLDoc
      *
      * @param part the package part holding the chart data,
      * the content type must be <code>application/vnd.openxmlformats-officedocument.drawingml.chart+xml</code>
-     * 
+     *
      * @since POI 4.0.0
      */
     protected XWPFChart(PackagePart part) throws IOException, XmlException {
         super(part);
-
-        chartSpace = ChartSpaceDocument.Factory.parse(part.getInputStream(), DEFAULT_XML_OPTIONS).getChartSpace(); 
-        chart = chartSpace.getChart();
-    }
-      
-    @Override
-    protected void onDocumentRead() throws IOException {
-        super.onDocumentRead();
-    }
-
-    /**
-     * Return the underlying CTChartSpace bean, the root element of the Chart part.
-     *
-     * @return the underlying CTChartSpace bean
-     */
-    @Internal
-    public CTChartSpace getCTChartSpace() {
-        return chartSpace;
-    }
-
-    /**
-     * Return the underlying CTChart bean, within the Chart Space
-     *
-     * @return the underlying CTChart bean
-     */
-    @Internal
-    public CTChart getCTChart() {
-        return chart;
     }
 
     @Override
@@ -108,7 +64,7 @@ public class XWPFChart extends POIXMLDoc
             chartSpace.save(out, xmlOptions);
         }
     }
-    
+
     public Long getChecksum() {
         if (this.checksum == null) {
             InputStream is = null;
@@ -120,7 +76,9 @@ public class XWPFChart extends POIXMLDoc
                 throw new POIXMLException(e);
             } finally {
                 try {
-                    if (is != null) is.close();
+                    if (is != null) {
+                        is.close();
+                    }
                 } catch (IOException e) {
                     throw new POIXMLException(e);
                 }
@@ -157,7 +115,7 @@ public class XWPFChart extends POIXMLDoc
         }
         return false;
     }
-   
+
     @Override
     public int hashCode() {
         return getChecksum().hashCode();

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java Sun Nov 26 14:03:01 2017
@@ -63,7 +63,27 @@ import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlObject;
 import org.apache.xmlbeans.XmlOptions;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTComment;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocument1;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdn;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CommentsDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.EndnotesDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.FootnotesDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.NumberingDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STDocProtect;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.StylesDocument;
 
 /**
  * <p>High(ish) level class for working with .docx files.</p>
@@ -79,7 +99,7 @@ import org.openxmlformats.schemas.wordpr
  */
 public class XWPFDocument extends POIXMLDocument implements Document, IBody {
     private static final POILogger LOG = POILogFactory.getLogger(XWPFDocument.class);
-    
+
     protected List<XWPFFooter> footers = new ArrayList<>();
     protected List<XWPFHeader> headers = new ArrayList<>();
     protected List<XWPFComment> comments = new ArrayList<>();
@@ -186,8 +206,9 @@ public class XWPFDocument extends POIXML
             }
             docCursor.dispose();
             // Sort out headers and footers
-            if (doc.getDocument().getBody().getSectPr() != null)
+            if (doc.getDocument().getBody().getSectPr() != null) {
                 headerFooterPolicy = new XWPFHeaderFooterPolicy(this);
+            }
 
             // Create for each XML-part in the Package a PartClass
             for (RelationPart rp : getRelationParts()) {
@@ -224,7 +245,7 @@ public class XWPFDocument extends POIXML
                 } else if (relation.equals(XWPFRelation.CHART.getRelation())) {
                     //now we can use all methods to modify charts in XWPFDocument
                     XWPFChart chartData = (XWPFChart) p;
-                    chartData.onDocumentRead();
+//                    chartData.onDocumentRead(); // ??? there is nothing to be done there!!!
                     charts.add(chartData);
                 } else if (relation.equals(XWPFRelation.GLOSSARY_DOCUMENT.getRelation())) {
                     // We don't currently process the glossary itself
@@ -380,20 +401,25 @@ public class XWPFDocument extends POIXML
 
     public XWPFHyperlink getHyperlinkByID(String id) {
         for (XWPFHyperlink link : hyperlinks) {
-            if (link.getId().equals(id))
+            if (link.getId().equals(id)) {
                 return link;
+            }
         }
 
         return null;
     }
 
     public XWPFFootnote getFootnoteByID(int id) {
-        if (footnotes == null) return null;
+        if (footnotes == null) {
+            return null;
+        }
         return footnotes.getFootnoteById(id);
     }
 
     public XWPFFootnote getEndnoteByID(int id) {
-        if (endnotes == null) return null;
+        if (endnotes == null) {
+            return null;
+        }
         return endnotes.get(id);
     }
 
@@ -410,8 +436,9 @@ public class XWPFDocument extends POIXML
 
     public XWPFComment getCommentByID(String id) {
         for (XWPFComment comment : comments) {
-            if (comment.getId().equals(id))
+            if (comment.getId().equals(id)) {
                 return comment;
+            }
         }
 
         return null;
@@ -450,7 +477,7 @@ public class XWPFDocument extends POIXML
         }
         return headerFooterPolicy;
     }
-    
+
     /**
      * Create a header of the given type
      *
@@ -471,8 +498,8 @@ public class XWPFDocument extends POIXML
         }
         return hfPolicy.createHeader(STHdrFtr.Enum.forInt(type.toInt()));
     }
-    
-    
+
+
     /**
      * Create a footer of the given type
      *
@@ -619,7 +646,7 @@ public class XWPFDocument extends POIXML
             String uri = CTP.type.getName().getNamespaceURI();
             /*
              * TODO DO not use a coded constant, find the constant in the OOXML
-             * classes instead, as the child of type CT_Paragraph is defined in the 
+             * classes instead, as the child of type CT_Paragraph is defined in the
              * OOXML schema as 'p'
              */
             String localPart = "p";
@@ -667,8 +694,9 @@ public class XWPFDocument extends POIXML
                 cursor.toCursor(newParaPos);
                 while (cursor.toPrevSibling()) {
                     o = cursor.getObject();
-                    if (o instanceof CTP || o instanceof CTTbl)
+                    if (o instanceof CTP || o instanceof CTTbl) {
                         i++;
+                    }
                 }
                 bodyElements.add(i, newP);
                 cursor.toCursor(newParaPos);
@@ -706,8 +734,9 @@ public class XWPFDocument extends POIXML
                 cursor.toCursor(tableCursor);
                 while (cursor.toPrevSibling()) {
                     o = cursor.getObject();
-                    if (o instanceof CTP || o instanceof CTTbl)
+                    if (o instanceof CTP || o instanceof CTTbl) {
                         i++;
+                    }
                 }
                 bodyElements.add(i, newT);
                 cursor.toCursor(tableCursor);
@@ -984,7 +1013,7 @@ public class XWPFDocument extends POIXML
         tables.set(pos, table);
         ctDocument.getBody().setTblArray(pos, table.getCTTbl());
     }
-	
+
 	/**
      * Verifies that the documentProtection tag in settings.xml file <br>
      * specifies that the protection is enforced (w:enforcement="1") <br>
@@ -1288,7 +1317,7 @@ public class XWPFDocument extends POIXML
     public void setZoomPercent(long zoomPercent) {
         settings.setZoomPercent(zoomPercent);
     }
-    
+
     /**
      * inserts an existing XWPFTable to the arrays bodyElements and tables
      *
@@ -1378,7 +1407,9 @@ public class XWPFDocument extends POIXML
                 throw new POIXMLException(e);
             } finally {
                 try {
-                    if (out != null) out.close();
+                    if (out != null) {
+                        out.close();
+                    }
                 } catch (IOException e) {
                     // ignore
                 }

Added: poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/chart/TestXDDFDataSourcesFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/chart/TestXDDFDataSourcesFactory.java?rev=1816383&view=auto
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/chart/TestXDDFDataSourcesFactory.java (added)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xddf/usermodel/chart/TestXDDFDataSourcesFactory.java Sun Nov 26 14:03:01 2017
@@ -0,0 +1,134 @@
+/* ====================================================================
+   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 org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.SheetBuilder;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link XDDFDataSourcesFactory}.
+ */
+public class TestXDDFDataSourcesFactory extends TestCase {
+
+    private static final Object[][] numericCells = {
+            {0.0,      1.0,       2.0,     3.0,      4.0},
+            {0.0, "=B1*2",  "=C1*2", "=D1*2", "=E1*2"}
+    };
+
+    private static final Object[][] stringCells = {
+            {  1,    2,    3,   4,    5},
+            {"A", "B", "C", "D", "E"}
+    };
+
+    private static final Object[][] mixedCells = {
+            {1.0, "2.0", 3.0, "4.0", 5.0, "6.0"}
+    };
+
+    public void testNumericArrayDataSource() {
+        Double[] doubles = new Double[]{1.0, 2.0, 3.0, 4.0, 5.0};
+        XDDFDataSource<Double> doubleDataSource = XDDFDataSourcesFactory.fromArray(doubles, null);
+        assertTrue(doubleDataSource.isNumeric());
+        assertFalse(doubleDataSource.isReference());
+        assertDataSourceIsEqualToArray(doubleDataSource, doubles);
+    }
+
+    public void testStringArrayDataSource() {
+        String[] strings = new String[]{"one", "two", "three", "four", "five"};
+        XDDFDataSource<String> stringDataSource = XDDFDataSourcesFactory.fromArray(strings, null);
+        assertFalse(stringDataSource.isNumeric());
+        assertFalse(stringDataSource.isReference());
+        assertDataSourceIsEqualToArray(stringDataSource, strings);
+    }
+
+    public void testNumericCellDataSource() {
+        XSSFWorkbook wb = new XSSFWorkbook();
+        XSSFSheet sheet = (XSSFSheet) new SheetBuilder(wb, numericCells).build();
+        CellRangeAddress numCellRange = CellRangeAddress.valueOf("A2:E2");
+        XDDFDataSource<Double> numDataSource = XDDFDataSourcesFactory.fromNumericCellRange(sheet, numCellRange);
+        assertTrue(numDataSource.isReference());
+        assertTrue(numDataSource.isNumeric());
+        assertEquals(numericCells[0].length, numDataSource.getPointCount());
+        for (int i = 0; i < numericCells[0].length; ++i) {
+            assertEquals(((Double) numericCells[0][i]) * 2,
+                    numDataSource.getPointAt(i), 0.00001);
+        }
+    }
+
+    public void testStringCellDataSource() {
+        XSSFWorkbook wb = new XSSFWorkbook();
+        XSSFSheet sheet = (XSSFSheet) new SheetBuilder(wb, stringCells).build();
+        CellRangeAddress numCellRange = CellRangeAddress.valueOf("A2:E2");
+        XDDFDataSource<String> numDataSource = XDDFDataSourcesFactory.fromStringCellRange(sheet, numCellRange);
+        assertTrue(numDataSource.isReference());
+        assertFalse(numDataSource.isNumeric());
+        assertEquals(numericCells[0].length, numDataSource.getPointCount());
+        for (int i = 0; i < stringCells[1].length; ++i) {
+            assertEquals(stringCells[1][i], numDataSource.getPointAt(i));
+        }
+    }
+
+    public void testMixedCellDataSource() {
+        XSSFWorkbook wb = new XSSFWorkbook();
+        XSSFSheet sheet = (XSSFSheet) new SheetBuilder(wb, mixedCells).build();
+        CellRangeAddress mixedCellRange = CellRangeAddress.valueOf("A1:F1");
+        XDDFDataSource<String> strDataSource = XDDFDataSourcesFactory.fromStringCellRange(sheet, mixedCellRange);
+        XDDFDataSource<Double> numDataSource = XDDFDataSourcesFactory.fromNumericCellRange(sheet, mixedCellRange);
+        for (int i = 0; i < mixedCells[0].length; ++i) {
+            if (i % 2 == 0) {
+                assertNull(strDataSource.getPointAt(i));
+                assertEquals(((Double) mixedCells[0][i]),
+                        numDataSource.getPointAt(i), 0.00001);
+            } else {
+                assertNull(numDataSource.getPointAt(i));
+                assertEquals(mixedCells[0][i], strDataSource.getPointAt(i));
+            }
+        }
+    }
+
+    public void testIOBExceptionOnInvalidIndex() {
+        XSSFWorkbook wb = new XSSFWorkbook();
+        XSSFSheet sheet = (XSSFSheet) new SheetBuilder(wb, numericCells).build();
+        CellRangeAddress rangeAddress = CellRangeAddress.valueOf("A2:E2");
+        XDDFDataSource<Double> numDataSource = XDDFDataSourcesFactory.fromNumericCellRange(sheet, rangeAddress);
+        IndexOutOfBoundsException exception = null;
+        try {
+            numDataSource.getPointAt(-1);
+        } catch (IndexOutOfBoundsException e) {
+            exception = e;
+        }
+        assertNotNull(exception);
+
+        exception = null;
+        try {
+            numDataSource.getPointAt(numDataSource.getPointCount());
+        } catch (IndexOutOfBoundsException e) {
+            exception = e;
+        }
+        assertNotNull(exception);
+    }
+
+    private <T> void assertDataSourceIsEqualToArray(XDDFDataSource<T> ds, T[] array) {
+        assertEquals(ds.getPointCount(), array.length);
+        for (int i = 0; i < array.length; ++i) {
+            assertEquals(ds.getPointAt(i), array[i]);
+        }
+    }
+}

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFChart.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFChart.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFChart.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFChart.java Sun Nov 26 14:03:01 2017
@@ -18,44 +18,151 @@
  */
 package org.apache.poi.xslf.usermodel;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
 import java.io.IOException;
-import java.io.OutputStream;
-import java.util.LinkedHashMap;
-import java.util.Map;
+import java.util.List;
 
 import org.apache.poi.POIXMLDocumentPart;
 import org.apache.poi.ss.util.CellRangeAddress;
-import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.xddf.usermodel.chart.AxisCrossBetween;
+import org.apache.poi.xddf.usermodel.chart.AxisCrosses;
+import org.apache.poi.xddf.usermodel.chart.AxisOrientation;
+import org.apache.poi.xddf.usermodel.chart.AxisPosition;
+import org.apache.poi.xddf.usermodel.chart.AxisTickMark;
+import org.apache.poi.xddf.usermodel.chart.BarDirection;
+import org.apache.poi.xddf.usermodel.chart.BarGrouping;
+import org.apache.poi.xddf.usermodel.chart.Grouping;
+import org.apache.poi.xddf.usermodel.chart.LayoutMode;
+import org.apache.poi.xddf.usermodel.chart.LayoutTarget;
+import org.apache.poi.xddf.usermodel.chart.LegendPosition;
+import org.apache.poi.xddf.usermodel.chart.RadarStyle;
+import org.apache.poi.xddf.usermodel.chart.ScatterStyle;
+import org.apache.poi.xddf.usermodel.chart.XDDFBarChartData;
+import org.apache.poi.xddf.usermodel.chart.XDDFChartData;
+import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend;
+import org.apache.poi.xddf.usermodel.chart.XDDFDataSource;
+import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
+import org.apache.poi.xddf.usermodel.chart.XDDFLineChartData;
+import org.apache.poi.xddf.usermodel.chart.XDDFManualLayout;
+import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
+import org.apache.poi.xddf.usermodel.chart.XDDFPieChartData;
+import org.apache.poi.xddf.usermodel.chart.XDDFRadarChartData;
+import org.apache.poi.xddf.usermodel.chart.XDDFScatterChartData;
+import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis;
 import org.apache.poi.xslf.XSLFTestDataSamples;
-import org.apache.poi.xssf.usermodel.XSSFRow;
-import org.apache.poi.xssf.usermodel.XSSFSheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.junit.Test;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumData;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumVal;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieChart;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrData;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrVal;
 
+/**
+ * a modified version from POI-examples
+ */
 public class TestXSLFChart {
-
-    /**
-     * a modified version from POI-examples
-     */
     @Test
-    public void testFillChartTemplate() throws IOException {
+    public void testFillPieChartTemplate() throws IOException {
+        XMLSlideShow pptx = XSLFTestDataSamples.openSampleDocument("pie-chart.pptx");
+        XSLFChart chart = findChart(pptx.getSlides().get(0));
+        List<XDDFChartData> data = findChartData(chart);
 
-        String chartTitle = "Apache POI";  // first line is chart title
+        XDDFPieChartData pie = (XDDFPieChartData) data.get(0);
+        XDDFPieChartData.Series firstSeries = (XDDFPieChartData.Series) pie.getSeries().get(0);
+        firstSeries.setExplosion(25);
+        assertEquals(25, firstSeries.getExplosion());
 
-        XMLSlideShow pptx = XSLFTestDataSamples.openSampleDocument("pie-chart.pptx");
+        fillChartData(chart, pie);
+        pptx.close();
+    }
+
+    @Test
+    public void testFillBarChartTemplate() throws IOException {
+        XMLSlideShow pptx = XSLFTestDataSamples.openSampleDocument("bar-chart.pptx");
         XSLFSlide slide = pptx.getSlides().get(0);
+        // duplicate slide and chart before applying "destructive" tests to it
+        XSLFChart chart2 = findChart(pptx.createSlide().importContent(slide));
+        XSLFChart chart = findChart(slide);
+
+        List<XDDFChartData> data = findChartData(chart);
+        XDDFBarChartData bar = (XDDFBarChartData) data.get(0);
+        assertEquals(BarDirection.BAR, bar.getBarDirection());
+        assertEquals(BarGrouping.CLUSTERED, bar.getBarGrouping());
+        assertEquals(100, bar.getGapWidth());
+        fillChartData(chart, bar);
+
+        XDDFBarChartData column = (XDDFBarChartData) findChartData(chart2).get(0);
+        column.setBarDirection(BarDirection.COL);
+        assertEquals(BarDirection.COL, column.getBarDirection());
+        column.getCategoryAxis().setOrientation(AxisOrientation.MIN_MAX);
+        column.getValueAxes().get(0).setPosition(AxisPosition.BOTTOM);
+        fillChartData(chart2, column);
+
+        pptx.close();
+    }
+
+    @Test
+    public void testFillLineChartTemplate() throws IOException {
+        XMLSlideShow pptx = XSLFTestDataSamples.openSampleDocument("line-chart.pptx");
+        XSLFChart chart = findChart(pptx.getSlides().get(0));
+        List<XDDFChartData> data = findChartData(chart);
+
+        XDDFLineChartData line = (XDDFLineChartData) data.get(0);
+        assertEquals(Grouping.STANDARD, line.getGrouping());
+        line.setGrouping(Grouping.PERCENT_STACKED);
+        assertEquals(Grouping.PERCENT_STACKED, line.getGrouping());
+
+        fillChartData(chart, line);
+        pptx.close();
+    }
 
+    @Test
+    public void testFillRadarChartTemplate() throws IOException {
+        XMLSlideShow pptx = XSLFTestDataSamples.openSampleDocument("radar-chart.pptx");
+        XSLFChart chart = findChart(pptx.getSlides().get(0));
+        List<XDDFChartData> data = findChartData(chart);
+
+        XDDFRadarChartData radar = (XDDFRadarChartData) data.get(0);
+        assertEquals(RadarStyle.MARKER, radar.getStyle());
+        radar.setStyle(RadarStyle.FILLED);
+        assertEquals(RadarStyle.FILLED, radar.getStyle());
+
+        fillChartData(chart, radar);
+        pptx.close();
+    }
+
+    @Test
+    public void testFillScatterChartTemplate() throws IOException {
+        XMLSlideShow pptx = XSLFTestDataSamples.openSampleDocument("scatter-chart.pptx");
+        XSLFChart chart = findChart(pptx.getSlides().get(0));
+        List<XDDFChartData> data = findChartData(chart);
+
+        XDDFScatterChartData scatter = (XDDFScatterChartData) data.get(0);
+        assertEquals(ScatterStyle.LINE_MARKER, scatter.getStyle());
+        scatter.setStyle(ScatterStyle.SMOOTH);
+        assertEquals(ScatterStyle.SMOOTH, scatter.getStyle());
+
+        fillChartData(chart, scatter);
+        pptx.close();
+    }
+
+	private void fillChartData(XSLFChart chart, XDDFChartData data) {
+	    final int numOfPoints = 3;
+        final String[] categories = {"First", "Second", "Third"};
+        final Integer[] values = {1, 3, 4};
+
+        final String categoryDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 0, 0));
+        final String valuesDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 1, 1));
+
+		final XDDFChartData.Series series = data.getSeries().get(0);
+		final XDDFDataSource<?> categoryData = XDDFDataSourcesFactory.fromArray(categories, categoryDataRange);
+        final XDDFNumericalDataSource<Integer> valuesData = XDDFDataSourcesFactory.fromArray(values, valuesDataRange);
+        series.replaceData(categoryData, valuesData);
+        final String title = "Apache POI";
+        series.setTitle(title, chart.setSheetTitle(title));
+        chart.plot(data);
+	}
+
+    private XSLFChart findChart(XSLFSlide slide) {
         // find chart in the slide
         XSLFChart chart = null;
         for(POIXMLDocumentPart part : slide.getRelations()){
@@ -65,76 +172,161 @@ public class TestXSLFChart {
             }
         }
 
-        if(chart == null) throw new IllegalStateException("chart not found in the template");
-
-        // embedded Excel workbook that holds the chart data
-        POIXMLDocumentPart xlsPart = chart.getRelations().get(0);
-        XSSFWorkbook wb = new XSSFWorkbook();
-        XSSFSheet sheet = wb.createSheet();
-
-        CTChart ctChart = chart.getCTChart();
-        CTPlotArea plotArea = ctChart.getPlotArea();
-
-        CTPieChart pieChart = plotArea.getPieChartArray(0);
-        //Pie Chart Series
-        CTPieSer ser = pieChart.getSerArray(0);
-
-        // Series Text
-        CTSerTx tx = ser.getTx();
-        tx.getStrRef().getStrCache().getPtArray(0).setV(chartTitle);
-        sheet.createRow(0).createCell(1).setCellValue(chartTitle);
-        String titleRef = new CellReference(sheet.getSheetName(), 0, 1, true, true).formatAsString();
-        tx.getStrRef().setF(titleRef);
-
-
-        // Category Axis Data
-        CTAxDataSource cat = ser.getCat();
-        CTStrData strData = cat.getStrRef().getStrCache();
-
-        // Values
-        CTNumDataSource valSrc = ser.getVal();
-        CTNumData numData = valSrc.getNumRef().getNumCache();
-
-        strData.setPtArray(null);  // unset old axis text
-        numData.setPtArray(null);  // unset old values
-
-        Map<String, Double> pieModel = new LinkedHashMap<>();
-        pieModel.put("First", 1.0);
-        pieModel.put("Second", 3.0);
-        pieModel.put("Third", 4.0);
-
-        // set model
-        int idx = 0;
-        int rownum = 1;
-        for(String key : pieModel.keySet()){
-            double val = pieModel.get(key);
-
-            CTNumVal numVal = numData.addNewPt();
-            numVal.setIdx(idx);
-            numVal.setV("" + val);
-
-            CTStrVal sVal = strData.addNewPt();
-            sVal.setIdx(idx);
-            sVal.setV(key);
-
-            idx++;
-            XSSFRow row = sheet.createRow(rownum++);
-            row.createCell(0).setCellValue(key);
-            row.createCell(1).setCellValue(val);
+        if(chart == null) {
+            throw new IllegalStateException("chart not found in the template");
         }
-        numData.getPtCount().setVal(idx);
-        strData.getPtCount().setVal(idx);
 
-        String numDataRange = new CellRangeAddress(1, rownum-1, 1, 1).formatAsString(sheet.getSheetName(), true);
-        valSrc.getNumRef().setF(numDataRange);
-        String axisDataRange = new CellRangeAddress(1, rownum-1, 0, 0).formatAsString(sheet.getSheetName(), true);
-        cat.getStrRef().setF(axisDataRange);
-
-        // updated the embedded workbook with the data
-        OutputStream xlsOut = xlsPart.getPackagePart().getOutputStream();
-        wb.write(xlsOut);
-        xlsOut.close();
-        wb.close();
+        checkLegendOperations(chart);
+        return chart;
+    }
+
+    private List<XDDFChartData> findChartData(XSLFChart chart) {
+        List<XDDFChartData> data = chart.getChartSeries();
+        assertNotNull(data);
+        assertEquals(1, data.size());
+
+        XDDFChartData firstSeries = data.get(0);
+		assertNotNull(firstSeries);
+		if (firstSeries instanceof XDDFScatterChartData) {
+            assertEquals(null, firstSeries.getCategoryAxis());
+            assertEquals(2, firstSeries.getValueAxes().size());
+            checkAxisOperations(firstSeries.getValueAxes().get(0));
+            checkAxisOperations(firstSeries.getValueAxes().get(1));
+		} else if (!(firstSeries instanceof XDDFPieChartData)) {
+			assertNotNull(firstSeries.getCategoryAxis());
+			assertEquals(1, firstSeries.getValueAxes().size());
+			checkAxisOperations(firstSeries.getValueAxes().get(0));
+		}
+
+        return data;
     }
 
-}
\ No newline at end of file
+	private void checkLegendOperations(XSLFChart chart) {
+		XDDFChartLegend legend = chart.getOrAddLegend();
+        assertFalse(legend.isOverlay());
+		legend.setOverlay(true);
+        assertTrue(legend.isOverlay());
+		legend.setPosition(LegendPosition.TOP_RIGHT);
+		assertEquals(LegendPosition.TOP_RIGHT, legend.getPosition());
+
+		XDDFManualLayout layout = legend.getOrAddManualLayout();
+		assertNotNull(layout.getTarget());
+		assertNotNull(layout.getXMode());
+		assertNotNull(layout.getYMode());
+		assertNotNull(layout.getHeightMode());
+		assertNotNull(layout.getWidthMode());
+		/*
+		 * According to interface, 0.0 should be returned for
+		 * uninitialized double properties.
+		 */
+		assertTrue(layout.getX() == 0.0);
+		assertTrue(layout.getY() == 0.0);
+		assertTrue(layout.getWidthRatio() == 0.0);
+		assertTrue(layout.getHeightRatio() == 0.0);
+
+		final double newRatio = 1.1;
+		final double newCoordinate = 0.3;
+		final LayoutMode nonDefaultMode = LayoutMode.FACTOR;
+		final LayoutTarget nonDefaultTarget = LayoutTarget.OUTER;
+
+		layout.setWidthRatio(newRatio);
+		assertTrue(layout.getWidthRatio() == newRatio);
+
+		layout.setHeightRatio(newRatio);
+		assertTrue(layout.getHeightRatio() == newRatio);
+
+		layout.setX(newCoordinate);
+		assertTrue(layout.getX() == newCoordinate);
+
+		layout.setY(newCoordinate);
+		assertTrue(layout.getY() == newCoordinate);
+
+		layout.setXMode(nonDefaultMode);
+		assertTrue(layout.getXMode() == nonDefaultMode);
+
+		layout.setYMode(nonDefaultMode);
+		assertTrue(layout.getYMode() == nonDefaultMode);
+
+		layout.setWidthMode(nonDefaultMode);
+		assertTrue(layout.getWidthMode() == nonDefaultMode);
+
+		layout.setHeightMode(nonDefaultMode);
+		assertTrue(layout.getHeightMode() == nonDefaultMode);
+
+		layout.setTarget(nonDefaultTarget);
+		assertTrue(layout.getTarget() == nonDefaultTarget);
+	}
+
+	private void checkAxisOperations(XDDFValueAxis axis) {
+		axis.setCrossBetween(AxisCrossBetween.MIDPOINT_CATEGORY);
+		assertEquals(AxisCrossBetween.MIDPOINT_CATEGORY, axis.getCrossBetween());
+
+		axis.setCrosses(AxisCrosses.AUTO_ZERO);
+		assertEquals(AxisCrosses.AUTO_ZERO, axis.getCrosses());
+
+		final String numberFormat = "General";
+		axis.setNumberFormat(numberFormat);
+		assertEquals(numberFormat, axis.getNumberFormat());
+
+		axis.setPosition(AxisPosition.BOTTOM);
+		assertEquals(AxisPosition.BOTTOM, axis.getPosition());
+
+		axis.setMajorTickMark(AxisTickMark.NONE);
+		assertEquals(AxisTickMark.NONE, axis.getMajorTickMark());
+
+		axis.setMajorTickMark(AxisTickMark.IN);
+		assertEquals(AxisTickMark.IN, axis.getMajorTickMark());
+
+		axis.setMajorTickMark(AxisTickMark.OUT);
+		assertEquals(AxisTickMark.OUT, axis.getMajorTickMark());
+
+		axis.setMajorTickMark(AxisTickMark.CROSS);
+		assertEquals(AxisTickMark.CROSS, axis.getMajorTickMark());
+
+		axis.setMinorTickMark(AxisTickMark.NONE);
+		assertEquals(AxisTickMark.NONE, axis.getMinorTickMark());
+
+		axis.setMinorTickMark(AxisTickMark.IN);
+		assertEquals(AxisTickMark.IN, axis.getMinorTickMark());
+
+		axis.setMinorTickMark(AxisTickMark.OUT);
+		assertEquals(AxisTickMark.OUT, axis.getMinorTickMark());
+
+		axis.setMinorTickMark(AxisTickMark.CROSS);
+		assertEquals(AxisTickMark.CROSS, axis.getMinorTickMark());
+
+		axis.setVisible(true);
+		assertTrue(axis.isVisible());
+
+		axis.setVisible(false);
+		assertFalse(axis.isVisible());
+
+		final double EPSILON = 1E-7;
+		axis.setLogBase(Math.E);
+		assertTrue(Math.abs(axis.getLogBase() - Math.E) < EPSILON);
+
+		final double newValue = 10.0;
+
+		axis.setMinimum(newValue);
+		assertTrue(Math.abs(axis.getMinimum() - newValue) < EPSILON);
+
+		axis.setMaximum(newValue);
+		assertTrue(Math.abs(axis.getMaximum() - newValue) < EPSILON);
+
+		IllegalArgumentException iae = null;
+		try {
+			axis.setLogBase(0.0);
+		} catch (IllegalArgumentException e) {
+			iae = e;
+		}
+		assertNotNull(iae);
+
+		iae = null;
+		try {
+			axis.setLogBase(30000.0);
+		} catch (IllegalArgumentException e) {
+			iae = e;
+		}
+		assertNotNull(iae);
+	}
+}

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFChart.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFChart.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFChart.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFChart.java Sun Nov 26 14:03:01 2017
@@ -17,46 +17,46 @@
 
 package org.apache.poi.xssf.usermodel;
 
-import junit.framework.TestCase;
-
 import org.apache.poi.xssf.XSSFTestDataSamples;
 
+import junit.framework.TestCase;
+
 public final class TestXSSFChart extends TestCase {
- 
+
     public void testGetAccessors() {
         XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithThreeCharts.xlsx");
         XSSFSheet s1 = wb.getSheetAt(0);
         XSSFSheet s2 = wb.getSheetAt(1);
         XSSFSheet s3 = wb.getSheetAt(2);
-        
+
         assertEquals(0, s1.getRelations().size());
         assertEquals(1, s2.getRelations().size());
         assertEquals(1, s3.getRelations().size());
-        
+
         assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
     }
-    
+
     public void testGetCharts() throws Exception {
        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithThreeCharts.xlsx");
-       
+
        XSSFSheet s1 = wb.getSheetAt(0);
        XSSFSheet s2 = wb.getSheetAt(1);
        XSSFSheet s3 = wb.getSheetAt(2);
-       
+
        assertEquals(0, s1.createDrawingPatriarch().getCharts().size());
        assertEquals(2, s2.createDrawingPatriarch().getCharts().size());
        assertEquals(1, s3.createDrawingPatriarch().getCharts().size());
-       
+
        // Check the titles
        XSSFChart chart = s2.createDrawingPatriarch().getCharts().get(0);
        assertEquals(null, chart.getTitleText());
-       
+
        chart = s2.createDrawingPatriarch().getCharts().get(1);
        assertEquals("Pie Chart Title Thingy", chart.getTitleText().getString());
-       
+
        chart = s3.createDrawingPatriarch().getCharts().get(0);
        assertEquals("Sheet 3 Chart with Title", chart.getTitleText().getString());
-       
+
        assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
     }
 
@@ -68,14 +68,15 @@ public final class TestXSSFChart extends
 		XSSFChart c1 = d1.createChart(a1);
 
 		assertEquals(1, d1.getCharts().size());
+
 		assertNotNull(c1.getGraphicFrame());
-		assertNotNull(c1.getOrCreateLegend());
+		assertNotNull(c1.getOrAddLegend());
 
 		XSSFClientAnchor a2 = new XSSFClientAnchor(0, 0, 0, 0, 1, 11, 10, 60);
 		XSSFChart c2 = d1.createChart(a2);
 		assertNotNull(c2);
 		assertEquals(2, d1.getCharts().size());
-        
+
         assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
 	}
 }

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFCategoryAxis.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFCategoryAxis.java?rev=1816383&r1=1816382&r2=1816383&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFCategoryAxis.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFCategoryAxis.java Sun Nov 26 14:03:01 2017
@@ -17,24 +17,32 @@
 
 package org.apache.poi.xssf.usermodel.charts;
 
-import junit.framework.TestCase;
+import org.apache.poi.xddf.usermodel.chart.AxisCrosses;
+import org.apache.poi.xddf.usermodel.chart.AxisPosition;
+import org.apache.poi.xddf.usermodel.chart.XDDFCategoryAxis;
+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.usermodel.charts.*;
-import org.apache.poi.xssf.usermodel.*;
+import junit.framework.TestCase;
 
 public final class TestXSSFCategoryAxis extends TestCase {
- 
+
 	public void testAccessMethods() throws Exception {
 		XSSFWorkbook wb = new XSSFWorkbook();
 		XSSFSheet sheet = wb.createSheet();
 		XSSFDrawing drawing = sheet.createDrawingPatriarch();
 		XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 1, 1, 10, 30);
 		XSSFChart chart = drawing.createChart(anchor);
-		XSSFCategoryAxis axis = chart.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM);
+		XDDFCategoryAxis axis = chart.createCategoryAxis(AxisPosition.BOTTOM);
 
 		axis.setCrosses(AxisCrosses.AUTO_ZERO);
 		assertEquals(axis.getCrosses(), AxisCrosses.AUTO_ZERO);
 
-		assertEquals(chart.getAxis().size(), 1);
+		assertEquals(chart.getAxes().size(), 1);
+
+		wb.close();
 	}
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org