Author: nick
Date: Thu Aug 13 20:01:04 2015
New Revision: 1695769

URL: http://svn.apache.org/r1695769
Log:
#58237 Add some more XWPF header and footer tests

Modified:
    
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java
    poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
    poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
    
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java
    
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFPictureData.java

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java?rev=1695769&r1=1695768&r2=1695769&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java 
(original)
+++ 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java 
Thu Aug 13 20:01:04 2015
@@ -31,8 +31,8 @@ import org.apache.poi.xwpf.usermodel.XWP
 import org.apache.poi.xwpf.usermodel.XWPFHeaderFooter;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.apache.poi.xwpf.usermodel.XWPFRelation;
-import org.apache.xmlbeans.XmlException;
 import org.apache.xmlbeans.XmlOptions;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHdrFtr;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHdrFtrRef;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
@@ -45,6 +45,7 @@ import org.openxmlformats.schemas.wordpr
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.HdrDocument;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr.Enum;
+
 import schemasMicrosoftComOfficeOffice.CTLock;
 import schemasMicrosoftComOfficeOffice.STConnectType;
 import schemasMicrosoftComVml.CTFormulas;
@@ -86,7 +87,7 @@ public class XWPFHeaderFooterPolicy {
      * and creates any header and footer objects
      * as required.
      */
-    public XWPFHeaderFooterPolicy(XWPFDocument doc) throws IOException, 
XmlException {
+    public XWPFHeaderFooterPolicy(XWPFDocument doc) {
         this(doc, doc.getDocument().getBody().getSectPr());
     }
 
@@ -95,7 +96,7 @@ public class XWPFHeaderFooterPolicy {
      * and creates any header and footer objects
      * as required.
      */
-    public XWPFHeaderFooterPolicy(XWPFDocument doc, CTSectPr sectPr) throws 
IOException, XmlException {
+    public XWPFHeaderFooterPolicy(XWPFDocument doc, CTSectPr sectPr) {
         // Grab what headers and footers have been defined
         // For now, we don't care about different ranges, as it
         //  doesn't seem that .docx properly supports that
@@ -178,6 +179,7 @@ public class XWPFHeaderFooterPolicy {
         assignHeader(wrapper, type);
         hdrDoc.save(outputStream, xmlOptions);
         outputStream.close();
+        
         return wrapper;
     }
 
@@ -282,10 +284,16 @@ public class XWPFHeaderFooterPolicy {
             }
         } else {
             CTP p = ftr.addNewP();
-            byte[] rsidr = doc.getDocument().getBody().getPArray(0).getRsidR();
-            byte[] rsidrdefault = 
doc.getDocument().getBody().getPArray(0).getRsidRDefault();
-            p.setRsidP(rsidr);
-            p.setRsidRDefault(rsidrdefault);
+            CTBody body = doc.getDocument().getBody();
+            if (body.sizeOfPArray() > 0) {
+                CTP p0 = body.getPArray(0);
+                if (p0.isSetRsidR()) {
+                    byte[] rsidr = p0.getRsidR();
+                    byte[] rsidrdefault = p0.getRsidRDefault();
+                    p.setRsidP(rsidr);
+                    p.setRsidRDefault(rsidrdefault);
+                }
+            }
             CTPPr pPr = p.addNewPPr();
             pPr.addNewPStyle().setVal(pStyle);
         }

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java?rev=1695769&r1=1695768&r2=1695769&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java 
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java 
Thu Aug 13 20:01:04 2015
@@ -427,6 +427,15 @@ public class XWPFDocument extends POIXML
     public XWPFHeaderFooterPolicy getHeaderFooterPolicy() {
         return headerFooterPolicy;
     }
+    public XWPFHeaderFooterPolicy createHeaderFooterPolicy() {
+        if (headerFooterPolicy == null) {
+            if (! ctDocument.getBody().isSetSectPr()) {
+                ctDocument.getBody().addNewSectPr();
+            }
+            headerFooterPolicy = new XWPFHeaderFooterPolicy(this);
+        }
+        return headerFooterPolicy;
+    }
 
     /**
      * Returns the styles object used

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java?rev=1695769&r1=1695768&r2=1695769&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java 
(original)
+++ 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java 
Thu Aug 13 20:01:04 2015
@@ -318,6 +318,15 @@ public abstract class XWPFHeaderFooter e
     }
 
     /**
+     * Adds a new paragraph at the end of the header or footer
+     */
+    public XWPFParagraph createParagraph() {
+        XWPFParagraph paragraph = new XWPFParagraph(headerFooter.addNewP(), 
this);
+        paragraphs.add(paragraph);
+        return paragraph;
+    }
+    
+    /**
      * add a new paragraph at position of the cursor
      *
      * @param cursor

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java?rev=1695769&r1=1695768&r2=1695769&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java
 (original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFHeaderFooterPolicy.java
 Thu Aug 13 20:01:04 2015
@@ -20,8 +20,11 @@ package org.apache.poi.xwpf.model;
 import java.io.IOException;
 
 import junit.framework.TestCase;
+
 import org.apache.poi.xwpf.XWPFTestDataSamples;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFFooter;
+import org.apache.poi.xwpf.usermodel.XWPFHeader;
 
 /**
  * Tests for XWPF Header Footer Stuff
@@ -35,7 +38,6 @@ public class TestXWPFHeaderFooterPolicy
     private XWPFDocument diffFirst;
 
     protected void setUp() throws IOException {
-
         noHeader = XWPFTestDataSamples.openSampleDocument("NoHeadFoot.docx");
         header = XWPFTestDataSamples.openSampleDocument("ThreeColHead.docx");
         headerFooter = 
XWPFTestDataSamples.openSampleDocument("SimpleHeadThreeColFoot.docx");
@@ -124,6 +126,35 @@ public class TestXWPFHeaderFooterPolicy
         assertEquals(policy.getDefaultFooter(), policy.getFooter(2));
         assertEquals(policy.getDefaultFooter(), policy.getFooter(3));
     }
+    
+    @SuppressWarnings("resource")
+    public void testCreate() throws Exception {
+        XWPFDocument doc = new XWPFDocument();
+        assertEquals(null, doc.getHeaderFooterPolicy());
+        assertEquals(0, doc.getHeaderList().size());
+        assertEquals(0, doc.getFooterList().size());
+        
+        XWPFHeaderFooterPolicy policy = doc.createHeaderFooterPolicy();
+        assertNotNull(doc.getHeaderFooterPolicy());
+        assertEquals(0, doc.getHeaderList().size());
+        assertEquals(0, doc.getFooterList().size());
+        
+        // Create a header and a footer
+        XWPFHeader header = 
policy.createHeader(XWPFHeaderFooterPolicy.DEFAULT);
+        XWPFFooter footer = 
policy.createFooter(XWPFHeaderFooterPolicy.DEFAULT);
+        header.createParagraph().createRun().setText("Header Hello");
+        footer.createParagraph().createRun().setText("Footer Bye");
+        
+        
+        // Save, re-load, and check
+        doc = XWPFTestDataSamples.writeOutAndReadBack(doc);
+        assertNotNull(doc.getHeaderFooterPolicy());
+        assertEquals(1, doc.getHeaderList().size());
+        assertEquals(1, doc.getFooterList().size());
+        
+        assertEquals("Header Hello\n", doc.getHeaderList().get(0).getText());
+        assertEquals("Footer Bye\n", doc.getFooterList().get(0).getText());
+    }
 
     public void testContents() {
         XWPFHeaderFooterPolicy policy;

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFPictureData.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFPictureData.java?rev=1695769&r1=1695768&r2=1695769&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFPictureData.java
 (original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFPictureData.java
 Thu Aug 13 20:01:04 2015
@@ -19,15 +19,18 @@ package org.apache.poi.xwpf.usermodel;
 
 import static org.junit.Assert.assertArrayEquals;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.util.List;
 
 import junit.framework.TestCase;
+
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
 import org.apache.poi.xssf.usermodel.XSSFRelation;
 import org.apache.poi.xwpf.XWPFTestDataSamples;
 import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
 
 public class TestXWPFPictureData extends TestCase {
 
@@ -60,6 +63,37 @@ public class TestXWPFPictureData extends
         XWPFDocument readBack = 
XWPFTestDataSamples.writeOutAndReadBack(sampleDoc);
         verifyOneHeaderPicture(readBack);
     }
+    
+    public void FIXMEtestCreateHeaderPicture() throws Exception { // TODO Fix
+        XWPFDocument doc = new XWPFDocument();
+        
+        // Starts with no header
+        XWPFHeaderFooterPolicy policy = doc.getHeaderFooterPolicy();
+        assertNull(policy);
+        
+        // Add a default header
+        policy = doc.createHeaderFooterPolicy();
+        
+        XWPFParagraph[] hparas = new XWPFParagraph[] {
+                new XWPFParagraph(CTP.Factory.newInstance(), doc)
+        };
+        hparas[0].createRun().setText("Header Hello World!");
+        XWPFHeader header = 
policy.createHeader(XWPFHeaderFooterPolicy.DEFAULT, hparas);
+        assertEquals(0, header.getAllPictures().size());
+        assertEquals(1, header.getParagraphs().size());
+        
+        // Add a picture to it
+        header.getParagraphs().get(0).getRuns().get(0).addPicture(
+                new ByteArrayInputStream(new byte[] {1,2,3,4}), 
+                Document.PICTURE_TYPE_JPEG, "test.jpg", 2, 2);
+        
+        // Check
+        verifyOneHeaderPicture(doc);
+        
+        // Save, re-load, re-check
+        XWPFDocument readBack = XWPFTestDataSamples.writeOutAndReadBack(doc);
+        verifyOneHeaderPicture(readBack);
+    }
 
     private void verifyOneHeaderPicture(XWPFDocument sampleDoc) {
         XWPFHeaderFooterPolicy policy = sampleDoc.getHeaderFooterPolicy();



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to