]> source.dussan.org Git - poi.git/commitdiff
get and set heightRule for table row
authorSayi <sayi@apache.org>
Fri, 4 Dec 2020 03:57:24 +0000 (03:57 +0000)
committerSayi <sayi@apache.org>
Fri, 4 Dec 2020 03:57:24 +0000 (03:57 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1884080 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xwpf/usermodel/TableRowHeightRule.java [new file with mode: 0644]
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableRow.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 (file)
index 0000000..2a42c76
--- /dev/null
@@ -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<Integer, TableRowHeightRule> 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;
+    }
+}
index e79f7d2c16c8ed4afb9be00103d220d429ccc267..953ca6db087b3d7476697c912b00bb75cd9eb090 100644 (file)
@@ -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.
+     * <p>
+     * If hRule is omitted, then its value shall be assumed to be auto.
+     * </p>
+     *
+     * @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.
+     * <p>
+     * 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.
+     * </p>
+     *
+     * @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();
     }
index 620b59e7ce1cc0a8a8adcdfd92d48a2ed59b65b0..953a82e2fc5107918147acb8a8bac539e0e029da 100644 (file)
@@ -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