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-unsubscr...@poi.apache.org For additional commands, e-mail: commits-h...@poi.apache.org