From 3387c0a53b826d26739c9e05efa0ebdb8983056c Mon Sep 17 00:00:00 2001 From: Sayi Date: Fri, 4 Dec 2020 03:57:24 +0000 Subject: [PATCH] get and set heightRule for table row git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1884080 13f79535-47bb-0310-9956-ffa450edef68 --- .../xwpf/usermodel/TableRowHeightRule.java | 54 +++++++++++++++++++ .../poi/xwpf/usermodel/XWPFTableRow.java | 32 +++++++++++ .../poi/xwpf/usermodel/TestXWPFTableRow.java | 14 +++++ 3 files changed, 100 insertions(+) create mode 100644 src/ooxml/java/org/apache/poi/xwpf/usermodel/TableRowHeightRule.java diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/TableRowHeightRule.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/TableRowHeightRule.java new file mode 100644 index 0000000000..2a42c76baf --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/TableRowHeightRule.java @@ -0,0 +1,54 @@ +/* ==================================================================== + 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.xwpf.usermodel; + +import java.util.HashMap; +import java.util.Map; + +/** + * Sets height rule values allowed for Table Rows + */ +public enum TableRowHeightRule { + + AUTO(1), + EXACT(2), + AT_LEAST(3); + + private static Map imap = new HashMap<>(); + + static { + for (TableRowHeightRule p : values()) { + imap.put(p.getValue(), p); + } + } + + private final int value; + + private TableRowHeightRule(int val) { + value = val; + } + + public static TableRowHeightRule valueOf(int type) { + TableRowHeightRule err = imap.get(type); + if (err == null) throw new IllegalArgumentException("Unknown table row height rule: " + type); + return err; + } + + public int getValue() { + return value; + } +} diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java index e79f7d2c16..953ca6db08 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java @@ -30,6 +30,7 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtCell; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTrPr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHeightRule; /** @@ -119,6 +120,37 @@ public class XWPFTableRow { h.setVal(new BigInteger(Integer.toString(height))); } + /** + * Returns the meaning of the height specified for this table row. + *

+ * If hRule is omitted, then its value shall be assumed to be auto. + *

+ * + * @return the height rule of this row. + */ + public TableRowHeightRule getHeightRule() { + CTTrPr properties = getTrPr(); + return properties.sizeOfTrHeightArray() == 0 ? TableRowHeightRule.AUTO + : TableRowHeightRule.valueOf(properties.getTrHeightArray(0).getHRule().intValue()); + } + + /** + * Specifies the height rule for this table row. + *

+ * If the value of hRule is auto, then the table row's height should be automatically determined based on the + * height of its contents. The h value is ignored. + * If the value of hRule is atLeast, then the table row's height should be at least the value the h attribute. + * If the value of hRule is exact, then the table row's height should be exactly the value of the h attribute. + *

+ * + * @param heightRule the height rule to apply to this row. + */ + public void setHeightRule(TableRowHeightRule heightRule) { + CTTrPr properties = getTrPr(); + CTHeight h = properties.sizeOfTrHeightArray() == 0 ? properties.addNewTrHeight() : properties.getTrHeightArray(0); + h.setHRule(STHeightRule.Enum.forInt(heightRule.getValue())); + } + private CTTrPr getTrPr() { return (ctRow.isSetTrPr()) ? ctRow.getTrPr() : ctRow.addNewTrPr(); } diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableRow.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableRow.java index 620b59e7ce..953a82e2fc 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableRow.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableRow.java @@ -156,6 +156,20 @@ public class TestXWPFTableRow { doc.close(); } + @Test + public void testGetSetHeightRule() throws IOException { + XWPFDocument doc = new XWPFDocument(); + XWPFTableRow tr = doc.createTable(1, 1).createRow(); + assertEquals(TableRowHeightRule.AUTO, tr.getHeightRule()); + + tr.setHeightRule(TableRowHeightRule.AT_LEAST); + assertEquals(TableRowHeightRule.AT_LEAST, tr.getHeightRule()); + + tr.setHeightRule(TableRowHeightRule.EXACT); + assertEquals(TableRowHeightRule.EXACT, tr.getHeightRule()); + doc.close(); + } + @Test public void testBug62174() throws IOException { try (XWPFDocument doc = XWPFTestDataSamples -- 2.39.5