From: Dominik Stadler Date: Thu, 2 Jun 2016 20:09:44 +0000 (+0000) Subject: Avoid NPE in XWPFTableCell, taken from https://github.com/prasad-babu/poi/tree/WORKIN... X-Git-Tag: REL_3_15_BETA2~208 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8811c99ac3a9d6b843c99fc6cee00533067f1402;p=poi.git Avoid NPE in XWPFTableCell, taken from https://github.com/prasad-babu/poi/tree/WORKING_BRANCH git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1746625 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java index 4f1a77cfb7..f070b095e7 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java @@ -163,7 +163,7 @@ public class XWPFTableCell implements IBody, ICell { /** * removes a paragraph of this tablecell * - * @param pos + * @param pos The position in the list of paragraphs, 0-based */ public void removeParagraph(int pos) { paragraphs.remove(pos); @@ -234,6 +234,11 @@ public class XWPFTableCell implements IBody, ICell { CTTcPr tcpr = ctTc.getTcPr(); if (tcpr != null) { CTVerticalJc va = tcpr.getVAlign(); + if(va != null) { + vAlign = stVertAlignTypeMap.get(va.getVal().intValue()); + } else { + vAlign = XWPFVertAlign.TOP; + } if (va != null && va.getVal() != null) { vAlign = stVertAlignTypeMap.get(va.getVal().intValue()); } @@ -255,7 +260,7 @@ public class XWPFTableCell implements IBody, ICell { /** * add a new paragraph at position of the cursor * - * @param cursor + * @param cursor The XmlCursor structure created with XmlBeans * @return the inserted paragraph */ public XWPFParagraph insertNewParagraph(final XmlCursor cursor) { @@ -417,7 +422,7 @@ public class XWPFTableCell implements IBody, ICell { } public String getText() { - StringBuffer text = new StringBuffer(); + StringBuilder text = new StringBuilder(); for (XWPFParagraph p : paragraphs) { text.append(p.getText()); } @@ -437,7 +442,7 @@ public class XWPFTableCell implements IBody, ICell { StringBuffer text = new StringBuffer(); for (int i = 0; i < bodyElements.size(); i++) { - boolean isLast = (i == bodyElements.size() - 1) ? true : false; + boolean isLast = (i == bodyElements.size() - 1); appendBodyElementText(text, bodyElements.get(i), isLast); } @@ -447,7 +452,7 @@ public class XWPFTableCell implements IBody, ICell { private void appendBodyElementText(StringBuffer text, IBodyElement e, boolean isLast) { if (e instanceof XWPFParagraph) { text.append(((XWPFParagraph) e).getText()); - if (isLast == false) { + if (!isLast) { text.append('\t'); } } else if (e instanceof XWPFTable) { @@ -456,18 +461,18 @@ public class XWPFTableCell implements IBody, ICell { for (XWPFTableCell cell : row.getTableCells()) { List localBodyElements = cell.getBodyElements(); for (int i = 0; i < localBodyElements.size(); i++) { - boolean localIsLast = (i == localBodyElements.size() - 1) ? true : false; + boolean localIsLast = (i == localBodyElements.size() - 1); appendBodyElementText(text, localBodyElements.get(i), localIsLast); } } } - if (isLast == false) { + if (!isLast) { text.append('\n'); } } else if (e instanceof XWPFSDT) { text.append(((XWPFSDT) e).getContent().getText()); - if (isLast == false) { + if (!isLast) { text.append('\t'); } } @@ -507,7 +512,7 @@ public class XWPFTableCell implements IBody, ICell { } // Create a map from this XWPF-level enum to the STVerticalJc.Enum values - public static enum XWPFVertAlign { + public enum XWPFVertAlign { TOP, CENTER, BOTH, BOTTOM } } diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java index ab2fad84b3..00e34e241e 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java @@ -19,23 +19,12 @@ package org.apache.poi.xwpf.usermodel; -import java.util.List; - import junit.framework.TestCase; - import org.apache.poi.xwpf.XWPFTestDataSamples; import org.apache.poi.xwpf.usermodel.XWPFTableCell.XWPFVertAlign; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHMerge; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcBorders; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; + +import java.util.List; public class TestXWPFTableCell extends TestCase { @Override @@ -117,9 +106,23 @@ public class TestXWPFTableCell extends TestCase { List tableRows = table.getRows(); assertEquals(2, tableRows.size()); - assertNull(tableRows.get(0).getCell(0).getVerticalAlignment()); + assertEquals(XWPFVertAlign.TOP, tableRows.get(0).getCell(0).getVerticalAlignment()); assertEquals(XWPFVertAlign.BOTTOM, tableRows.get(0).getCell(1).getVerticalAlignment()); assertEquals(XWPFVertAlign.CENTER, tableRows.get(1).getCell(0).getVerticalAlignment()); - assertNull(tableRows.get(1).getCell(1).getVerticalAlignment()); + assertEquals(XWPFVertAlign.TOP, tableRows.get(1).getCell(1).getVerticalAlignment()); } + + public void testCellVerticalAlign2() throws Exception{ + XWPFDocument docx = XWPFTestDataSamples.openSampleDocument("TestTableCellAlign.docx"); + List tables = docx.getTables(); + for (XWPFTable table : tables) { + List tableRows = table.getRows(); + for (XWPFTableRow tableRow : tableRows) { + List tableCells = tableRow.getTableCells(); + for (XWPFTableCell tableCell : tableCells) { + assertNotNull(tableCell.getVerticalAlignment()); + } + } + } + } } diff --git a/test-data/document/TestTableCellAlign.docx b/test-data/document/TestTableCellAlign.docx new file mode 100644 index 0000000000..cf40dd2213 Binary files /dev/null and b/test-data/document/TestTableCellAlign.docx differ