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 2010/09/20 17:43:07 UTC

svn commit: r998960 - in /poi/trunk/src: documentation/content/xdocs/ ooxml/java/org/apache/poi/ ooxml/java/org/apache/poi/xwpf/usermodel/ ooxml/testcases/org/apache/poi/xwpf/usermodel/

Author: nick
Date: Mon Sep 20 15:43:07 2010
New Revision: 998960

URL: http://svn.apache.org/viewvc?rev=998960&view=rev
Log:
Fix bug #49765 - Fix XWPFDocument.addPicture so that it correctly sets up relationships

Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java
    poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFPictureData.java

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=998960&r1=998959&r2=998960&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Mon Sep 20 15:43:07 2010
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.7-beta3" date="2010-??-??">
+           <action dev="poi-developers" type="fix">49765 - Fix XWPFDocument.addPicture so that it correctly sets up relationships</action>
            <action dev="poi-developers" type="fix">48018 - Improve HWPF handling of lists in documents read and then saved, by preserving order better</action>
            <action dev="poi-developers" type="fix">49820 - Fix HWPF paragraph levels, so that outline levels can be properly fetched</action>
            <action dev="poi-developers" type="fix">47271 - Avoid infinite loops on broken HWPF documents with a corrupt CHP style with a parent of itself</action>

Modified: poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java?rev=998960&r1=998959&r2=998960&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java Mon Sep 20 15:43:07 2010
@@ -230,7 +230,9 @@ public class POIXMLDocumentPart {
         try {
             PackagePartName ppName = PackagingURIHelper.createPartName(descriptor.getFileName(idx));
             PackageRelationship rel = null;
-            if(!noRelation) rel = packagePart.addRelationship(ppName, TargetMode.INTERNAL, descriptor.getRelation());
+            if(!noRelation) {
+               rel = packagePart.addRelationship(ppName, TargetMode.INTERNAL, descriptor.getRelation());
+            }
             PackagePart part = packagePart.getPackage().createPart(ppName, descriptor.getContentType());
             POIXMLDocumentPart doc = factory.newDocumentPart(descriptor);
             doc.packageRel = rel;

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=998960&r1=998959&r2=998960&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 Mon Sep 20 15:43:07 2010
@@ -16,6 +16,7 @@
 ==================================================================== */
 package org.apache.poi.xwpf.usermodel;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -994,13 +995,12 @@ public class XWPFDocument extends POIXML
      */
     public int addPicture(InputStream is, int format) throws IOException, InvalidFormatException {
         int imageNumber = getNextPicNameNumber(format);
-        XWPFPictureData img = (XWPFPictureData)createRelationship(XWPFPictureData.RELATIONS[format], XWPFFactory.getInstance(), imageNumber, true);
+        XWPFPictureData img = (XWPFPictureData)createRelationship(XWPFPictureData.RELATIONS[format], XWPFFactory.getInstance(), imageNumber, false);
         OutputStream out = img.getPackagePart().getOutputStream();
         IOUtils.copy(is, out);
         out.close();
         pictures.add(img);
         return getAllPictures().size()-1;
-       
     }
     
     /**
@@ -1013,18 +1013,11 @@ public class XWPFDocument extends POIXML
      * @throws InvalidFormatException 
      */
     public int addPicture(byte[] pictureData, int format) throws InvalidFormatException {
-        int imageNumber = getNextPicNameNumber(format);
-        XWPFPictureData img = (XWPFPictureData)createRelationship(XWPFPictureData.RELATIONS[format], XWPFFactory.getInstance(), imageNumber, false);
         try {
-            OutputStream out = img.getPackagePart().getOutputStream();
-            out.write(pictureData);
-            out.close();
+           return addPicture(new ByteArrayInputStream(pictureData), format);
         } catch (IOException e){
             throw new POIXMLException(e);
         }
-        
-        pictures.add(img);
-        return getAllPictures().size()-1;
     }
     
     /**
@@ -1065,48 +1058,6 @@ public class XWPFDocument extends POIXML
     }
     
     /**
-     * Add the picture to  drawing relations
-     *
-     * @param img the PictureData of the Picture,
-     * @throws InvalidFormatException 
-     */
-    public PackageRelationship addPictureReference(byte[] pictureData, int format) throws InvalidFormatException{
-    	int imageNumber = getNextPicNameNumber(format);
-        XWPFPictureData img = (XWPFPictureData)createRelationship(XWPFPictureData.RELATIONS[format], XWPFFactory.getInstance(), imageNumber, false);
-        PackageRelationship rel = null;
-        try {
-            OutputStream out = img.getPackagePart().getOutputStream();
-            out.write(pictureData);
-             out.close();
-             rel = img.getPackageRelationship();
-             pictures.add(img);
-         } catch (IOException e){
-             throw new POIXMLException(e);
-         }
-          return rel;
-    }
-          
-      /**
-       * Add the picture to  drawing relations
-       *
-       * @param img the PictureData of the Picture,
-     * @throws InvalidFormatException 
-     * @throws IOException 
-       */
-      public PackageRelationship addPictureReference(InputStream is, int format) throws InvalidFormatException, IOException{
-    	  
-    	  PackageRelationship rel = null;
-    	  int imageNumber = getNextPicNameNumber(format);
-    	  XWPFPictureData img = (XWPFPictureData)createRelationship(XWPFPictureData.RELATIONS[format], XWPFFactory.getInstance(), imageNumber, false);
-    	  OutputStream out = img.getPackagePart().getOutputStream();
-    	  IOUtils.copy(is, out);
-    	  out.close();
-    	  rel = img.getPackageRelationship();
-    	  pictures.add(img);
-        return rel;      
-      }
-	
-    /**
      *  getNumbering
      * @return numbering
      */

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=998960&r1=998959&r2=998960&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 Mon Sep 20 15:43:07 2010
@@ -24,6 +24,7 @@ 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;
 
 public class TestXWPFPictureData extends TestCase {
@@ -57,30 +58,58 @@ public class TestXWPFPictureData extends
 			}
 	    }
 
-	    public void testNew(){
+	    public void testNew() throws Exception {
 	        XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("EmptyDocumentWithHeaderFooter.docx");
 	        byte[] jpegData = "test jpeg data".getBytes();
 	        byte[] wmfData =  "test wmf data".getBytes();
 	        byte[] pngData =  "test png data".getBytes();
+	        
 	        List<XWPFPictureData> pictures = doc.getAllPictures();
 	        assertEquals(0, pictures.size());
+	        
+	        // Document shouldn't have any image relationships
+	        assertEquals(13, doc.getPackagePart().getRelationships().size());
+	        for(PackageRelationship rel : doc.getPackagePart().getRelationships()) {
+	           if(rel.getRelationshipType().equals(XSSFRelation.IMAGE_JPEG.getRelation())) {
+	              fail("Shouldn't have JPEG yet");
+	           }
+	        }
+	        
+	        // Add the image
 	        int jpegIdx;
-			try {
-				jpegIdx = doc.addPicture(jpegData, XWPFDocument.PICTURE_TYPE_JPEG);
-				assertEquals(1, pictures.size());
-				assertEquals("jpeg", pictures.get(jpegIdx).suggestFileExtension());
-				assertTrue(Arrays.equals(jpegData, pictures.get(jpegIdx).getData()));
-				
-				PackageRelationship addPictureReference = doc.addPictureReference(jpegData, Document.PICTURE_TYPE_JPEG );
-				XWPFPictureData pictureDataByID = doc.getPictureDataByID(addPictureReference.getId());
-				byte [] newJPEGData = pictureDataByID.getData();
-				assertEquals(newJPEGData.length, jpegData.length);
-				for(int i = 0; i < newJPEGData.length; i++){
-					assertEquals(newJPEGData[i], jpegData[i]);	
-				}
-			} catch (InvalidFormatException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
+	        
+	        jpegIdx = doc.addPicture(jpegData, XWPFDocument.PICTURE_TYPE_JPEG);
+	        assertEquals(1, pictures.size());
+	        assertEquals("jpeg", pictures.get(jpegIdx).suggestFileExtension());
+	        assertTrue(Arrays.equals(jpegData, pictures.get(jpegIdx).getData()));
+	        
+	        // Ensure it now has one
+           assertEquals(14, doc.getPackagePart().getRelationships().size());
+           PackageRelationship jpegRel = null;
+           for(PackageRelationship rel : doc.getPackagePart().getRelationships()) {
+              if(rel.getRelationshipType().equals(XWPFRelation.IMAGE_JPEG.getRelation())) {
+                 if(jpegRel != null)
+                    fail("Found 2 jpegs!");
+                 jpegRel = rel;
+              }
+           }
+           assertNotNull("JPEG Relationship not found", jpegRel);
+           
+           // Check the details
+           assertEquals(XWPFRelation.IMAGE_JPEG.getRelation(), jpegRel.getRelationshipType());
+           assertEquals("/word/document.xml", jpegRel.getSource().getPartName().toString());
+           assertEquals("/word/media/image1.jpeg", jpegRel.getTargetURI().getPath());
+
+	        XWPFPictureData pictureDataByID = doc.getPictureDataByID(jpegRel.getId());
+	        byte [] newJPEGData = pictureDataByID.getData();
+	        assertEquals(newJPEGData.length, jpegData.length);
+	        for(int i = 0; i < newJPEGData.length; i++){
+	           assertEquals(newJPEGData[i], jpegData[i]);	
+	        }
+	        
+	        // Save an re-load, check it appears
+	        doc = XWPFTestDataSamples.writeOutAndReadBack(doc);
+	        assertEquals(1, doc.getAllPictures().size());
+           assertEquals(1, doc.getAllPackagePictures().size());
 	    }
 }



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