git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1884080 13f79535-47bb-0310-9956-ffa450edef68tags/before_ooxml_3rd_edition
@@ -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; | |||
} | |||
} |
@@ -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(); | |||
} |
@@ -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 |