You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2017/03/19 21:43:57 UTC

svn commit: r1787663 - in /poi/trunk: src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java test-data/slideshow/60810.pptx

Author: centic
Date: Sun Mar 19 21:43:57 2017
New Revision: 1787663

URL: http://svn.apache.org/viewvc?rev=1787663&view=rev
Log:
Bug 60810: Check for duplicate relation-names for notes similar to the fix for slides themselves in bug 55791

Added:
    poi/trunk/test-data/slideshow/60810.pptx
Modified:
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java?rev=1787663&r1=1787662&r2=1787663&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java Sun Mar 19 21:43:57 2017
@@ -300,6 +300,32 @@ implements SlideShow<XSLFShape,XSLFTextP
 
         Integer slideIndex = XSLFRelation.SLIDE.getFileNameIndex(slide);
 
+        // Bug 55791: We also need to check that the resulting file name is not already taken
+        // this can happen when removing/adding slides
+        while(true) {
+            String slideName = XSLFRelation.NOTES.getFileName(slideIndex);
+            boolean found = false;
+            for (POIXMLDocumentPart relation : getRelations()) {
+                if (relation.getPackagePart() != null &&
+                    slideName.equals(relation.getPackagePart().getPartName().getName())) {
+                    // name is taken => try next one
+                    found = true;
+                    break;
+                }
+            }
+
+            if(!found &&
+                getPackage().getPartsByName(Pattern.compile(Pattern.quote(slideName))).size() > 0) {
+                // name is taken => try next one
+                found = true;
+            }
+
+            if (!found) {
+                break;
+            }
+            slideIndex++;
+        }
+
         // add notes slide to presentation
         XSLFNotes notesSlide = (XSLFNotes) createRelationship
             (XSLFRelation.NOTES, XSLFFactory.getInstance(), slideIndex);

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java?rev=1787663&r1=1787662&r2=1787663&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java Sun Mar 19 21:43:57 2017
@@ -16,27 +16,6 @@
 ==================================================================== */
 package org.apache.poi.xslf;
 
-import static org.apache.poi.POITestCase.assertContains;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.Rectangle2D;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.util.Collection;
-
-import javax.imageio.ImageIO;
-
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.POIXMLDocumentPart;
 import org.apache.poi.POIXMLDocumentPart.RelationPart;
@@ -50,27 +29,28 @@ import org.apache.poi.sl.usermodel.Pictu
 import org.apache.poi.sl.usermodel.ShapeType;
 import org.apache.poi.sl.usermodel.VerticalAlignment;
 import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
-import org.apache.poi.xslf.usermodel.XMLSlideShow;
-import org.apache.poi.xslf.usermodel.XSLFAutoShape;
-import org.apache.poi.xslf.usermodel.XSLFGroupShape;
-import org.apache.poi.xslf.usermodel.XSLFHyperlink;
-import org.apache.poi.xslf.usermodel.XSLFPictureData;
-import org.apache.poi.xslf.usermodel.XSLFPictureShape;
-import org.apache.poi.xslf.usermodel.XSLFRelation;
-import org.apache.poi.xslf.usermodel.XSLFShape;
-import org.apache.poi.xslf.usermodel.XSLFSlide;
-import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
-import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
-import org.apache.poi.xslf.usermodel.XSLFTable;
-import org.apache.poi.xslf.usermodel.XSLFTableCell;
-import org.apache.poi.xslf.usermodel.XSLFTableRow;
-import org.apache.poi.xslf.usermodel.XSLFTextParagraph;
-import org.apache.poi.xslf.usermodel.XSLFTextRun;
+import org.apache.poi.xslf.usermodel.*;
 import org.junit.Ignore;
 import org.junit.Test;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTOuterShadowEffect;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
 
+import javax.imageio.ImageIO;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.util.Collection;
+
+import static org.apache.poi.POITestCase.assertContains;
+import static org.junit.Assert.*;
+
 
 public class TestXSLFBugs {
     private static final POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
@@ -109,6 +89,7 @@ public class TestXSLFBugs {
     
     private static void assertRelation(XSLFSlide slide, String exp, String rId) {
         POIXMLDocumentPart pd = (rId != null) ? slide.getRelationById(rId) : slide;
+        assertNotNull(pd);
         assertEquals(exp, pd.getPackagePart().getPartName().getName());
     }
     
@@ -147,8 +128,9 @@ public class TestXSLFBugs {
        for(RelationPart p : rels) {
           if(p.getRelationship().getRelationshipType().equals(XSLFRelation.HYPERLINK.getRelation())) {
              URI target = p.getRelationship().getTargetURI();
-             
-             if(target.getFragment().equals("_ftn1") ||
+
+              //noinspection StatementWithEmptyBody
+              if(target.getFragment().equals("_ftn1") ||
                 target.getFragment().equals("_ftnref1")) {
                 // Good
              } else {
@@ -624,4 +606,22 @@ public class TestXSLFBugs {
         dst.close();
         src.close();
     }
+
+    @Test
+    public void test60810() throws IOException {
+        XMLSlideShow ppt = XSLFTestDataSamples.openSampleDocument("60810.pptx");
+        for(XSLFSlide slide : ppt.getSlides()) {
+            XSLFNotes notesSlide = ppt.getNotesSlide(slide);
+            assertNotNull(notesSlide);
+        }
+
+        /*OutputStream stream = new FileOutputStream("/tmp/test.pptx");
+        try {
+            ppt.write(stream);
+        } finally {
+            stream.close();
+        }*/
+
+        ppt.close();
+    }
 }
\ No newline at end of file

Added: poi/trunk/test-data/slideshow/60810.pptx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/slideshow/60810.pptx?rev=1787663&view=auto
==============================================================================
Binary files poi/trunk/test-data/slideshow/60810.pptx (added) and poi/trunk/test-data/slideshow/60810.pptx Sun Mar 19 21:43:57 2017 differ



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