aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/java/org/apache/poi/ss/usermodel/charts/ChartAxis.java6
-rw-r--r--src/java/org/apache/poi/ss/usermodel/charts/ChartAxisFactory.java12
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java21
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java24
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java16
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFDateAxis.java134
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java22
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFDateAxis.java40
8 files changed, 257 insertions, 18 deletions
diff --git a/src/java/org/apache/poi/ss/usermodel/charts/ChartAxis.java b/src/java/org/apache/poi/ss/usermodel/charts/ChartAxis.java
index f3d9365894..45cec602f1 100644
--- a/src/java/org/apache/poi/ss/usermodel/charts/ChartAxis.java
+++ b/src/java/org/apache/poi/ss/usermodel/charts/ChartAxis.java
@@ -153,4 +153,10 @@ public interface ChartAxis {
* @param tickMark minor tick mark type.
*/
void setMinorTickMark(AxisTickMark tickMark);
+
+ /**
+ * Use this to check before retrieving a number format, as calling {@link #getNumberFormat()} may create a default one if none exists.
+ * @return true if a number format element is defined, false if not
+ */
+ boolean hasNumberFormat();
}
diff --git a/src/java/org/apache/poi/ss/usermodel/charts/ChartAxisFactory.java b/src/java/org/apache/poi/ss/usermodel/charts/ChartAxisFactory.java
index 87eff04cf5..3eb80e28b5 100644
--- a/src/java/org/apache/poi/ss/usermodel/charts/ChartAxisFactory.java
+++ b/src/java/org/apache/poi/ss/usermodel/charts/ChartAxisFactory.java
@@ -29,13 +29,21 @@ import org.apache.poi.util.Beta;
public interface ChartAxisFactory {
/**
- * @return new value axis
+ * @param pos
+ * @return new value axis at the end of the list at the specified chart position
*/
ValueAxis createValueAxis(AxisPosition pos);
/**
- * @return new category axis.
+ * @param pos
+ * @return new category axis at the end of the list at the specified chart position
*/
ChartAxis createCategoryAxis(AxisPosition pos);
+
+ /**
+ * @param pos
+ * @return new date category axis at the end of the list at the specified chart position
+ */
+ ChartAxis createDateAxis(AxisPosition pos);
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java
index 43e865989a..d7f935e6b4 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java
@@ -39,6 +39,7 @@ import org.apache.poi.xssf.usermodel.charts.XSSFCategoryAxis;
import org.apache.poi.xssf.usermodel.charts.XSSFChartAxis;
import org.apache.poi.xssf.usermodel.charts.XSSFChartDataFactory;
import org.apache.poi.xssf.usermodel.charts.XSSFChartLegend;
+import org.apache.poi.xssf.usermodel.charts.XSSFDateAxis;
import org.apache.poi.xssf.usermodel.charts.XSSFManualLayout;
import org.apache.poi.xssf.usermodel.charts.XSSFValueAxis;
import org.apache.xmlbeans.XmlException;
@@ -47,6 +48,7 @@ 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;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTPrintSettings;
@@ -224,6 +226,18 @@ public final class XSSFChart extends POIXMLDocumentPart implements Chart, ChartA
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;
+ }
+
public List<? extends XSSFChartAxis> getAxis() {
if (axis.isEmpty() && hasAxis()) {
parseAxis();
@@ -438,6 +452,7 @@ public final class XSSFChart extends POIXMLDocumentPart implements Chart, ChartA
private void parseAxis() {
// TODO: add other axis types
parseCategoryAxis();
+ parseDateAxis();
parseValueAxis();
}
@@ -447,6 +462,12 @@ public final class XSSFChart extends POIXMLDocumentPart implements Chart, ChartA
}
}
+ 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));
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java
index 43ac8f6c4f..f7a52ebef7 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java
@@ -17,10 +17,22 @@
package org.apache.poi.xssf.usermodel.charts;
-import org.apache.poi.ss.usermodel.charts.*;
+import org.apache.poi.ss.usermodel.charts.AxisCrosses;
+import org.apache.poi.ss.usermodel.charts.AxisOrientation;
+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.xssf.usermodel.XSSFChart;
-import org.openxmlformats.schemas.drawingml.x2006.chart.*;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxPos;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTCatAx;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTChartLines;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTCrosses;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumFmt;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTScaling;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTTickMark;
+import org.openxmlformats.schemas.drawingml.x2006.chart.STTickLblPos;
/**
* Category axis type.
@@ -80,6 +92,10 @@ public class XSSFCategoryAxis extends XSSFChartAxis {
return ctCatAx.getMinorTickMark();
}
+ public CTChartLines getMajorGridLines() {
+ return ctCatAx.getMajorGridlines();
+ }
+
public void crossAxis(ChartAxis axis) {
ctCatAx.getCrossAx().setVal(axis.getId());
}
@@ -103,4 +119,8 @@ public class XSSFCategoryAxis extends XSSFChartAxis {
setMajorTickMark(AxisTickMark.CROSS);
setMinorTickMark(AxisTickMark.NONE);
}
+
+ public boolean hasNumberFormat() {
+ return ctCatAx.isSetNumFmt();
+ }
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java
index 2e89755fc9..dacccaaf37 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java
@@ -17,24 +17,25 @@
package org.apache.poi.xssf.usermodel.charts;
-import org.apache.poi.ss.usermodel.charts.ChartAxis;
-import org.apache.poi.ss.usermodel.charts.AxisPosition;
-import org.apache.poi.ss.usermodel.charts.AxisOrientation;
import org.apache.poi.ss.usermodel.charts.AxisCrosses;
+import org.apache.poi.ss.usermodel.charts.AxisOrientation;
+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.xssf.usermodel.XSSFChart;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxPos;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumFmt;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTChartLines;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTCrosses;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTOrientation;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTLogBase;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumFmt;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTOrientation;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTScaling;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTickMark;
-import org.openxmlformats.schemas.drawingml.x2006.chart.STOrientation;
import org.openxmlformats.schemas.drawingml.x2006.chart.STAxPos;
import org.openxmlformats.schemas.drawingml.x2006.chart.STCrosses;
+import org.openxmlformats.schemas.drawingml.x2006.chart.STOrientation;
import org.openxmlformats.schemas.drawingml.x2006.chart.STTickMark;
/**
@@ -193,7 +194,8 @@ public abstract class XSSFChartAxis implements ChartAxis {
protected abstract CTBoolean getDelete();
protected abstract CTTickMark getMajorCTTickMark();
protected abstract CTTickMark getMinorCTTickMark();
-
+ public abstract CTChartLines getMajorGridLines();
+
private static STOrientation.Enum fromAxisOrientation(AxisOrientation orientation) {
switch (orientation) {
case MIN_MAX: return STOrientation.MIN_MAX;
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFDateAxis.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFDateAxis.java
new file mode 100644
index 0000000000..7917fc7907
--- /dev/null
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFDateAxis.java
@@ -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.xssf.usermodel.charts;
+
+import org.apache.poi.ss.usermodel.charts.AxisCrosses;
+import org.apache.poi.ss.usermodel.charts.AxisOrientation;
+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.xssf.usermodel.XSSFChart;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxPos;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTCatAx;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTChartLines;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTCrosses;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTDateAx;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumFmt;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTScaling;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTTickMark;
+import org.openxmlformats.schemas.drawingml.x2006.chart.STTickLblPos;
+
+/**
+ * Date axis type. Currently only implements the same values as {@link XSSFCategoryAxis}, since the two are nearly identical.
+ */
+@Beta
+public class XSSFDateAxis extends XSSFChartAxis {
+
+ private CTDateAx ctDateAx;
+
+ /**
+ * @param chart
+ * @param id
+ * @param pos
+ */
+ public XSSFDateAxis(XSSFChart chart, long id, AxisPosition pos) {
+ super(chart);
+ createAxis(id, pos);
+ }
+
+ /**
+ * @param chart
+ * @param ctDateAx
+ */
+ public XSSFDateAxis(XSSFChart chart, CTDateAx ctDateAx) {
+ super(chart);
+ this.ctDateAx = ctDateAx;
+ }
+
+ public long getId() {
+ return ctDateAx.getAxId().getVal();
+ }
+
+ protected CTAxPos getCTAxPos() {
+ return ctDateAx.getAxPos();
+ }
+
+ protected CTNumFmt getCTNumFmt() {
+ if (ctDateAx.isSetNumFmt()) {
+ return ctDateAx.getNumFmt();
+ }
+ return ctDateAx.addNewNumFmt();
+ }
+
+ protected CTScaling getCTScaling() {
+ return ctDateAx.getScaling();
+ }
+
+ protected CTCrosses getCTCrosses() {
+ return ctDateAx.getCrosses();
+ }
+
+ @Override
+ protected CTBoolean getDelete() {
+ return ctDateAx.getDelete();
+ }
+
+ @Override
+ protected CTTickMark getMajorCTTickMark() {
+ return ctDateAx.getMajorTickMark();
+ }
+
+ @Override
+ protected CTTickMark getMinorCTTickMark() {
+ return ctDateAx.getMinorTickMark();
+ }
+
+ public CTChartLines getMajorGridLines() {
+ return ctDateAx.getMajorGridlines();
+ }
+
+ public void crossAxis(ChartAxis axis) {
+ ctDateAx.getCrossAx().setVal(axis.getId());
+ }
+
+ private void createAxis(long id, AxisPosition pos) {
+ ctDateAx = chart.getCTChart().getPlotArea().addNewDateAx();
+ ctDateAx.addNewAxId().setVal(id);
+ ctDateAx.addNewAxPos();
+ ctDateAx.addNewScaling();
+ ctDateAx.addNewCrosses();
+ ctDateAx.addNewCrossAx();
+ ctDateAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
+ ctDateAx.addNewDelete();
+ ctDateAx.addNewMajorTickMark();
+ ctDateAx.addNewMinorTickMark();
+
+ setPosition(pos);
+ setOrientation(AxisOrientation.MIN_MAX);
+ setCrosses(AxisCrosses.AUTO_ZERO);
+ setVisible(true);
+ setMajorTickMark(AxisTickMark.CROSS);
+ setMinorTickMark(AxisTickMark.NONE);
+ }
+
+ public boolean hasNumberFormat() {
+ return ctDateAx.isSetNumFmt();
+ }
+}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java
index 7fc0718a94..990460e1df 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java
@@ -17,23 +17,23 @@
package org.apache.poi.xssf.usermodel.charts;
-import org.apache.poi.ss.usermodel.charts.ChartAxis;
-import org.apache.poi.ss.usermodel.charts.ValueAxis;
-import org.apache.poi.ss.usermodel.charts.AxisPosition;
-import org.apache.poi.ss.usermodel.charts.AxisOrientation;
import org.apache.poi.ss.usermodel.charts.AxisCrossBetween;
import org.apache.poi.ss.usermodel.charts.AxisCrosses;
+import org.apache.poi.ss.usermodel.charts.AxisOrientation;
+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.ss.usermodel.charts.ValueAxis;
import org.apache.poi.util.Beta;
import org.apache.poi.xssf.usermodel.XSSFChart;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTValAx;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxPos;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
-import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumFmt;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTChartLines;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTCrosses;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumFmt;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTScaling;
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTickMark;
+import org.openxmlformats.schemas.drawingml.x2006.chart.CTValAx;
import org.openxmlformats.schemas.drawingml.x2006.chart.STCrossBetween;
import org.openxmlformats.schemas.drawingml.x2006.chart.STTickLblPos;
@@ -107,6 +107,10 @@ public class XSSFValueAxis extends XSSFChartAxis implements ValueAxis {
return ctValAx.getMinorTickMark();
}
+ public CTChartLines getMajorGridLines() {
+ return ctValAx.getMajorGridlines();
+ }
+
public void crossAxis(ChartAxis axis) {
ctValAx.getCrossAx().setVal(axis.getId());
}
@@ -150,4 +154,8 @@ public class XSSFValueAxis extends XSSFChartAxis implements ValueAxis {
throw new IllegalArgumentException();
}
}
+
+ public boolean hasNumberFormat() {
+ return ctValAx.isSetNumFmt();
+ }
}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFDateAxis.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFDateAxis.java
new file mode 100644
index 0000000000..81a474f502
--- /dev/null
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFDateAxis.java
@@ -0,0 +1,40 @@
+/* ====================================================================
+ 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.xssf.usermodel.charts;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.ss.usermodel.charts.*;
+import org.apache.poi.xssf.usermodel.*;
+
+public final class TestXSSFDateAxis 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);
+ XSSFDateAxis axis = chart.getChartAxisFactory().createDateAxis(AxisPosition.BOTTOM);
+
+ axis.setCrosses(AxisCrosses.AUTO_ZERO);
+ assertEquals(axis.getCrosses(), AxisCrosses.AUTO_ZERO);
+
+ assertEquals(chart.getAxis().size(), 1);
+ }
+}