aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2011-05-27 14:35:44 +0000
committerNick Burch <nick@apache.org>2011-05-27 14:35:44 +0000
commit26e1eb1d5da83d632a08da3a29fa7a4d7994c669 (patch)
treec69de4caf7d3c5df86b3f9f3bf57a1fccf1fd239 /src
parente21094eaaa4b0097cfa4da5f84dfdd876eae8f2f (diff)
downloadpoi-26e1eb1d5da83d632a08da3a29fa7a4d7994c669.tar.gz
poi-26e1eb1d5da83d632a08da3a29fa7a4d7994c669.zip
Few XSLF tweaks, and add a unit test that shows that bug #51187 exists (problem with self references)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1128324 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/ooxml/java/org/apache/poi/xslf/XSLFSlideShow.java7
-rw-r--r--src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java8
-rw-r--r--src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java58
-rw-r--r--src/ooxml/testcases/org/apache/poi/xslf/XSLFTestDataSamples.java51
4 files changed, 122 insertions, 2 deletions
diff --git a/src/ooxml/java/org/apache/poi/xslf/XSLFSlideShow.java b/src/ooxml/java/org/apache/poi/xslf/XSLFSlideShow.java
index c2046afb68..05351c689c 100644
--- a/src/ooxml/java/org/apache/poi/xslf/XSLFSlideShow.java
+++ b/src/ooxml/java/org/apache/poi/xslf/XSLFSlideShow.java
@@ -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.
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
index 8e4b3f03a7..ab5c670b9f 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
@@ -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
index 0000000000..d502902a7b
--- /dev/null
+++ b/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java
@@ -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
index 0000000000..0b326c0fdf
--- /dev/null
+++ b/src/ooxml/testcases/org/apache/poi/xslf/XSLFTestDataSamples.java
@@ -0,0 +1,51 @@
+/* ====================================================================
+ 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 java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.xslf.usermodel.XMLSlideShow;
+
+/**
+ * @author Yegor Kozlov
+ */
+public class XSLFTestDataSamples {
+
+ public static XMLSlideShow openSampleDocument(String sampleName) {
+ InputStream is = POIDataSamples.getSlideShowInstance().openResourceAsStream(sampleName);
+ try {
+ return new XMLSlideShow(OPCPackage.open(is));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static XMLSlideShow writeOutAndReadBack(XMLSlideShow doc) {
+ try {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
+ doc._getXSLFSlideShow().write(baos);
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ return new XMLSlideShow(OPCPackage.open(bais));
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}