diff options
author | Yegor Kozlov <yegor@apache.org> | 2008-11-09 16:18:46 +0000 |
---|---|---|
committer | Yegor Kozlov <yegor@apache.org> | 2008-11-09 16:18:46 +0000 |
commit | 292797064530e5d788a4c84efbabc5dfc09fc572 (patch) | |
tree | b5535acc5538ee33bc0cf752f69eefe2d87797d7 /src | |
parent | 6dd30fcaf5f656a39be84e80ceff566a2394a703 (diff) | |
download | poi-292797064530e5d788a4c84efbabc5dfc09fc572.tar.gz poi-292797064530e5d788a4c84efbabc5dfc09fc572.zip |
1. removed interfaces-jdk14, they are now obsolete2. started paving the way for XWPF
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@712508 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
46 files changed, 873 insertions, 1247 deletions
diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XMLWordDocument.java b/src/examples/src/org/apache/poi/xwpf/usermodel/SimpleDocument.java index 3a79da9894..29d502f9bc 100644..100755 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XMLWordDocument.java +++ b/src/examples/src/org/apache/poi/xwpf/usermodel/SimpleDocument.java @@ -1,53 +1,50 @@ -/* ==================================================================== - 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 org.apache.poi.xwpf.XWPFDocument; -import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; - -/** - * High level representation of a ooxml text document. - */ -public class XMLWordDocument { - private XWPFDocument xwpfXML; - - public XMLWordDocument(XWPFDocument xml) { - this.xwpfXML = xml; - } - - public XWPFDocument _getXWPFXML() { - return xwpfXML; - } - - public XWPFHyperlink getHyperlinkByID(String id) { - return xwpfXML.getHyperlinkByID(id); - } - public XWPFHyperlink[] getHyperlinks() { - return xwpfXML.getHyperlinks(); - } - - public XWPFComment getCommentByID(String id) { - return xwpfXML.getCommentByID(id); - } - public XWPFComment[] getComments() { - return xwpfXML.getComments(); - } - - public XWPFHeaderFooterPolicy getHeaderFooterPolicy() { - return xwpfXML.getHeaderFooterPolicy(); - } -} +/* ====================================================================
+ 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.io.FileOutputStream;
+
+/**
+ * A simple WOrdprocessingML document created by POI XWPF API
+ *
+ * @author Yegor Kozlov
+ */
+public class SimpleDocument {
+
+ public static void main(String[] args) throws Exception {
+ XWPFDocument doc = new XWPFDocument();
+
+ XWPFParagraph p1 = doc.createParagraph();
+ p1.setAlignment(ParagraphAlignment.CENTER);
+
+ XWPFRun r1 = p1.createRun();
+ r1.setBold(true);
+ r1.setText("The quick brown fox");
+
+ XWPFParagraph p2 = doc.createParagraph();
+ p2.setAlignment(ParagraphAlignment.RIGHT);
+
+ XWPFRun r2 = p2.createRun();
+ r2.setBold(false);
+ r2.setText("jumped over the lazy dog");
+
+ FileOutputStream out = new FileOutputStream("simple.docx");
+ doc.write(out);
+ out.close();
+
+ }
+}
diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/extractor/ExcelExtractor.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/extractor/ExcelExtractor.java deleted file mode 100644 index 8817bc7e29..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/extractor/ExcelExtractor.java +++ /dev/null @@ -1,44 +0,0 @@ -/* ==================================================================== - 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.ss.extractor; - -/** - * Common interface for Excel text extractors, covering - * HSSF and XSSF - */ -public interface ExcelExtractor { - /** - * Should sheet names be included? Default is true - */ - public void setIncludeSheetNames(boolean includeSheetNames); - - /** - * Should we return the formula itself, and not - * the result it produces? Default is false - */ - public void setFormulasNotResults(boolean formulasNotResults); - - /** - * Should cell comments be included? Default is false - */ - public void setIncludeCellComments(boolean includeCellComments); - - /** - * Retreives the text contents of the file - */ - public String getText(); -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Cell.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Cell.java deleted file mode 100644 index 2dbb5715b0..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Cell.java +++ /dev/null @@ -1,115 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -import java.util.Date; - -import org.apache.poi.hssf.usermodel.HSSFCellStyle; -import org.apache.poi.hssf.usermodel.HSSFRichTextString; -import org.apache.poi.hssf.usermodel.HSSFSheet; - -/** - * This is a JDK 1.4 compatible interface for HSSFCell. - * If you are using JDK 1.5 or later, use the other set of interfaces, - * which work properly for both HSSFCell and XSSFCell - */ -public interface Cell { - /** - * Numeric Cell type (0) - * @see #setCellType(int) - * @see #getCellType() - */ - - public final static int CELL_TYPE_NUMERIC = 0; - - /** - * String Cell type (1) - * @see #setCellType(int) - * @see #getCellType() - */ - - public final static int CELL_TYPE_STRING = 1; - - /** - * Formula Cell type (2) - * @see #setCellType(int) - * @see #getCellType() - */ - - public final static int CELL_TYPE_FORMULA = 2; - - /** - * Blank Cell type (3) - * @see #setCellType(int) - * @see #getCellType() - */ - - public final static int CELL_TYPE_BLANK = 3; - - /** - * Boolean Cell type (4) - * @see #setCellType(int) - * @see #getCellType() - */ - - public final static int CELL_TYPE_BOOLEAN = 4; - - /** - * Error Cell type (5) - * @see #setCellType(int) - * @see #getCellType() - */ - - public final static int CELL_TYPE_ERROR = 5; - - - int getCellType(); - /** - * @deprecated (Oct 2008) use {@link #getColumnIndex()} - */ - short getCellNum(); - - /** - * @return the cell's column index (zero based) - */ - int getColumnIndex(); - int getRowIndex(); - - String getCellFormula(); - - byte getErrorCellValue(); - void setCellErrorValue(byte value); - - HSSFCellStyle getCellStyle(); - HSSFSheet getSheet(); - - boolean getBooleanCellValue(); - double getNumericCellValue(); - /** - * get the value of the cell as a date. For strings we throw an exception. - * For blank cells we return a null. - */ - Date getDateCellValue(); - HSSFRichTextString getRichStringCellValue(); - - void setCellType(int cellType); - void setCellValue(boolean value); - void setCellValue(double value); - void setCellValue(RichTextString value); - void setCellFormula(String formula); -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/CellStyle.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/CellStyle.java deleted file mode 100644 index 2105937fe8..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/CellStyle.java +++ /dev/null @@ -1,23 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface CellStyle { - short getDataFormat(); - String getDataFormatString(); -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Color.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Color.java deleted file mode 100644 index 7a9633a0c2..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Color.java +++ /dev/null @@ -1,20 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface Color {} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Comment.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Comment.java deleted file mode 100644 index c85f79bfd3..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Comment.java +++ /dev/null @@ -1,23 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface Comment { - public void setRow(int row); - public void setColumn(short row); -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/CreationHelper.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/CreationHelper.java deleted file mode 100644 index fb560199cc..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/CreationHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -import org.apache.poi.hssf.usermodel.HSSFRichTextString; - -/** - * This is a JDK 1.4 compatible interface for HSSFCreationHelper. - * If you are using JDK 1.5 or later, use the other set of interfaces, - * which work properly for both HSSFCreationHelper and XSSFCreationHelper - */ -public interface CreationHelper { - HSSFRichTextString createRichTextString(String text); -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/DataFormat.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/DataFormat.java deleted file mode 100644 index 525c79c6ba..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/DataFormat.java +++ /dev/null @@ -1,20 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface DataFormat {} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Font.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Font.java deleted file mode 100644 index f19bac4cc2..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Font.java +++ /dev/null @@ -1,116 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface Font { - - /** - * Arial font - */ - - public final static String FONT_ARIAL = "Arial"; - - /** - * Normal boldness (not bold) - */ - - public final static short BOLDWEIGHT_NORMAL = 0x190; - - /** - * Bold boldness (bold) - */ - - public final static short BOLDWEIGHT_BOLD = 0x2bc; - - /** - * normal type of black color. - */ - - public final static short COLOR_NORMAL = 0x7fff; - - /** - * Dark Red color - */ - - public final static short COLOR_RED = 0xa; - - /** - * no type offsetting (not super or subscript) - */ - - public final static short SS_NONE = 0; - - /** - * superscript - */ - - public final static short SS_SUPER = 1; - - /** - * subscript - */ - - public final static short SS_SUB = 2; - - /** - * not underlined - */ - - public final static byte U_NONE = 0; - - /** - * single (normal) underline - */ - - public final static byte U_SINGLE = 1; - - /** - * double underlined - */ - - public final static byte U_DOUBLE = 2; - - /** - * accounting style single underline - */ - - public final static byte U_SINGLE_ACCOUNTING = 0x21; - - /** - * accounting style double underline - */ - - public final static byte U_DOUBLE_ACCOUNTING = 0x22; - - /** - * ANSI character set - */ - public final static byte ANSI_CHARSET = 0; - - /** - * Default character set. - */ - public final static byte DEFAULT_CHARSET = 1; - - /** - * Symbol character set - */ - public final static byte SYMBOL_CHARSET = 2; - - -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Footer.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Footer.java deleted file mode 100644 index c278c5d492..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Footer.java +++ /dev/null @@ -1,20 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface Footer {} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Header.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Header.java deleted file mode 100644 index 0c7ba2c338..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Header.java +++ /dev/null @@ -1,20 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface Header {} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Hyperlink.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Hyperlink.java deleted file mode 100644 index 04d7dc40a8..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Hyperlink.java +++ /dev/null @@ -1,40 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface Hyperlink { - /** - * Link to a existing file or web page - */ - public static final int LINK_URL = 1; - - /** - * Link to a place in this document - */ - public static final int LINK_DOCUMENT = 2; - - /** - * Link to an E-mail address - */ - public static final int LINK_EMAIL = 3; - - /** - * Link to a file - */ - public static final int LINK_FILE = 4; -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Iterable.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Iterable.java deleted file mode 100644 index 17a2820c8c..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Iterable.java +++ /dev/null @@ -1,30 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -import java.util.Iterator; - -/** - * Workaround for java.lang.Iterable not existing on java 1.4, but - * people wanting to use it all the same. - * Must only be present for java 1.4 interfaces! Do not add for - * java 1.5, as that has its own real one from java.lang - */ -public interface Iterable { - public Iterator iterator(); -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Name.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Name.java deleted file mode 100644 index bf4823972c..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Name.java +++ /dev/null @@ -1,23 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface Name { - void setNameName(String nameName); - boolean isFunctionName(); -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Palette.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Palette.java deleted file mode 100644 index 9048fb5b72..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Palette.java +++ /dev/null @@ -1,20 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface Palette {} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Patriarch.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Patriarch.java deleted file mode 100644 index 92db05756e..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Patriarch.java +++ /dev/null @@ -1,20 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface Patriarch {} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/PictureData.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/PictureData.java deleted file mode 100644 index a38a70a02a..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/PictureData.java +++ /dev/null @@ -1,20 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface PictureData {}
\ No newline at end of file diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/PrintSetup.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/PrintSetup.java deleted file mode 100644 index 20b5b080dc..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/PrintSetup.java +++ /dev/null @@ -1,20 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface PrintSetup {} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/RichTextString.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/RichTextString.java deleted file mode 100644 index d026f05fb7..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/RichTextString.java +++ /dev/null @@ -1,27 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -/** - * This is a JDK 1.4 compatible interface for HSSFRichTextString. - * If you are using JDK 1.5 or later, use the other set of interfaces, - * which work properly for both HSSFRichTextString and XSSFRichTextString - */ -public interface RichTextString { - String getString(); -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Row.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Row.java deleted file mode 100644 index 8a0810dd31..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Row.java +++ /dev/null @@ -1,54 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -import org.apache.poi.hssf.usermodel.HSSFCell; -import java.util.Iterator; - -/** - * This is a JDK 1.4 compatible interface for HSSFRow. - * If you are using JDK 1.5 or later, use the other set of interfaces, - * which work properly for both HSSFRow and XSSFRow - */ -public interface Row { - int getRowNum(); - short getFirstCellNum(); - short getLastCellNum(); - int getPhysicalNumberOfCells(); - HSSFCell getCell(int cellnum); - - Iterator cellIterator(); - - /** - * Used to specify the different possible policies - * if for the case of null and blank cells - */ - public static class MissingCellPolicy { - private static int NEXT_ID = 1; - public final int id; - private MissingCellPolicy() { - this.id = NEXT_ID++; - } - } - /** Missing cells are returned as null, Blank cells are returned as normal */ - public static final MissingCellPolicy RETURN_NULL_AND_BLANK = new MissingCellPolicy(); - /** Missing cells are returned as null, as are blank cells */ - public static final MissingCellPolicy RETURN_BLANK_AS_NULL = new MissingCellPolicy(); - /** A new, blank cell is created for missing cells. Blank cells are returned as normal */ - public static final MissingCellPolicy CREATE_NULL_AS_BLANK = new MissingCellPolicy(); -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Sheet.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Sheet.java deleted file mode 100644 index ef5aac4cea..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Sheet.java +++ /dev/null @@ -1,35 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -import org.apache.poi.hssf.usermodel.HSSFRow; -import java.util.Iterator; - -/** - * This is a JDK 1.4 compatible interface for HSSFSheet. - * If you are using JDK 1.5 or later, use the other set of interfaces, - * which work properly for both HSSFSheet and XSSFSheet - */ -public interface Sheet { - int getPhysicalNumberOfRows(); - int getFirstRowNum(); - int getLastRowNum(); - - HSSFRow getRow(int rownum); - Iterator rowIterator(); -} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Textbox.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Textbox.java deleted file mode 100644 index 212c400acc..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Textbox.java +++ /dev/null @@ -1,20 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -public interface Textbox {} diff --git a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Workbook.java b/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Workbook.java deleted file mode 100644 index c4cdd21532..0000000000 --- a/src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Workbook.java +++ /dev/null @@ -1,67 +0,0 @@ -/* ==================================================================== - 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.ss.usermodel; - -import org.apache.poi.ss.usermodel.Row.MissingCellPolicy; -import org.apache.poi.hssf.usermodel.*; - -/** - * This is a JDK 1.4 compatible interface for HSSFWorkbook. - * If you are using JDK 1.5 or later, use the other set of interfaces, - * which work properly for both HSSFWorkbook and XSSFWorkbook - */ -public interface Workbook { - - int getActiveSheetIndex(); - void setActiveSheet(int sheetIndex); - - int getFirstVisibleTab(); - void setFirstVisibleTab(int sheetIndex); - - int getNumberOfSheets(); - short getNumberOfFonts(); - int getNumberOfNames(); - - HSSFName createName(); - HSSFName getNameAt(int index); - int getNameIndex(String name); - String getNameName(int index); - - String getSheetName(int sheet); - HSSFSheet getSheetAt(int index); - int getSheetIndex(String name); - int getSheetIndex(Sheet sheet); - - CreationHelper getCreationHelper(); - - /** - * Retrieves the current policy on what to do when - * getting missing or blank cells from a row. - * The default is to return blank and null cells. - * {@link MissingCellPolicy} - */ - MissingCellPolicy getMissingCellPolicy(); - /** - * Sets the policy on what to do when - * getting missing or blank cells from a row. - * This will then apply to all calls to - * {@link Row.getCell()}. See - * {@link MissingCellPolicy} - */ - void setMissingCellPolicy(MissingCellPolicy missingCellPolicy); -} diff --git a/src/ooxml/java/org/apache/poi/POIXMLDocument.java b/src/ooxml/java/org/apache/poi/POIXMLDocument.java index 2287ef4f18..ab2d04c72e 100644 --- a/src/ooxml/java/org/apache/poi/POIXMLDocument.java +++ b/src/ooxml/java/org/apache/poi/POIXMLDocument.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.poi.poifs.common.POIFSConstants; import org.apache.poi.util.IOUtils; +import org.apache.poi.util.PackageHelper; import org.apache.xmlbeans.XmlException; import org.openxml4j.exceptions.InvalidFormatException; import org.openxml4j.exceptions.OpenXML4JException; @@ -169,4 +170,35 @@ public abstract class POIXMLDocument extends POIXMLDocumentPart{ */ public abstract List<PackagePart> getAllEmbedds() throws OpenXML4JException; + /** + * YK: current implementation of OpenXML4J is funny. + * Packages opened by Package.open(InputStream is) are read-only, + * there is no way to change or even save such an instance in a OutputStream. + * The workaround is to create a copy via a temp file + */ + protected static Package ensureWriteAccess(Package pkg) throws IOException { + if(pkg.getPackageAccess() == PackageAccess.READ){ + try { + return PackageHelper.clone(pkg); + } catch (OpenXML4JException e){ + throw new POIXMLException(e); + } + } + return pkg; + } + + /** + * Write out this document to an Outputstream. + * + * @param stream - the java OutputStream you wish to write the XLS to + * + * @exception IOException if anything can't be written. + */ + public final void write(OutputStream stream) throws IOException { + //force all children to commit their changes into the underlying OOXML Package + onSave(); + + getPackage().save(stream); + } + } diff --git a/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java b/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java index 8e07afd1fd..3eed794c0b 100644 --- a/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java +++ b/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java @@ -41,7 +41,8 @@ import org.apache.poi.xslf.XSLFSlideShow; import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor; import org.apache.poi.xssf.extractor.XSSFExcelExtractor; import org.apache.poi.xssf.usermodel.XSSFRelation; -import org.apache.poi.xwpf.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFRelation; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.xmlbeans.XmlException; import org.openxml4j.exceptions.InvalidFormatException; @@ -99,7 +100,7 @@ public class ExtractorFactory { if(corePart.getContentType().equals(XSSFRelation.WORKBOOK.getContentType())) { return new XSSFExcelExtractor(pkg); } - if(corePart.getContentType().equals(XWPFDocument.MAIN_CONTENT_TYPE)) { + if(corePart.getContentType().equals(XWPFRelation.MAIN_CONTENT_TYPE)) { return new XWPFWordExtractor(pkg); } if(corePart.getContentType().equals(XSLFSlideShow.MAIN_CONTENT_TYPE)) { diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java index 5a42033634..efa2d1289d 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java @@ -137,23 +137,6 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X this(openPackage(path)); } - /** - * YK: current implementation of OpenXML4J is funny. - * Packages opened by Package.open(InputStream is) are read-only, - * there is no way to change or even save such an instance in a OutputStream. - * The workaround is to create a copy via a temp file - */ - private static Package ensureWriteAccess(Package pkg) throws IOException { - if(pkg.getPackageAccess() == PackageAccess.READ){ - try { - return PackageHelper.clone(pkg); - } catch (OpenXML4JException e){ - throw new POIXMLException(e); - } - } - return pkg; - } - @Override protected void onDocumentRead() throws IOException { try { @@ -1058,20 +1041,6 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X } /** - * Write out this workbook to an Outputstream. - * - * @param stream - the java OutputStream you wish to write the XLS to - * - * @exception IOException if anything can't be written. - */ - public void write(OutputStream stream) throws IOException { - //force all children to commit their changes into the underlying OOXML Package - onSave(); - - getPackage().save(stream); - } - - /** * Returns SharedStringsTable - tha cache of string for this workbook * * @return the shared string table diff --git a/src/ooxml/java/org/apache/poi/xwpf/XWPFDocument.java b/src/ooxml/java/org/apache/poi/xwpf/XWPFDocument.java deleted file mode 100644 index 8ef9ad884f..0000000000 --- a/src/ooxml/java/org/apache/poi/xwpf/XWPFDocument.java +++ /dev/null @@ -1,255 +0,0 @@ -/* ==================================================================== - 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; - -import java.io.IOException; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import org.apache.poi.POIXMLDocument; -import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; -import org.apache.poi.xwpf.usermodel.XWPFComment; -import org.apache.poi.xwpf.usermodel.XWPFHyperlink; -import org.apache.poi.xwpf.usermodel.XWPFParagraph; -import org.apache.poi.xwpf.usermodel.XWPFTable; -import org.apache.xmlbeans.XmlException; -import org.openxml4j.exceptions.InvalidFormatException; -import org.openxml4j.exceptions.OpenXML4JException; -import org.openxml4j.opc.Package; -import org.openxml4j.opc.PackagePart; -import org.openxml4j.opc.PackageRelationship; -import org.openxml4j.opc.PackageRelationshipCollection; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTComment; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocument1; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CommentsDocument; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.StylesDocument; - -/** - * Experimental class to do low level processing - * of docx files. - * - * If you are using these low level classes, then you - * will almost certainly need to refer to the OOXML - * specifications from - * http://www.ecma-international.org/publications/standards/Ecma-376.htm - * - * WARNING - APIs expected to change rapidly - */ -public class XWPFDocument extends POIXMLDocument { - public static final String MAIN_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"; - public static final String HEADER_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml"; - public static final String HEADER_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"; - public static final String FOOTER_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"; - public static final String FOOTER_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"; - public static final String STYLES_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"; - public static final String STYLES_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"; - public static final String HYPERLINK_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"; - public static final String COMMENT_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"; - - private DocumentDocument wordDoc; - protected List<XWPFComment> comments; - protected List<XWPFHyperlink> hyperlinks; - protected List<XWPFParagraph> paragraphs; - protected List<XWPFTable> tables; - /** - * The embedded OLE2 files in the OPC package - */ - private List<PackagePart> embedds; - - /** Handles the joy of different headers/footers for different pages */ - private XWPFHeaderFooterPolicy headerFooterPolicy; - - public XWPFDocument(Package container) throws OpenXML4JException, IOException, XmlException { - super(container); - - hyperlinks = new LinkedList<XWPFHyperlink>(); - comments = new LinkedList<XWPFComment>(); - paragraphs = new LinkedList<XWPFParagraph>(); - tables= new LinkedList<XWPFTable>(); - - wordDoc = - DocumentDocument.Factory.parse(getCorePart().getInputStream()); - - // filling paragraph list - for (CTP p : getDocumentBody().getPArray()) { - paragraphs.add(new XWPFParagraph(p, this)); - } - - // Get the hyperlinks - // TODO: make me optional/separated in private function - try { - Iterator <PackageRelationship> relIter = - getCorePart().getRelationshipsByType(HYPERLINK_RELATION_TYPE).iterator(); - while(relIter.hasNext()) { - PackageRelationship rel = relIter.next(); - hyperlinks.add(new XWPFHyperlink(rel.getId(), rel.getTargetURI().toString())); - } - } catch(Exception e) { - throw new OpenXML4JException(e.getLocalizedMessage()); - } - - // Get the comments, if there are any - PackageRelationshipCollection commentsRel = getCmntRelations(); - if(commentsRel != null && commentsRel.size() > 0) { - PackagePart commentsPart = getTargetPart(commentsRel.getRelationship(0)); - CommentsDocument cmntdoc = CommentsDocument.Factory.parse(commentsPart.getInputStream()); - for(CTComment ctcomment : cmntdoc.getComments().getCommentArray()) { - comments.add(new XWPFComment(ctcomment)); - } - } - - // Get any tables - for(CTTbl table : getDocumentBody().getTblArray()) { - tables.add(new XWPFTable(table)); - } - - /// Process embedded document parts - this.embedds = new LinkedList<PackagePart>(); - for(PackageRelationship rel : getCorePart().getRelationshipsByType(OLE_OBJECT_REL_TYPE)) { - embedds.add(getTargetPart(rel)); - } - for(PackageRelationship rel : getCorePart().getRelationshipsByType(PACK_OBJECT_REL_TYPE)) { - embedds.add(getTargetPart(rel)); - } - - // Sort out headers and footers - headerFooterPolicy = new XWPFHeaderFooterPolicy(this); - } - - /** - * Returns the low level document base object - */ - public CTDocument1 getDocument() { - return wordDoc.getDocument(); - } - - public Iterator<XWPFParagraph> getParagraphsIterator() { - return paragraphs.iterator(); - } - public XWPFParagraph[] getParagraphs() { - return paragraphs.toArray( - new XWPFParagraph[paragraphs.size()] - ); - } - - public Iterator<XWPFTable> getTablesIterator() - { - return tables.iterator(); - } - - public XWPFHyperlink getHyperlinkByID(String id) { - Iterator<XWPFHyperlink> iter = hyperlinks.iterator(); - while(iter.hasNext()) - { - XWPFHyperlink link = iter.next(); - if(link.getId().equals(id)) - return link; - } - - return null; - } - public XWPFHyperlink[] getHyperlinks() { - return hyperlinks.toArray( - new XWPFHyperlink[hyperlinks.size()] - ); - } - - public XWPFComment getCommentByID(String id) { - Iterator<XWPFComment> iter = comments.iterator(); - while(iter.hasNext()) - { - XWPFComment comment = iter.next(); - if(comment.getId().equals(id)) - return comment; - } - - return null; - } - public XWPFComment[] getComments() { - return comments.toArray( - new XWPFComment[comments.size()] - ); - } - - /** - * Get the document part that's defined as the - * given relationship of the core document. - */ - public PackagePart getPartById(String id) { - try { - return getTargetPart( - getCorePart().getRelationship(id) - ); - } catch(InvalidFormatException e) { - throw new IllegalArgumentException(e); - } - } - - /** - * Returns the policy on headers and footers, which - * also provides a way to get at them. - */ - public XWPFHeaderFooterPolicy getHeaderFooterPolicy() { - return headerFooterPolicy; - } - - /** - * Returns the low level body of the document - */ - public CTBody getDocumentBody() { - return getDocument().getBody(); - } - - /** - * Returns the styles object used - */ - public CTStyles getStyle() throws XmlException, IOException { - PackagePart[] parts; - try { - parts = getRelatedByType(STYLES_RELATION_TYPE); - } catch(InvalidFormatException e) { - throw new IllegalStateException(e); - } - if(parts.length != 1) { - throw new IllegalStateException("Expecting one Styles document part, but found " + parts.length); - } - - StylesDocument sd = - StylesDocument.Factory.parse(parts[0].getInputStream()); - return sd.getStyles(); - } - - protected PackageRelationshipCollection getCmntRelations() throws InvalidFormatException - { - return getCorePart().getRelationshipsByType(COMMENT_RELATION_TYPE); - } - - /** - * Get the document's embedded files. - */ - public List<PackagePart> getAllEmbedds() throws OpenXML4JException { - return embedds; - } - -} - diff --git a/src/ooxml/java/org/apache/poi/xwpf/extractor/XWPFWordExtractor.java b/src/ooxml/java/org/apache/poi/xwpf/extractor/XWPFWordExtractor.java index 14031ebc81..91d52a72ca 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/extractor/XWPFWordExtractor.java +++ b/src/ooxml/java/org/apache/poi/xwpf/extractor/XWPFWordExtractor.java @@ -21,7 +21,7 @@ import java.util.Iterator; import org.apache.poi.POIXMLDocument; import org.apache.poi.POIXMLTextExtractor; -import org.apache.poi.xwpf.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.model.XWPFCommentsDecorator; import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; import org.apache.poi.xwpf.model.XWPFHyperlinkDecorator; diff --git a/src/ooxml/java/org/apache/poi/xwpf/model/XWPFCommentsDecorator.java b/src/ooxml/java/org/apache/poi/xwpf/model/XWPFCommentsDecorator.java index 1abc262607..0ceb8accb1 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/model/XWPFCommentsDecorator.java +++ b/src/ooxml/java/org/apache/poi/xwpf/model/XWPFCommentsDecorator.java @@ -41,7 +41,7 @@ public class XWPFCommentsDecorator extends XWPFParagraphDecorator { for(CTMarkupRange anchor : paragraph.getCTP().getCommentRangeStartArray()) { - if((comment = paragraph.getDocRef().getCommentByID(anchor.getId().toString())) != null) + if((comment = paragraph.getDocument().getCommentByID(anchor.getId().toString())) != null) commentText.append("\tComment by " + comment.getAuthor()+": "+comment.getText()); } } diff --git a/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java b/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java index 83a67ade99..a92972acf8 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java +++ b/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java @@ -18,7 +18,7 @@ package org.apache.poi.xwpf.model; import java.io.IOException; -import org.apache.poi.xwpf.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFFooter; import org.apache.poi.xwpf.usermodel.XWPFHeader; import org.apache.xmlbeans.XmlException; @@ -57,7 +57,7 @@ public class XWPFHeaderFooterPolicy { // For now, we don't care about different ranges, as it // doesn't seem that .docx properly supports that // feature of the file format yet - CTSectPr sectPr = doc.getDocumentBody().getSectPr(); + CTSectPr sectPr = doc.getDocument().getBody().getSectPr(); for(int i=0; i<sectPr.sizeOfHeaderReferenceArray(); i++) { // Get the header CTHdrFtrRef ref = sectPr.getHeaderReferenceArray(i); diff --git a/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHyperlinkDecorator.java b/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHyperlinkDecorator.java index ab5784bf7d..4a246063c9 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHyperlinkDecorator.java +++ b/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHyperlinkDecorator.java @@ -56,8 +56,8 @@ public class XWPFHyperlinkDecorator extends XWPFParagraphDecorator { hyperlinkText.append(text.getStringValue()); } } - if(outputHyperlinkUrls && paragraph.getDocRef().getHyperlinkByID(link.getId()) != null) { - hyperlinkText.append(" <"+paragraph.getDocRef().getHyperlinkByID(link.getId()).getURL()+">"); + if(outputHyperlinkUrls && paragraph.getDocument().getHyperlinkByID(link.getId()) != null) { + hyperlinkText.append(" <"+paragraph.getDocument().getHyperlinkByID(link.getId()).getURL()+">"); } } } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/ParagraphAlignment.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/ParagraphAlignment.java new file mode 100755 index 0000000000..6c8aad1c7f --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/ParagraphAlignment.java @@ -0,0 +1,65 @@ +/* ====================================================================
+ 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.Map;
+import java.util.HashMap;
+
+/**
+ * Specifies all types of alignment which are available to be applied to objects in a
+ * WordprocessingML document
+ *
+ * @author Yegor Kozlov
+ */
+public enum ParagraphAlignment {
+ //YK: TODO document each alignment option
+
+ LEFT(1),
+ CENTER(2),
+ RIGHT(3),
+ BOTH(4),
+ MEDIUM_KASHIDA(5),
+ DISTRIBUTE(6),
+ NUM_TAB(7),
+ HIGH_KASHIDA(8),
+ LOW_KASHIDA(9),
+ THAI_DISTRIBUTE(10);
+
+ private final int value;
+
+ private ParagraphAlignment(int val){
+ value = val;
+ }
+
+ public int getValue(){
+ return value;
+ }
+
+ private static Map<Integer, ParagraphAlignment> imap = new HashMap<Integer, ParagraphAlignment>();
+ static{
+ for (ParagraphAlignment p : values()) {
+ imap.put(p.getValue(), p);
+ }
+ }
+
+ public static ParagraphAlignment valueOf(int type){
+ ParagraphAlignment err = imap.get(type);
+ if(err == null) throw new IllegalArgumentException("Unknown paragraph alignment: " + type);
+ return err;
+ }
+
+}
diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFComment.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFComment.java index 7de86d400e..72596085d3 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFComment.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFComment.java @@ -39,7 +39,7 @@ public class XWPFComment for(CTP ctp : comment.getPArray()) { - XWPFParagraph p = new XWPFParagraph(ctp); + XWPFParagraph p = new XWPFParagraph(ctp, null); text.append(p.getText()); } } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java new file mode 100644 index 0000000000..f8ff5c84b0 --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java @@ -0,0 +1,322 @@ +/* ==================================================================== + 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.io.IOException; +import java.io.OutputStream; +import java.util.*; + +import org.apache.poi.POIXMLDocument; +import org.apache.poi.POIXMLException; +import org.apache.poi.POIXMLDocumentPart; +import org.apache.poi.util.PackageHelper; +import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; +import org.apache.xmlbeans.XmlException; +import org.apache.xmlbeans.XmlOptions; +import org.openxml4j.exceptions.InvalidFormatException; +import org.openxml4j.exceptions.OpenXML4JException; +import org.openxml4j.opc.*; +import org.openxml4j.opc.Package; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTComment; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocument1; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CommentsDocument; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.StylesDocument; + +import javax.xml.namespace.QName; + +/** + * Experimental class to do low level processing + * of docx files. + * + * If you are using these low level classes, then you + * will almost certainly need to refer to the OOXML + * specifications from + * http://www.ecma-international.org/publications/standards/Ecma-376.htm + * + * WARNING - APIs expected to change rapidly + */ +public class XWPFDocument extends POIXMLDocument { + + private CTDocument1 ctDocument; + protected List<XWPFComment> comments; + protected List<XWPFHyperlink> hyperlinks; + protected List<XWPFParagraph> paragraphs; + protected List<XWPFTable> tables; + + /** Handles the joy of different headers/footers for different pages */ + private XWPFHeaderFooterPolicy headerFooterPolicy; + + public XWPFDocument(Package pkg) throws IOException { + super(ensureWriteAccess(pkg)); + + //build a tree of POIXMLDocumentParts, this document being the root + try { + read(XWPFFactory.getInstance()); + } catch (OpenXML4JException e){ + throw new POIXMLException(e); + } + onDocumentRead(); + } + + public XWPFDocument(){ + super(newPackage()); + onDocumentCreate(); + } + + @Override + protected void onDocumentRead() throws IOException { + hyperlinks = new ArrayList<XWPFHyperlink>(); + comments = new ArrayList<XWPFComment>(); + paragraphs = new ArrayList<XWPFParagraph>(); + tables= new ArrayList<XWPFTable>(); + + try { + DocumentDocument doc = DocumentDocument.Factory.parse(getPackagePart().getInputStream()); + ctDocument = doc.getDocument(); + + CTBody body = ctDocument.getBody(); + + // filling paragraph list + for (CTP p : body.getPArray()) { + paragraphs.add(new XWPFParagraph(p, this)); + } + + // Get any tables + for(CTTbl table : body.getTblArray()) { + tables.add(new XWPFTable(table)); + } + + // Sort out headers and footers + headerFooterPolicy = new XWPFHeaderFooterPolicy(this); + + for(POIXMLDocumentPart p : getRelations()){ + String relation = p.getPackageRelationship().getRelationshipType(); + if(relation.equals(XWPFRelation.COMMENT_RELATION_TYPE)){ + CommentsDocument cmntdoc = CommentsDocument.Factory.parse(p.getPackagePart().getInputStream()); + for(CTComment ctcomment : cmntdoc.getComments().getCommentArray()) { + comments.add(new XWPFComment(ctcomment)); + } + } + } + + initHyperlinks(); + + } catch (XmlException e) { + throw new POIXMLException(e); + } + } + + private void initHyperlinks(){ + // Get the hyperlinks + // TODO: make me optional/separated in private function + try { + Iterator <PackageRelationship> relIter = + getPackagePart().getRelationshipsByType(XWPFRelation.HYPERLINK_RELATION_TYPE).iterator(); + while(relIter.hasNext()) { + PackageRelationship rel = relIter.next(); + hyperlinks.add(new XWPFHyperlink(rel.getId(), rel.getTargetURI().toString())); + } + } catch (InvalidFormatException e){ + throw new POIXMLException(e); + } + } + + /** + * Create a new SpreadsheetML package and setup the default minimal content + */ + protected static Package newPackage() { + try { + Package pkg = Package.create(PackageHelper.createTempFile()); + // Main part + PackagePartName corePartName = PackagingURIHelper.createPartName(XWPFRelation.DOCUMENT.getDefaultFileName()); + // Create main part relationship + pkg.addRelationship(corePartName, TargetMode.INTERNAL, PackageRelationshipTypes.CORE_DOCUMENT); + // Create main document part + pkg.createPart(corePartName, XWPFRelation.DOCUMENT.getContentType()); + + pkg.getPackageProperties().setCreatorProperty("Apache POI"); + + return pkg; + } catch (Exception e){ + throw new POIXMLException(e); + } + } + + /** + * Create a new CTWorkbook with all values set to default + */ + protected void onDocumentCreate() { + hyperlinks = new ArrayList<XWPFHyperlink>(); + comments = new ArrayList<XWPFComment>(); + paragraphs = new ArrayList<XWPFParagraph>(); + tables= new ArrayList<XWPFTable>(); + + ctDocument = CTDocument1.Factory.newInstance(); + ctDocument.addNewBody(); + } + + /** + * Returns the low level document base object + */ + public CTDocument1 getDocument() { + return ctDocument; + } + + public Iterator<XWPFParagraph> getParagraphsIterator() { + return paragraphs.iterator(); + } + public XWPFParagraph[] getParagraphs() { + return paragraphs.toArray( + new XWPFParagraph[paragraphs.size()] + ); + } + + public Iterator<XWPFTable> getTablesIterator() + { + return tables.iterator(); + } + + public XWPFHyperlink getHyperlinkByID(String id) { + Iterator<XWPFHyperlink> iter = hyperlinks.iterator(); + while(iter.hasNext()) + { + XWPFHyperlink link = iter.next(); + if(link.getId().equals(id)) + return link; + } + + return null; + } + public XWPFHyperlink[] getHyperlinks() { + return hyperlinks.toArray( + new XWPFHyperlink[hyperlinks.size()] + ); + } + + public XWPFComment getCommentByID(String id) { + Iterator<XWPFComment> iter = comments.iterator(); + while(iter.hasNext()) + { + XWPFComment comment = iter.next(); + if(comment.getId().equals(id)) + return comment; + } + + return null; + } + public XWPFComment[] getComments() { + return comments.toArray( + new XWPFComment[comments.size()] + ); + } + + /** + * Get the document part that's defined as the + * given relationship of the core document. + */ + public PackagePart getPartById(String id) { + try { + return getTargetPart( + getCorePart().getRelationship(id) + ); + } catch(InvalidFormatException e) { + throw new IllegalArgumentException(e); + } + } + + /** + * Returns the policy on headers and footers, which + * also provides a way to get at them. + */ + public XWPFHeaderFooterPolicy getHeaderFooterPolicy() { + return headerFooterPolicy; + } + + /** + * Returns the styles object used + */ + public CTStyles getStyle() throws XmlException, IOException { + PackagePart[] parts; + try { + parts = getRelatedByType(XWPFRelation.STYLES_RELATION_TYPE); + } catch(InvalidFormatException e) { + throw new IllegalStateException(e); + } + if(parts.length != 1) { + throw new IllegalStateException("Expecting one Styles document part, but found " + parts.length); + } + + StylesDocument sd = + StylesDocument.Factory.parse(parts[0].getInputStream()); + return sd.getStyles(); + } + + /** + * Get the document's embedded files. + */ + public List<PackagePart> getAllEmbedds() throws OpenXML4JException { + List<PackagePart> embedds = new LinkedList<PackagePart>(); + + // Get the embeddings for the workbook + for(PackageRelationship rel : getPackagePart().getRelationshipsByType(OLE_OBJECT_REL_TYPE)) + embedds.add(getTargetPart(rel)); + + for(PackageRelationship rel : getPackagePart().getRelationshipsByType(PACK_OBJECT_REL_TYPE)) + embedds.add(getTargetPart(rel)); + + return embedds; + } + + @Override + protected void commit() throws IOException { + + XmlOptions xmlOptions = new XmlOptions(DEFAULT_XML_OPTIONS); + xmlOptions.setSaveSyntheticDocumentElement(new QName(CTDocument1.type.getName().getNamespaceURI(), "document")); + Map map = new HashMap(); + map.put("http://schemas.openxmlformats.org/officeDocument/2006/math", "m"); + map.put("urn:schemas-microsoft-com:office:office", "o"); + map.put("http://schemas.openxmlformats.org/officeDocument/2006/relationships", "r"); + map.put("urn:schemas-microsoft-com:vml", "v"); + map.put("http://schemas.openxmlformats.org/markup-compatibility/2006", "ve"); + map.put("http://schemas.openxmlformats.org/wordprocessingml/2006/main", "w"); + map.put("urn:schemas-microsoft-com:office:word", "w10"); + map.put("http://schemas.microsoft.com/office/word/2006/wordml", "wne"); + map.put("http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing", "wp"); + xmlOptions.setSaveSuggestedPrefixes(map); + + PackagePart part = getPackagePart(); + OutputStream out = part.getOutputStream(); + ctDocument.save(out, xmlOptions); + out.close(); + } + + /** + * Appends a new paragraph to this document + * + * @return a new paragraph + */ + public XWPFParagraph createParagraph(){ + return new XWPFParagraph(ctDocument.getBody().addNewP(), this); + } + +} + diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFactory.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFactory.java new file mode 100755 index 0000000000..3761241bfd --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFactory.java @@ -0,0 +1,73 @@ +/* ====================================================================
+ 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 org.apache.poi.POIXMLFactory;
+import org.apache.poi.POIXMLDocumentPart;
+import org.apache.poi.POIXMLException;
+import org.apache.poi.POIXMLRelation;
+import org.apache.poi.util.POILogger;
+import org.apache.poi.util.POILogFactory;
+import org.openxml4j.opc.PackageRelationship;
+import org.openxml4j.opc.PackagePart;
+
+import java.lang.reflect.Constructor;
+
+/**
+ * @author Yegor Kozlov
+ */
+public class XWPFFactory extends POIXMLFactory {
+
+ private static POILogger logger = POILogFactory.getLogger(XWPFFactory.class);
+
+ private XWPFFactory(){
+
+ }
+
+ private static final XWPFFactory inst = new XWPFFactory();
+
+ public static XWPFFactory getInstance(){
+ return inst;
+ }
+
+ public POIXMLDocumentPart createDocumentPart(PackageRelationship rel, PackagePart part){
+ POIXMLRelation descriptor = XWPFRelation.getInstance(rel.getRelationshipType());
+ if(descriptor == null || descriptor.getRelationClass() == null){
+ logger.log(POILogger.DEBUG, "using default POIXMLDocumentPart for " + rel.getRelationshipType());
+ return new POIXMLDocumentPart(part, rel);
+ }
+
+ try {
+ Class cls = descriptor.getRelationClass();
+ Constructor<? extends POIXMLDocumentPart> constructor = cls.getDeclaredConstructor(PackagePart.class, PackageRelationship.class);
+ return constructor.newInstance(part, rel);
+ } catch (Exception e){
+ throw new POIXMLException(e);
+ }
+ }
+
+ public POIXMLDocumentPart newDocumentPart(POIXMLRelation descriptor){
+ try {
+ Class cls = descriptor.getRelationClass();
+ Constructor<? extends POIXMLDocumentPart> constructor = cls.getDeclaredConstructor();
+ return constructor.newInstance();
+ } catch (Exception e){
+ throw new POIXMLException(e);
+ }
+ }
+
+}
diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java index 708944cf7e..22ca339ab8 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java @@ -47,7 +47,7 @@ public abstract class XWPFHeaderFooter { new XWPFParagraph[headerFooter.getPArray().length]; for(int i=0; i<paras.length; i++) { paras[i] = new XWPFParagraph( - headerFooter.getPArray(i) + headerFooter.getPArray(i), null ); } return paras; diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java index c56aef00d4..f0dc207081 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java @@ -18,89 +18,83 @@ package org.apache.poi.xwpf.usermodel; import java.util.ArrayList; -import org.apache.poi.xwpf.XWPFDocument; -import org.apache.poi.xwpf.model.XMLParagraph; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlObject; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPTab; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtContentRun; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtRun; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import org.w3c.dom.NodeList; import org.w3c.dom.Text; /** * Sketch of XWPF paragraph class */ -public class XWPFParagraph extends XMLParagraph +public class XWPFParagraph { - protected XWPFDocument docRef; // XXX: we'd like to have access to document's hyperlink, comments and other tables + private CTP paragraph; + protected XWPFDocument document; // XXX: we'd like to have access to document's hyperlink, comments and other tables /** * TODO - replace with RichText String */ private StringBuffer text = new StringBuffer(); private StringBuffer pictureText = new StringBuffer(); - public XWPFParagraph(CTP prgrph, XWPFDocument docRef) + protected XWPFParagraph(CTP prgrph, XWPFDocument docRef) { - super(prgrph); - this.docRef = docRef; - - // All the runs to loop over - // TODO - replace this with some sort of XPath expression - // to directly find all the CTRs, in the right order - ArrayList<CTR> rs = new ArrayList<CTR>(); - CTR[] tmp; - - // Get the main text runs - tmp = paragraph.getRArray(); - for(int i=0; i<tmp.length; i++) { - rs.add(tmp[i]); - } - - // Not sure quite what these are, but they hold - // more text runs - CTSdtRun[] sdts = paragraph.getSdtArray(); - for(int i=0; i<sdts.length; i++) { - CTSdtContentRun run = sdts[i].getSdtContent(); - tmp = run.getRArray(); - for(int j=0; j<tmp.length; j++) { - rs.add(tmp[j]); + this.paragraph = prgrph; + this.document = docRef; + + if(!isEmpty()) { + // All the runs to loop over + // TODO - replace this with some sort of XPath expression + // to directly find all the CTRs, in the right order + ArrayList<CTR> rs = new ArrayList<CTR>(); + CTR[] tmp; + + // Get the main text runs + tmp = paragraph.getRArray(); + for(int i=0; i<tmp.length; i++) { + rs.add(tmp[i]); } - } - - - // Get text of the paragraph - for (int j = 0; j < rs.size(); j++) { - // Grab the text and tabs of the paragraph - // Do so in a way that preserves the ordering - XmlCursor c = rs.get(j).newCursor(); - c.selectPath( "./*" ); - while(c.toNextSelection()) { - XmlObject o = c.getObject(); - if(o instanceof CTText) { - text.append( ((CTText)o).getStringValue() ); - } - if(o instanceof CTPTab) { - text.append("\t"); - } - } - - // Loop over pictures inside our - // paragraph, looking for text in them - CTPicture[] picts = rs.get(j).getPictArray(); - for (int k = 0; k < picts.length; k++) { - XmlObject[] t = picts[k].selectPath("declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' .//w:t"); - for (int m = 0; m < t.length; m++) { - NodeList kids = t[m].getDomNode().getChildNodes(); - for (int n = 0; n < kids.getLength(); n++) { - if (kids.item(n) instanceof Text) { - pictureText.append("\n" + kids.item(n).getNodeValue()); + + // Not sure quite what these are, but they hold + // more text runs + CTSdtRun[] sdts = paragraph.getSdtArray(); + for(int i=0; i<sdts.length; i++) { + CTSdtContentRun run = sdts[i].getSdtContent(); + tmp = run.getRArray(); + for(int j=0; j<tmp.length; j++) { + rs.add(tmp[j]); + } + } + + + // Get text of the paragraph + for (int j = 0; j < rs.size(); j++) { + // Grab the text and tabs of the paragraph + // Do so in a way that preserves the ordering + XmlCursor c = rs.get(j).newCursor(); + c.selectPath( "./*" ); + while(c.toNextSelection()) { + XmlObject o = c.getObject(); + if(o instanceof CTText) { + text.append( ((CTText)o).getStringValue() ); + } + if(o instanceof CTPTab) { + text.append("\t"); + } + } + + // Loop over pictures inside our + // paragraph, looking for text in them + CTPicture[] picts = rs.get(j).getPictArray(); + for (int k = 0; k < picts.length; k++) { + XmlObject[] t = picts[k].selectPath("declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' .//w:t"); + for (int m = 0; m < t.length; m++) { + NodeList kids = t[m].getDomNode().getChildNodes(); + for (int n = 0; n < kids.getLength(); n++) { + if (kids.item(n) instanceof Text) { + pictureText.append("\n"); + pictureText.append(kids.item(n).getNodeValue()); + } } } } @@ -108,22 +102,16 @@ public class XWPFParagraph extends XMLParagraph } } - public XWPFParagraph(CTP prgrph) { - this(prgrph, null); + public CTP getCTP() { + return paragraph; } - - public XWPFParagraph(XMLParagraph paragraph) { - this(paragraph.getCTP()); - } - - + public boolean isEmpty() { return !paragraph.getDomNode().hasChildNodes(); } - - - public XWPFDocument getDocRef() { - return docRef; + + public XWPFDocument getDocument() { + return document; } /** @@ -147,4 +135,49 @@ public class XWPFParagraph extends XMLParagraph public String getPictureText() { return pictureText.toString(); } + + /** + * Appends a new run to this paragraph + * + * @return a new text run + */ + public XWPFRun createRun(){ + return new XWPFRun(paragraph.addNewR(), this); + } + + /** + * Returns the paragraph alignment which shall be applied to text in this paragraph. + * + * <p> + * If this element is not set on a given paragraph, its value is determined by the setting previously + * set at any level of the style hierarchy (i.e. that previous setting remains unchanged). + * If this setting is never specified in the style hierarchy, then no alignment is applied to the paragraph. + * </p> + * + * @return the paragraph alignment of this paragraph. + */ + public ParagraphAlignment getAlignment(){ + CTPPr pr = paragraph.getPPr(); + return pr == null || !pr.isSetJc() ? ParagraphAlignment.LEFT : + ParagraphAlignment.valueOf(pr.getJc().getVal().intValue()); + } + + /** + * Specifies the paragraph alignment which shall be applied to text in this paragraph. + * + * <p> + * If this element is not set on a given paragraph, its value is determined by the setting previously + * set at any level of the style hierarchy (i.e. that previous setting remains unchanged). + * If this setting is never specified in the style hierarchy, then no alignment is applied to the paragraph. + * </p> + * + * @param align the paragraph alignment to apply to this paragraph. + */ + public void setAlignment(ParagraphAlignment align){ + CTPPr pr = paragraph.isSetPPr() ? paragraph.getPPr() : paragraph.addNewPPr(); + CTJc jc = pr.isSetJc() ? pr.getJc() : pr.addNewJc(); + STJc.Enum en = STJc.Enum.forInt(align.getValue()); + jc.setVal(en); + } + } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraphText.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraphText.java deleted file mode 100644 index a25b16467c..0000000000 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraphText.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.apache.poi.xwpf.usermodel; - -public class XWPFParagraphText -{ - -} diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRelation.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRelation.java new file mode 100755 index 0000000000..7b44e841ac --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRelation.java @@ -0,0 +1,94 @@ +/* ====================================================================
+ 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 org.apache.poi.POIXMLRelation;
+import org.apache.poi.POIXMLDocumentPart;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @author Yegor Kozlov
+ */
+public class XWPFRelation extends POIXMLRelation {
+ public static final String MAIN_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml";
+ public static final String HEADER_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml";
+ public static final String HEADER_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header";
+ public static final String FOOTER_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml";
+ public static final String FOOTER_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer";
+ public static final String STYLES_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml";
+ public static final String STYLES_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
+ public static final String HYPERLINK_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink";
+ public static final String COMMENT_RELATION_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments";
+
+ /**
+ * A map to lookup POIXMLRelation by its relation type
+ */
+ protected static Map<String, XWPFRelation> _table = new HashMap<String, XWPFRelation>();
+
+
+ public static final XWPFRelation DOCUMENT = new XWPFRelation(
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
+ "/word/document.xml",
+ null
+ );
+ public static final XWPFRelation FONT_TABLE = new XWPFRelation(
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable",
+ "/word/fontTable.xml",
+ null
+ );
+ public static final XWPFRelation SETTINGS = new XWPFRelation(
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings",
+ "/word/settings.xml",
+ null
+ );
+ public static final XWPFRelation STYLES = new XWPFRelation(
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",
+ "/word/styles.xml",
+ null
+ );
+ public static final XWPFRelation WEB_SETTINGS = new XWPFRelation(
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml",
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings",
+ "/word/webSettings.xml",
+ null
+ );
+
+
+ private XWPFRelation(String type, String rel, String defaultName, Class<? extends POIXMLDocumentPart> cls) {
+ super(type, rel, defaultName, cls);
+
+ if (cls != null && !_table.containsKey(rel)) _table.put(rel, this);
+ }
+
+ /**
+ * Get POIXMLRelation by relation type
+ *
+ * @param rel relation type, for example,
+ * <code>http://schemas.openxmlformats.org/officeDocument/2006/relationships/image</code>
+ * @return registered POIXMLRelation or null if not found
+ */
+ public static XWPFRelation getInstance(String rel) {
+ return _table.get(rel);
+ }
+
+}
diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java new file mode 100755 index 0000000000..0db7a8a65e --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java @@ -0,0 +1,105 @@ +/* ====================================================================
+ 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 org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
+
+/**
+ * XWPFRun object defines a region of text with a common set of properties
+ *
+ * @author Yegor Kozlov
+ */
+public class XWPFRun {
+ private CTR run;
+ private XWPFParagraph paragraph;
+
+ /**
+ *
+ * @param r the CTR bean which holds the run attributes
+ * @param p the parent paragraph
+ */
+ protected XWPFRun(CTR r, XWPFParagraph p){
+ this.run = r;
+ this.paragraph = p;
+ }
+
+ public CTR getCTR(){
+ return run;
+ }
+
+ public XWPFParagraph getParagraph(){
+ return paragraph;
+ }
+
+ /**
+ * Whether the bold property shall be applied to all non-complex script characters in the
+ * contents of this run when displayed in a document
+ *
+ * @return <code>true</code> if the bold property is applied
+ */
+ public boolean isBold(){
+ CTRPr pr = run.getRPr();
+ return pr != null && pr.isSetB();
+ }
+
+ /**
+ * Whether the bold property shall be applied to all non-complex script characters in the
+ * contents of this run when displayed in a document
+ *
+ * <p>
+ * This formatting property is a toggle property, which specifies that its behavior differs between its use within a
+ * style definition and its use as direct formatting. When used as part of a style definition, setting this property
+ * shall toggle the current state of that property as specified up to this point in the hierarchy (i.e. applied to not
+ * applied, and vice versa). Setting it to <code>false</code> (or an equivalent) shall result in the current
+ * setting remaining unchanged. However, when used as direct formatting, setting this property to true or false
+ * shall set the absolute state of the resulting property.
+ * </p>
+ * <p>
+ * If this element is not present, the default value is to leave the formatting applied at previous level in the style
+ * hierarchy. If this element is never applied in the style hierarchy, then bold shall not be applied to non-complex
+ * script characters.
+ * </p>
+ *
+ * @param value <code>true</code> if the bold property is applied to this run
+ */
+ public void setBold(boolean value){
+ CTRPr pr = run.isSetRPr() ? run.getRPr() : run.addNewRPr();
+ pr.addNewB().setVal(value ? STOnOff.TRUE : STOnOff.FALSE);
+ }
+
+ /**
+ * Return the string content of this text run
+ *
+ * @return the text of this text run or <code>null</code> if not set
+ */
+ public String getText(){
+ return run.sizeOfTArray() == 0 ? null : run.getTArray(0).getStringValue();
+ }
+
+ /**
+ * Sets the text of this text run
+ *
+ * @param value the literal text which shall be displayed in the document
+ */
+ public void setText(String value){
+ CTText t = run.sizeOfTArray() == 0 ? run.addNewT() : run.getTArray(0);
+ t.setStringValue(value);
+ }
+}
diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java index aa647503b9..3521812194 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java @@ -37,7 +37,7 @@ public class XWPFTable StringBuffer rowText = new StringBuffer(); for(CTTc cell : row.getTcArray()) { for(CTP ctp : cell.getPArray()) { - XWPFParagraph p = new XWPFParagraph(ctp); + XWPFParagraph p = new XWPFParagraph(ctp, null); if(rowText.length() > 0) { rowText.append('\t'); } diff --git a/src/ooxml/testcases/org/apache/poi/TestEmbeded.java b/src/ooxml/testcases/org/apache/poi/TestEmbeded.java index 95bbe51f29..f6049c396d 100644 --- a/src/ooxml/testcases/org/apache/poi/TestEmbeded.java +++ b/src/ooxml/testcases/org/apache/poi/TestEmbeded.java @@ -20,12 +20,11 @@ package org.apache.poi; import java.io.File; -import java.util.Iterator; import org.apache.poi.util.IOUtils; import org.apache.poi.xslf.XSLFSlideShow; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.apache.poi.xwpf.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.openxml4j.opc.Package; import org.openxml4j.opc.PackagePart; diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java b/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java index 0bd24a2072..c76df46910 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java @@ -19,6 +19,8 @@ package org.apache.poi.xwpf; import java.io.File; import org.apache.poi.POIXMLDocument; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFRelation; import org.openxml4j.opc.Package; import org.openxml4j.opc.PackagePart; @@ -49,7 +51,7 @@ public class TestXWPFDocument extends TestCase { boolean found = false; for(PackagePart part : pack.getParts()) { - if(part.getContentType().equals(XWPFDocument.MAIN_CONTENT_TYPE)) { + if(part.getContentType().equals(XWPFRelation.MAIN_CONTENT_TYPE)) { found = true; } System.out.println(part); @@ -76,7 +78,7 @@ public class TestXWPFDocument extends TestCase { ); // Check it has key parts assertNotNull(xml.getDocument()); - assertNotNull(xml.getDocumentBody()); + assertNotNull(xml.getDocument().getBody()); assertNotNull(xml.getStyle()); // Complex file @@ -84,7 +86,7 @@ public class TestXWPFDocument extends TestCase { POIXMLDocument.openPackage(complexFile.toString()) ); assertNotNull(xml.getDocument()); - assertNotNull(xml.getDocumentBody()); + assertNotNull(xml.getDocument().getBody()); assertNotNull(xml.getStyle()); } diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java b/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java index 8fc83bc91e..2704e0371e 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java @@ -19,7 +19,7 @@ package org.apache.poi.xwpf.extractor; import java.io.File; import org.apache.poi.POIXMLDocument; -import org.apache.poi.xwpf.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import junit.framework.TestCase; diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java b/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java index 9d0e96a175..b55b01951b 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java @@ -19,7 +19,7 @@ package org.apache.poi.xwpf.model; import java.io.File; import org.apache.poi.POIXMLDocument; -import org.apache.poi.xwpf.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import junit.framework.TestCase; diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java index 5a775c361d..65fb7f3312 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java @@ -19,7 +19,7 @@ package org.apache.poi.xwpf.usermodel; import java.io.File; import org.apache.poi.POIXMLDocument; -import org.apache.poi.xwpf.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import junit.framework.TestCase; |