aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTim Allison <tallison@apache.org>2016-11-04 15:21:51 +0000
committerTim Allison <tallison@apache.org>2016-11-04 15:21:51 +0000
commite23110968c9b94048eec7abcabdd0efee9c7cf4e (patch)
treea62062a348a597c634b31f794e3756a11b57ff1f /src
parent14645fe5a814c2771fbfddae019a61de18793344 (diff)
downloadpoi-e23110968c9b94048eec7abcabdd0efee9c7cf4e.tar.gz
poi-e23110968c9b94048eec7abcabdd0efee9c7cf4e.zip
POI-60342: handle missing sdtcontentcell in an sdtcell
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1768054 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContentCell.java96
1 files changed, 50 insertions, 46 deletions
diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContentCell.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContentCell.java
index 4ded4787ea..c8246f6ddc 100644
--- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContentCell.java
+++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContentCell.java
@@ -1,23 +1,23 @@
-/* ====================================================================
- 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 javax.xml.namespace.QName;
+/* ====================================================================
+ 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 javax.xml.namespace.QName;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlCursor.TokenType;
@@ -32,12 +32,12 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtContentCell;
*/
public class XWPFSDTContentCell implements ISDTContent {
- //A full implementation would grab the icells
- //that a content cell can contain. This would require
- //significant changes, including changing the notion that the
- //parent of a cell can be not just a row, but an sdt.
- //For now we are just grabbing the text out of the text tokentypes.
-
+ //A full implementation would grab the icells
+ //that a content cell can contain. This would require
+ //significant changes, including changing the notion that the
+ //parent of a cell can be not just a row, but an sdt.
+ //For now we are just grabbing the text out of the text tokentypes.
+
//private List<ICell> cells = new ArrayList<ICell>().
private String text = "";
@@ -45,9 +45,13 @@ public class XWPFSDTContentCell implements ISDTContent {
public XWPFSDTContentCell(CTSdtContentCell sdtContentCell,
XWPFTableRow xwpfTableRow, IBody part) {
super();
+ //sdtContentCell is allowed to be null: minOccurs="0" maxOccurs="1"
+ if (sdtContentCell == null) {
+ return;
+ }
StringBuilder sb = new StringBuilder();
XmlCursor cursor = sdtContentCell.newCursor();
-
+
//keep track of the following,
//and add "\n" only before the start of a body
//element if it is not the first body element.
@@ -55,8 +59,8 @@ public class XWPFSDTContentCell implements ISDTContent {
//index of cell in row
int tcCnt = 0;
//count of body objects
- int iBodyCnt = 0;
- int depth = 1;
+ int iBodyCnt = 0;
+ int depth = 1;
while (cursor.hasNextToken() && depth > 0) {
TokenType t = cursor.toNextToken();
@@ -64,17 +68,17 @@ public class XWPFSDTContentCell implements ISDTContent {
sb.append(cursor.getTextValue());
} else if (isStartToken(cursor, "tr")) {
tcCnt = 0;
- iBodyCnt = 0;
- } else if (isStartToken(cursor, "tc")) {
- if (tcCnt++ > 0) {
- sb.append("\t");
- }
- iBodyCnt = 0;
- } else if (isStartToken(cursor, "p") ||
- isStartToken(cursor, "tbl") ||
- isStartToken(cursor, "sdt")) {
- if (iBodyCnt > 0) {
- sb.append("\n");
+ iBodyCnt = 0;
+ } else if (isStartToken(cursor, "tc")) {
+ if (tcCnt++ > 0) {
+ sb.append("\t");
+ }
+ iBodyCnt = 0;
+ } else if (isStartToken(cursor, "p") ||
+ isStartToken(cursor, "tbl") ||
+ isStartToken(cursor, "sdt")) {
+ if (iBodyCnt > 0) {
+ sb.append("\n");
}
iBodyCnt++;
}
@@ -84,7 +88,7 @@ public class XWPFSDTContentCell implements ISDTContent {
depth--;
}
}
- text = sb.toString();
+ text = sb.toString();
cursor.dispose();
}
@@ -94,11 +98,11 @@ public class XWPFSDTContentCell implements ISDTContent {
return false;
}
QName qName = cursor.getName();
- if (qName != null && qName.getLocalPart() != null &&
- qName.getLocalPart().equals(string)) {
- return true;
- }
- return false;
+ if (qName != null && qName.getLocalPart() != null &&
+ qName.getLocalPart().equals(string)) {
+ return true;
+ }
+ return false;
}