* @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();
}
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);
}
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;
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;
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();
private void parseAxis() {
// TODO: add other axis types
parseCategoryAxis();
+ parseDateAxis();
parseValueAxis();
}
}
}
+ 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));
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.
return ctCatAx.getMinorTickMark();
}
+ public CTChartLines getMajorGridLines() {
+ return ctCatAx.getMajorGridlines();
+ }
+
public void crossAxis(ChartAxis axis) {
ctCatAx.getCrossAx().setVal(axis.getId());
}
setMajorTickMark(AxisTickMark.CROSS);
setMinorTickMark(AxisTickMark.NONE);
}
+
+ public boolean hasNumberFormat() {
+ return ctCatAx.isSetNumFmt();
+ }
}
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;
/**
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;
--- /dev/null
+/* ====================================================================
+ 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();
+ }
+}
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;
return ctValAx.getMinorTickMark();
}
+ public CTChartLines getMajorGridLines() {
+ return ctValAx.getMajorGridlines();
+ }
+
public void crossAxis(ChartAxis axis) {
ctValAx.getCrossAx().setVal(axis.getId());
}
throw new IllegalArgumentException();
}
}
+
+ public boolean hasNumberFormat() {
+ return ctValAx.isSetNumFmt();
+ }
}
--- /dev/null
+/* ====================================================================
+ 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);
+ }
+}