You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2008/08/09 14:15:33 UTC

svn commit: r684239 - in /poi/branches/ooxml/src/ooxml: java/org/apache/poi/xwpf/ java/org/apache/poi/xwpf/usermodel/ testcases/org/apache/poi/xwpf/usermodel/

Author: nick
Date: Sat Aug  9 05:15:32 2008
New Revision: 684239

URL: http://svn.apache.org/viewvc?rev=684239&view=rev
Log:
Improve how XWPFParagraph works, so it is child order aware

Added:
    poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/
    poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java   (with props)
Modified:
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/XWPFDocument.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
    poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/XWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/XWPFDocument.java?rev=684239&r1=684238&r2=684239&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/XWPFDocument.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/XWPFDocument.java Sat Aug  9 05:15:32 2008
@@ -159,10 +159,14 @@
 		return wordDoc.getDocument();
 	}
 	
-	public Iterator<XWPFParagraph> getParagraphsIterator()
-	{
+	public Iterator<XWPFParagraph> getParagraphsIterator() {
 		return paragraphs.iterator();
 	}
+	public XWPFParagraph[] getParagraphs() {
+		return paragraphs.toArray(
+			new XWPFParagraph[paragraphs.size()]
+		);
+	}
 	
 	public Iterator<XWPFTable> getTablesIterator()
 	{

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java?rev=684239&r1=684238&r2=684239&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java Sat Aug  9 05:15:32 2008
@@ -30,4 +30,39 @@
 	protected XWPFHeaderFooter() {
 		headerFooter = CTHdrFtr.Factory.newInstance();
 	}
+	
+	public CTHdrFtr _getHdrFtr() {
+		return headerFooter;
+	}
+
+	/**
+	 * Returns the paragraph(s) that holds
+	 *  the text of the header or footer.
+	 * Normally there is only the one paragraph, but
+	 *  there could be more in certain cases.
+	 */
+	public XWPFParagraph[] getParagraphs() {
+		XWPFParagraph[] paras = 
+			new XWPFParagraph[headerFooter.getPArray().length];
+		for(int i=0; i<paras.length; i++) {
+			paras[i] = new XWPFParagraph(
+					headerFooter.getPArray(i)
+			);
+		}
+		return paras;
+	}
+	
+	/**
+	 * Returns the textual content of the header/footer,
+	 *  by flattening out the text of its paragraph(s)
+	 */
+	public String getText() {
+		StringBuffer t = new StringBuffer();
+		XWPFParagraph[] paras = getParagraphs();
+		for (int i = 0; i < paras.length; i++) {
+			t.append(paras[i].getText());
+			t.append('\n');
+		}
+		return t.toString(); 
+	}
 }

Modified: poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java?rev=684239&r1=684238&r2=684239&view=diff
==============================================================================
--- poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java (original)
+++ poi/branches/ooxml/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java Sat Aug  9 05:15:32 2008
@@ -16,10 +16,12 @@
 ==================================================================== */
 package org.apache.poi.xwpf.usermodel;
 
-import org.apache.poi.xwpf.model.XMLParagraph;
 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.CTText;
@@ -45,16 +47,22 @@
         this.docRef = docRef; 
         CTR[] rs = paragraph.getRArray();
     
-        // Get text
+        // Get text of the paragraph
         for (int j = 0; j < rs.length; j++) {
-            // Loop over text runs
-            CTText[] texts = rs[j].getTArray();
-            for (int k = 0; k < texts.length; k++) {
-                text.append(
-                        texts[k].getStringValue()
-                );
-            }
-            
+            // Grab the text and tabs of the paragraph
+        	// Do so in a way that preserves the ordering
+        	XmlCursor c = rs[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[j].getPictArray();
@@ -80,6 +88,12 @@
         this(paragraph.getCTP());
     }
     
+    
+    public boolean isEmpty() {
+    	return !paragraph.getDomNode().hasChildNodes();
+    }
+    
+    
     public XWPFDocument getDocRef() {
         return docRef;
     }

Added: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java?rev=684239&view=auto
==============================================================================
--- poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java (added)
+++ poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java Sat Aug  9 05:15:32 2008
@@ -0,0 +1,96 @@
+/* ====================================================================
+   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.File;
+
+import org.apache.poi.POIXMLDocument;
+import org.apache.poi.xwpf.XWPFDocument;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for XWPF Paragraphs
+ */
+public class TestXWPFParagraph extends TestCase {
+	/**
+	 * A simple file
+	 */
+	private XWPFDocument xml;
+	private File file;
+	
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		file = new File(
+				System.getProperty("HWPF.testdata.path") +
+				File.separator + "ThreeColHead.docx"
+		);
+		assertTrue(file.exists());
+		xml = new XWPFDocument(POIXMLDocument.openPackage(file.toString()));
+	}
+	
+	/**
+	 * Check that we get the right paragraph from the header
+	 */
+	public void testHeaderParagraph() throws Exception {
+		XWPFHeader hdr = xml.getDocumentHeader();
+		assertNotNull(hdr);
+		
+		XWPFParagraph[] ps = hdr.getParagraphs();
+		assertEquals(1, ps.length);
+		XWPFParagraph p = ps[0];
+		
+		assertEquals(5, p.getCTP().getRArray().length);
+		assertEquals(
+				"First header column!\tMid header\tRight header!",
+				p.getText()
+		);
+	}
+	
+	/**
+	 * Check that we get the right paragraphs from the document
+	 */
+	public void testDocumentParagraph() throws Exception {
+		XWPFParagraph[] ps = xml.getParagraphs();
+		assertEquals(10, ps.length);
+		
+		assertFalse(ps[0].isEmpty());
+		assertEquals(
+				"This is a sample word document. It has two pages. It has a three column heading, but no footer.",
+				ps[0].getText()
+		);
+		
+		assertTrue(ps[1].isEmpty());
+		assertEquals("", ps[1].getText());
+		
+		assertFalse(ps[2].isEmpty());
+		assertEquals(
+				"HEADING TEXT",
+				ps[2].getText()
+		);
+		
+		assertTrue(ps[3].isEmpty());
+		assertEquals("", ps[3].getText());
+		
+		assertFalse(ps[4].isEmpty());
+		assertEquals(
+				"More on page one",
+				ps[4].getText()
+		);
+	}
+}

Propchange: poi/branches/ooxml/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org