aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2016-06-02 20:09:44 +0000
committerDominik Stadler <centic@apache.org>2016-06-02 20:09:44 +0000
commit8811c99ac3a9d6b843c99fc6cee00533067f1402 (patch)
tree96dee00fce89ad60dbe0bc78b909b687c73ace0b
parentbde09054f029fbd8e9206a4b6d83d659e0aebb9c (diff)
downloadpoi-8811c99ac3a9d6b843c99fc6cee00533067f1402.tar.gz
poi-8811c99ac3a9d6b843c99fc6cee00533067f1402.zip
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
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java23
-rw-r--r--src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java35
-rw-r--r--test-data/document/TestTableCellAlign.docxbin0 -> 11712 bytes
3 files changed, 33 insertions, 25 deletions
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<IBodyElement> 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<XWPFTableRow> 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<XWPFTable> tables = docx.getTables();
+ for (XWPFTable table : tables) {
+ List<XWPFTableRow> tableRows = table.getRows();
+ for (XWPFTableRow tableRow : tableRows) {
+ List<XWPFTableCell> 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
--- /dev/null
+++ b/test-data/document/TestTableCellAlign.docx
Binary files differ