* A factory for different chart axis.
*
* @author Roman Kashitsyn
+ * @author Martin Andersson
*/
@Beta
public interface ChartAxisFactory {
-
+
/**
* @return new value axis
*/
ValueAxis createValueAxis(AxisPosition pos);
+ /**
+ * @return new category axis.
+ */
+ ChartAxis createCategoryAxis(AxisPosition pos);
+
}
import org.apache.poi.ss.usermodel.Chart;
import org.apache.poi.ss.usermodel.charts.ChartAxis;
import org.apache.poi.ss.usermodel.charts.ChartAxisFactory;
+import org.apache.poi.xssf.usermodel.charts.XSSFCategoryAxis;
import org.apache.poi.xssf.usermodel.charts.XSSFChartDataFactory;
import org.apache.poi.xssf.usermodel.charts.XSSFChartAxis;
import org.apache.poi.xssf.usermodel.charts.XSSFValueAxis;
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.CTTitle;
* Represents a SpreadsheetML Chart
* @author Nick Burch
* @author Roman Kashitsyn
+ * @author Martin Andersson
*/
public final class XSSFChart extends POIXMLDocumentPart implements Chart, ChartAxisFactory {
return valueAxis;
}
+ public XSSFCategoryAxis createCategoryAxis(AxisPosition pos) {
+ long id = axis.size() + 1;
+ XSSFCategoryAxis categoryAxis = new XSSFCategoryAxis(this, id, pos);
+ if (axis.size() == 1) {
+ ChartAxis ax = axis.get(0);
+ ax.crossAxis(categoryAxis);
+ categoryAxis.crossAxis(ax);
+ }
+ axis.add(categoryAxis);
+ return categoryAxis;
+ }
+
public List<? extends XSSFChartAxis> getAxis() {
if (axis.isEmpty() && hasAxis()) {
parseAxis();
private void parseAxis() {
// TODO: add other axis types
+ parseCategoryAxis();
parseValueAxis();
}
+ private void parseCategoryAxis() {
+ for (CTCatAx catAx : chart.getPlotArea().getCatAxList()) {
+ axis.add(new XSSFCategoryAxis(this, catAx));
+ }
+ }
+
private void parseValueAxis() {
for (CTValAx valAx : chart.getPlotArea().getValAxList()) {
axis.add(new XSSFValueAxis(this, valAx));
--- /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.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.CTCatAx;
+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.STTickLblPos;
+
+/**
+ * Category axis type.
+ *
+ * @author Martin Andersson
+ */
+@Beta
+public class XSSFCategoryAxis extends XSSFChartAxis {
+
+ private CTCatAx ctCatAx;
+
+ public XSSFCategoryAxis(XSSFChart chart, long id, AxisPosition pos) {
+ super(chart);
+ createAxis(id, pos);
+ }
+
+ public XSSFCategoryAxis(XSSFChart chart, CTCatAx ctCatAx) {
+ super(chart);
+ this.ctCatAx = ctCatAx;
+ }
+
+ public long getId() {
+ return ctCatAx.getAxId().getVal();
+ }
+
+ protected CTAxPos getCTAxPos() {
+ return ctCatAx.getAxPos();
+ }
+
+ protected CTNumFmt getCTNumFmt() {
+ if (ctCatAx.isSetNumFmt()) {
+ return ctCatAx.getNumFmt();
+ }
+ return ctCatAx.addNewNumFmt();
+ }
+
+ protected CTScaling getCTScaling() {
+ return ctCatAx.getScaling();
+ }
+
+ protected CTCrosses getCTCrosses() {
+ return ctCatAx.getCrosses();
+ }
+
+ public void crossAxis(ChartAxis axis) {
+ ctCatAx.getCrossAx().setVal(axis.getId());
+ }
+
+ private void createAxis(long id, AxisPosition pos) {
+ ctCatAx = chart.getCTChart().getPlotArea().addNewCatAx();
+ ctCatAx.addNewAxId().setVal(id);
+ ctCatAx.addNewAxPos();
+ ctCatAx.addNewScaling();
+ ctCatAx.addNewCrosses();
+ ctCatAx.addNewCrossAx();
+ ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
+
+ setPosition(pos);
+ setOrientation(AxisOrientation.MIN_MAX);
+ setCrosses(AxisCrosses.AUTO_ZERO);
+ }
+}
--- /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 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);
+
+ axis.setCrosses(AxisCrosses.AUTO_ZERO);
+ assertEquals(axis.getCrosses(), AxisCrosses.AUTO_ZERO);
+
+ assertEquals(chart.getAxis().size(), 1);
+ }
+}