aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYegor Kozlov <yegor@apache.org>2008-11-09 16:18:46 +0000
committerYegor Kozlov <yegor@apache.org>2008-11-09 16:18:46 +0000
commit292797064530e5d788a4c84efbabc5dfc09fc572 (patch)
treeb5535acc5538ee33bc0cf752f69eefe2d87797d7 /src
parent6dd30fcaf5f656a39be84e80ceff566a2394a703 (diff)
downloadpoi-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')
-rwxr-xr-x[-rw-r--r--]src/examples/src/org/apache/poi/xwpf/usermodel/SimpleDocument.java (renamed from src/ooxml/java/org/apache/poi/xwpf/usermodel/XMLWordDocument.java)103
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/extractor/ExcelExtractor.java44
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Cell.java115
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/CellStyle.java23
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Color.java20
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Comment.java23
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/CreationHelper.java28
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/DataFormat.java20
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Font.java116
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Footer.java20
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Header.java20
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Hyperlink.java40
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Iterable.java30
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Name.java23
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Palette.java20
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Patriarch.java20
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/PictureData.java20
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/PrintSetup.java20
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/RichTextString.java27
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Row.java54
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Sheet.java35
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Textbox.java20
-rw-r--r--src/ooxml/interfaces-jdk14/org/apache/poi/ss/usermodel/Workbook.java67
-rw-r--r--src/ooxml/java/org/apache/poi/POIXMLDocument.java32
-rw-r--r--src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java5
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java31
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/XWPFDocument.java255
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/extractor/XWPFWordExtractor.java2
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/model/XWPFCommentsDecorator.java2
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java4
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/model/XWPFHyperlinkDecorator.java4
-rwxr-xr-xsrc/ooxml/java/org/apache/poi/xwpf/usermodel/ParagraphAlignment.java65
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFComment.java2
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java322
-rwxr-xr-xsrc/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFactory.java73
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java2
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java189
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraphText.java6
-rwxr-xr-xsrc/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRelation.java94
-rwxr-xr-xsrc/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java105
-rw-r--r--src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java2
-rw-r--r--src/ooxml/testcases/org/apache/poi/TestEmbeded.java3
-rw-r--r--src/ooxml/testcases/org/apache/poi/xwpf/TestXWPFDocument.java8
-rw-r--r--src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java2
-rw-r--r--src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java2
-rw-r--r--src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java2
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;