From 63bf8e8ba53335df9f003d669dc733ab1272fee6 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Wed, 18 Oct 2017 18:26:41 +0000 Subject: [PATCH] Add getter/setter for ReadingOrder to XSSF, closes issue #73 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1812558 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/ss/usermodel/ReadingOrder.java | 50 +++++++++++++++++++ .../poi/xssf/usermodel/XSSFCellStyle.java | 19 +++++++ .../extensions/XSSFCellAlignment.java | 26 +++++++++- .../poi/xssf/usermodel/TestXSSFCellStyle.java | 18 +++++++ 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/java/org/apache/poi/ss/usermodel/ReadingOrder.java diff --git a/src/java/org/apache/poi/ss/usermodel/ReadingOrder.java b/src/java/org/apache/poi/ss/usermodel/ReadingOrder.java new file mode 100644 index 0000000000..0544cb1542 --- /dev/null +++ b/src/java/org/apache/poi/ss/usermodel/ReadingOrder.java @@ -0,0 +1,50 @@ +/* ==================================================================== + 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; + +/** + * The enumeration value indicating reading order of a cell, + * i.e., whether the reading order is Context(Default), Left To Right or Right To Left + */ +public enum ReadingOrder { + /** + * The reading order is Context(Default). + */ + CONTEXT, + + /** + * The reading order is Left To Right. + */ + LEFT_TO_RIGHT, + + /** + * The reading order is Right To Left. + */ + RIGHT_TO_LEFT; + + public short getCode() { + return (short) ordinal(); + } + + public static ReadingOrder forLong(long code) { + if (code < 0 || code >= values().length) { + throw new IllegalArgumentException("Invalid ReadingOrder code: " + code); + } + return values()[(int)code]; + } +} diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java index c561499d78..e990cb7736 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java @@ -26,6 +26,7 @@ import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.ReadingOrder; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.util.Internal; import org.apache.poi.xssf.model.StylesTable; @@ -1003,6 +1004,24 @@ public class XSSFCellStyle implements CellStyle { } return ct; } + + /** + * Set reading order for the cell + * + * @param order - the reading order + */ + public void setReadingOrder(ReadingOrder order) { + getCellAlignment().setReadingOrder(order); + } + + /** + * Get reading order of the cell + * + * @return ReadingOrder - the reading order + */ + public ReadingOrder getReadingOrder() { + return getCellAlignment().getReadingOrder(); + } /** * Get a copy of the currently used CTBorder, if none is used, return a new instance. diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellAlignment.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellAlignment.java index d10c031c8b..9fed1a8cf0 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellAlignment.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/extensions/XSSFCellAlignment.java @@ -17,6 +17,7 @@ package org.apache.poi.xssf.usermodel.extensions; import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.ReadingOrder; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.util.Internal; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellAlignment; @@ -84,7 +85,30 @@ public class XSSFCellAlignment { public void setHorizontal(HorizontalAlignment align) { cellAlignement.setHorizontal(STHorizontalAlignment.Enum.forInt(align.ordinal() + 1)); } - + + /** + * Set the type of reading order for the cell + * + * @param order - the type of reading order + * @see ReadingOrder + */ + public void setReadingOrder(ReadingOrder order) { + cellAlignement.setReadingOrder(order.getCode()); + } + + /** + * Get the reading order for the cell + * + * @return the value of reading order + * @see ReadingOrder + */ + public ReadingOrder getReadingOrder() { + if(cellAlignement != null && cellAlignement.isSetReadingOrder()) { + return ReadingOrder.forLong(cellAlignement.getReadingOrder()); + } + return ReadingOrder.CONTEXT; + } + /** * Get the number of spaces to indent the text in the cell * diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java index 39ff3715d7..0aaa2b6785 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCellStyle.java @@ -698,6 +698,24 @@ public class TestXSSFCellStyle { assertEquals(HorizontalAlignment.CENTER, cellStyle.getAlignmentEnum()); assertEquals(STHorizontalAlignment.CENTER, cellStyle.getCellAlignment().getCTCellAlignment().getHorizontal()); } + + @Test + public void testGetSetReadingOrder() { + assertEquals(ReadingOrder.CONTEXT, cellStyle.getReadingOrder()); + assertEquals(ReadingOrder.CONTEXT.getCode(), cellStyle.getCellAlignment().getCTCellAlignment().getReadingOrder()); + + cellStyle.setReadingOrder(ReadingOrder.LEFT_TO_RIGHT); + assertEquals(ReadingOrder.LEFT_TO_RIGHT, cellStyle.getReadingOrder()); + assertEquals(ReadingOrder.LEFT_TO_RIGHT.getCode(), cellStyle.getCellAlignment().getCTCellAlignment().getReadingOrder()); + + cellStyle.setReadingOrder(ReadingOrder.RIGHT_TO_LEFT); + assertEquals(ReadingOrder.RIGHT_TO_LEFT, cellStyle.getReadingOrder()); + assertEquals(ReadingOrder.RIGHT_TO_LEFT.getCode(), cellStyle.getCellAlignment().getCTCellAlignment().getReadingOrder()); + + cellStyle.setReadingOrder(ReadingOrder.CONTEXT); + assertEquals(ReadingOrder.CONTEXT, cellStyle.getReadingOrder()); + assertEquals(ReadingOrder.CONTEXT.getCode(), cellStyle.getCellAlignment().getCTCellAlignment().getReadingOrder()); + } @SuppressWarnings("deprecation") @Test -- 2.39.5