--- src/java/org/apache/poi/ss/usermodel/charts/AxisTickMark.java +++ src/java/org/apache/poi/ss/usermodel/charts/AxisTickMark.java @@ -0,0 +1,30 @@ +/* ==================================================================== + 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.ss.usermodel.charts; + +/** + * Enumeration of possible axis tick marks. + * + * @author Martin Andersson + */ +public enum AxisTickMark { + NONE, + CROSS, + IN, + OUT; +} --- src/java/org/apache/poi/ss/usermodel/charts/ChartAxis.java +++ src/java/org/apache/poi/ss/usermodel/charts/ChartAxis.java @@ -26,7 +26,7 @@ import org.apache.poi.util.Beta; */ @Beta public interface ChartAxis { - + /** * @return axis id */ @@ -123,4 +123,34 @@ public interface ChartAxis { * @param axis that this axis should cross */ void crossAxis(ChartAxis axis); + + /** + * @return visibility of the axis. + */ + boolean isVisible(); + + /** + * @param value visibility of the axis. + */ + void setVisible(boolean value); + + /** + * @return major tick mark. + */ + AxisTickMark getMajorTickMark(); + + /** + * @param tickMark major tick mark type. + */ + void setMajorTickMark(AxisTickMark tickMark); + + /** + * @return minor tick mark. + */ + AxisTickMark getMinorTickMark(); + + /** + * @param tickMark minor tick mark type. + */ + void setMinorTickMark(AxisTickMark tickMark); } --- src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java +++ src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFCategoryAxis.java @@ -20,15 +20,19 @@ 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.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; +import org.openxmlformats.schemas.drawingml.x2006.chart.STTickMark; /** * Category axis type. @@ -73,6 +77,21 @@ public class XSSFCategoryAxis extends XSSFChartAxis { return ctCatAx.getCrosses(); } + @Override + protected CTBoolean getDelete() { + return ctCatAx.getDelete(); + } + + @Override + protected CTTickMark getMajorCTTickMark() { + return ctCatAx.getMajorTickMark(); + } + + @Override + protected CTTickMark getMinorCTTickMark() { + return ctCatAx.getMinorTickMark(); + } + public void crossAxis(ChartAxis axis) { ctCatAx.getCrossAx().setVal(axis.getId()); } @@ -85,9 +104,15 @@ public class XSSFCategoryAxis extends XSSFChartAxis { ctCatAx.addNewCrosses(); ctCatAx.addNewCrossAx(); ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO); + ctCatAx.addNewDelete(); + ctCatAx.addNewMajorTickMark(); + ctCatAx.addNewMinorTickMark(); setPosition(pos); setOrientation(AxisOrientation.MIN_MAX); setCrosses(AxisCrosses.AUTO_ZERO); + setVisible(true); + setMajorTickMark(AxisTickMark.CROSS); + setMinorTickMark(AxisTickMark.NONE); } } --- src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java +++ src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFChartAxis.java @@ -21,17 +21,21 @@ 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.AxisTickMark; 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.CTCrosses; import org.openxmlformats.schemas.drawingml.x2006.chart.CTOrientation; import org.openxmlformats.schemas.drawingml.x2006.chart.CTLogBase; 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.STTickMark; /** * Base class for all axis types. @@ -158,10 +162,37 @@ public abstract class XSSFChartAxis implements ChartAxis { getCTCrosses().setVal(fromAxisCrosses(crosses)); } + public boolean isVisible() { + return !getDelete().getVal(); + } + + public void setVisible(boolean value) { + getDelete().setVal(!value); + } + + public AxisTickMark getMajorTickMark() { + return toAxisTickMark(getMajorCTTickMark()); + } + + public void setMajorTickMark(AxisTickMark tickMark) { + getMajorCTTickMark().setVal(fromAxisTickMark(tickMark)); + } + + public AxisTickMark getMinorTickMark() { + return toAxisTickMark(getMinorCTTickMark()); + } + + public void setMinorTickMark(AxisTickMark tickMark) { + getMinorCTTickMark().setVal(fromAxisTickMark(tickMark)); + } + protected abstract CTAxPos getCTAxPos(); protected abstract CTNumFmt getCTNumFmt(); protected abstract CTScaling getCTScaling(); protected abstract CTCrosses getCTCrosses(); + protected abstract CTBoolean getDelete(); + protected abstract CTTickMark getMajorCTTickMark(); + protected abstract CTTickMark getMinorCTTickMark(); private static STOrientation.Enum fromAxisOrientation(AxisOrientation orientation) { switch (orientation) { @@ -221,4 +252,25 @@ public abstract class XSSFChartAxis implements ChartAxis { default: return AxisPosition.BOTTOM; } } + + private static STTickMark.Enum fromAxisTickMark(AxisTickMark tickMark) { + switch (tickMark) { + case NONE: return STTickMark.NONE; + case IN: return STTickMark.IN; + case OUT: return STTickMark.OUT; + case CROSS: return STTickMark.CROSS; + default: + throw new IllegalArgumentException("Unknown AxisTickMark: " + tickMark); + } + } + + private static AxisTickMark toAxisTickMark(CTTickMark ctTickMark) { + switch (ctTickMark.getVal().intValue()) { + case STTickMark.INT_NONE: return AxisTickMark.NONE; + case STTickMark.INT_IN: return AxisTickMark.IN; + case STTickMark.INT_OUT: return AxisTickMark.OUT; + case STTickMark.INT_CROSS: return AxisTickMark.CROSS; + default: return AxisTickMark.CROSS; + } + } } --- src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java +++ src/ooxml/java/org/apache/poi/xssf/usermodel/charts/XSSFValueAxis.java @@ -23,16 +23,20 @@ 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.AxisTickMark; 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.CTCrosses; import org.openxmlformats.schemas.drawingml.x2006.chart.CTScaling; +import org.openxmlformats.schemas.drawingml.x2006.chart.CTTickMark; import org.openxmlformats.schemas.drawingml.x2006.chart.STCrossBetween; import org.openxmlformats.schemas.drawingml.x2006.chart.STTickLblPos; +import org.openxmlformats.schemas.drawingml.x2006.chart.STTickMark; /** * Value axis type. @@ -89,6 +93,21 @@ public class XSSFValueAxis extends XSSFChartAxis implements ValueAxis { return ctValAx.getCrosses(); } + @Override + protected CTBoolean getDelete() { + return ctValAx.getDelete(); + } + + @Override + protected CTTickMark getMajorCTTickMark() { + return ctValAx.getMajorTickMark(); + } + + @Override + protected CTTickMark getMinorCTTickMark() { + return ctValAx.getMinorTickMark(); + } + public void crossAxis(ChartAxis axis) { ctValAx.getCrossAx().setVal(axis.getId()); } @@ -102,11 +121,17 @@ public class XSSFValueAxis extends XSSFChartAxis implements ValueAxis { ctValAx.addNewCrosses(); ctValAx.addNewCrossAx(); ctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO); + ctValAx.addNewDelete(); + ctValAx.addNewMajorTickMark(); + ctValAx.addNewMinorTickMark(); setPosition(pos); setOrientation(AxisOrientation.MIN_MAX); setCrossBetween(AxisCrossBetween.MIDPOINT_CATEGORY); setCrosses(AxisCrosses.AUTO_ZERO); + setVisible(true); + setMajorTickMark(AxisTickMark.CROSS); + setMinorTickMark(AxisTickMark.NONE); } private static STCrossBetween.Enum fromCrossBetween(AxisCrossBetween crossBetween) { --- src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartAxis.java +++ src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartAxis.java @@ -36,7 +36,7 @@ public final class TestXSSFChartAxis extends TestCase { XSSFChart chart = drawing.createChart(anchor); axis = chart.getChartAxisFactory().createValueAxis(AxisPosition.BOTTOM); } - + public void testLogBaseIllegalArgument() throws Exception { IllegalArgumentException iae = null; try { @@ -76,4 +76,39 @@ public final class TestXSSFChartAxis extends TestCase { assertTrue(Math.abs(axis.getMaximum() - newValue) < EPSILON); } + public void testVisibleAccessMethods() { + axis.setVisible(true); + assertTrue(axis.isVisible()); + + axis.setVisible(false); + assertFalse(axis.isVisible()); + } + + public void testMajorTickMarkAccessMethods() { + 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()); + } + + public void testMinorTickMarkAccessMethods() { + 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()); + } }