diff options
author | Tim Allison <tallison@apache.org> | 2016-11-04 15:21:51 +0000 |
---|---|---|
committer | Tim Allison <tallison@apache.org> | 2016-11-04 15:21:51 +0000 |
commit | e23110968c9b94048eec7abcabdd0efee9c7cf4e (patch) | |
tree | a62062a348a597c634b31f794e3756a11b57ff1f /src | |
parent | 14645fe5a814c2771fbfddae019a61de18793344 (diff) | |
download | poi-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.java | 96 |
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;
}
|