]> source.dussan.org Git - poi.git/commitdiff
Few XSLF tweaks, and add a unit test that shows that bug #51187 exists (problem with...
authorNick Burch <nick@apache.org>
Fri, 27 May 2011 14:35:44 +0000 (14:35 +0000)
committerNick Burch <nick@apache.org>
Fri, 27 May 2011 14:35:44 +0000 (14:35 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1128324 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xslf/XSLFSlideShow.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java [new file with mode: 0644]
src/ooxml/testcases/org/apache/poi/xslf/XSLFTestDataSamples.java [new file with mode: 0644]
test-data/slideshow/51187.pptx [new file with mode: 0644]

index c2046afb681e2d584d232d3d71caec695a60fdbb..05351c689c19420083d6029d6ffb300d51a9586f 100644 (file)
@@ -22,6 +22,7 @@ import java.util.List;
 
 import org.apache.poi.POIXMLDocument;
 import org.apache.poi.util.Internal;
+import org.apache.poi.xslf.usermodel.XMLSlideShow;
 import org.apache.poi.xslf.usermodel.XSLFRelation;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
@@ -46,8 +47,9 @@ import org.openxmlformats.schemas.presentationml.x2006.main.SldDocument;
 import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument;
 
 /**
- * Experimental class to do low level processing
- *  of pptx files.
+ * Experimental class to do low level processing of pptx files.
+ * 
+ * Most users should use the higher level {@link XMLSlideShow} instead.
  *  
  * If you are using these low level classes, then you
  *  will almost certainly need to refer to the OOXML
@@ -113,6 +115,7 @@ public class XSLFSlideShow extends POIXMLDocument {
        }
        return getPresentation().getSldIdLst();
        }
+    
        /**
         * Returns the references from the presentation to its
         *  slide masters.
index 8e4b3f03a75647a4722027d39f57a9bd810de0a0..ab5c670b9f33ddb8436bd7707f2e28d76884bad6 100644 (file)
@@ -18,6 +18,8 @@ package org.apache.poi.xslf.usermodel;
 
 import java.io.IOException;
 
+import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
+import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.sl.usermodel.MasterSheet;
 import org.apache.poi.sl.usermodel.Resources;
 import org.apache.poi.sl.usermodel.Slide;
@@ -27,6 +29,7 @@ import org.apache.xmlbeans.XmlException;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdList;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterIdList;
 
 /**
  * High level representation of a ooxml slideshow.
@@ -42,6 +45,7 @@ public class XMLSlideShow implements SlideShow {
                this.slideShow = xml;
                
                // Build the main masters list - TODO
+               CTSlideMasterIdList masterIds = slideShow.getSlideMasterReferences();
                
                // Build the slides list
                CTSlideIdList slideIds = slideShow.getSlideReferences();
@@ -55,6 +59,10 @@ public class XMLSlideShow implements SlideShow {
                // Build the notes list - TODO
        }
        
+       public XMLSlideShow(OPCPackage pkg) throws XmlException, IOException, OpenXML4JException {
+          this(new XSLFSlideShow(pkg));
+       }
+       
        public XSLFSlideShow _getXSLFSlideShow() {
                return slideShow;
        }
diff --git a/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java b/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java
new file mode 100644 (file)
index 0000000..d502902
--- /dev/null
@@ -0,0 +1,58 @@
+/* ====================================================================
+   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.xslf;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.xslf.usermodel.XMLSlideShow;
+import org.apache.poi.xslf.usermodel.XSLFSlide;
+
+public class TestXSLFBugs extends TestCase {
+
+    public void test51187() throws Exception {
+       XMLSlideShow ss = XSLFTestDataSamples.openSampleDocument("51187.pptx");
+       
+       assertEquals(1, ss.getSlides().length);
+       XSLFSlide slide = ss.getSlides()[0];
+       
+       // Check the relations on it
+       // Note - rId3 is a self reference
+       PackagePart slidePart = ss._getXSLFSlideShow().getSlidePart(
+             ss._getXSLFSlideShow().getSlideReferences().getSldIdArray(0)
+       );
+       assertEquals("/ppt/slides/slide1.xml", slidePart.getPartName().toString());
+       assertEquals("/ppt/slideLayouts/slideLayout12.xml", slidePart.getRelationship("rId1").getTargetURI().toString());
+       assertEquals("/ppt/notesSlides/notesSlide1.xml", slidePart.getRelationship("rId2").getTargetURI().toString());
+       assertEquals("/ppt/slides/slide1.xml", slidePart.getRelationship("rId3").getTargetURI().toString());
+       assertEquals("/ppt/media/image1.png", slidePart.getRelationship("rId4").getTargetURI().toString());
+       
+       // Save and re-load
+       ss = XSLFTestDataSamples.writeOutAndReadBack(ss);
+       assertEquals(1, ss.getSlides().length);
+       
+       slidePart = ss._getXSLFSlideShow().getSlidePart(
+             ss._getXSLFSlideShow().getSlideReferences().getSldIdArray(0)
+       );
+       assertEquals("/ppt/slides/slide1.xml", slidePart.getPartName().toString());
+       assertEquals("/ppt/slideLayouts/slideLayout12.xml", slidePart.getRelationship("rId1").getTargetURI().toString());
+       assertEquals("/ppt/notesSlides/notesSlide1.xml", slidePart.getRelationship("rId2").getTargetURI().toString());
+       // TODO Fix this
+//       assertEquals("/ppt/slides/slide1.xml", slidePart.getRelationship("rId3").getTargetURI().toString());
+       assertEquals("/ppt/media/image1.png", slidePart.getRelationship("rId4").getTargetURI().toString());
+    }
+}
diff --git a/src/ooxml/testcases/org/apache/poi/xslf/XSLFTestDataSamples.java b/src/ooxml/testcases/org/apache/poi/xslf/XSLFTestDataSamples.java
new file mode 100644 (file)
index 0000000..0b326c0
--- /dev/null
@@ -0,0 +1,51 @@
+/* ====================================================================\r
+   Licensed to the Apache Software Foundation (ASF) under one or more\r
+   contributor license agreements.  See the NOTICE file distributed with\r
+   this work for additional information regarding copyright ownership.\r
+   The ASF licenses this file to You under the Apache License, Version 2.0\r
+   (the "License"); you may not use this file except in compliance with\r
+   the License.  You may obtain a copy of the License at\r
+\r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
+==================================================================== */\r
+package org.apache.poi.xslf;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.ByteArrayOutputStream;\r
+import java.io.InputStream;\r
+\r
+import org.apache.poi.POIDataSamples;\r
+import org.apache.poi.openxml4j.opc.OPCPackage;\r
+import org.apache.poi.xslf.usermodel.XMLSlideShow;\r
+\r
+/**\r
+ * @author Yegor Kozlov\r
+ */\r
+public class XSLFTestDataSamples {\r
+\r
+    public static XMLSlideShow openSampleDocument(String sampleName) {\r
+        InputStream is = POIDataSamples.getSlideShowInstance().openResourceAsStream(sampleName);\r
+        try {\r
+            return new XMLSlideShow(OPCPackage.open(is));\r
+        } catch (Exception e) {\r
+            throw new RuntimeException(e);\r
+        }\r
+    }\r
+\r
+    public static XMLSlideShow writeOutAndReadBack(XMLSlideShow doc) {\r
+        try {\r
+            ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);\r
+            doc._getXSLFSlideShow().write(baos);\r
+            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());\r
+            return new XMLSlideShow(OPCPackage.open(bais));\r
+        } catch (Exception e) {\r
+            throw new RuntimeException(e);\r
+        }\r
+    }\r
+}\r
diff --git a/test-data/slideshow/51187.pptx b/test-data/slideshow/51187.pptx
new file mode 100644 (file)
index 0000000..25816d5
Binary files /dev/null and b/test-data/slideshow/51187.pptx differ