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 2011/09/04 22:14:44 UTC

svn commit: r1165104 - in /poi/trunk/src/ooxml: java/org/apache/poi/xslf/usermodel/ testcases/org/apache/poi/xslf/usermodel/

Author: nick
Date: Sun Sep  4 20:14:43 2011
New Revision: 1165104

URL: http://svn.apache.org/viewvc?rev=1165104&view=rev
Log:
Start on XSLF notes master support, and add a XMLSlideShow basics test, along with making it easier to get to the common slide data via XSLFSheet

Added:
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotesMaster.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java
Modified:
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java

Added: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotesMaster.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotesMaster.java?rev=1165104&view=auto
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotesMaster.java (added)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotesMaster.java Sun Sep  4 20:14:43 2011
@@ -0,0 +1,78 @@
+/* ====================================================================
+   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.usermodel;
+
+import org.apache.poi.POIXMLDocumentPart;
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.openxml4j.opc.PackageRelationship;
+import org.apache.poi.sl.usermodel.MasterSheet;
+import org.apache.poi.util.Beta;
+import org.apache.xmlbeans.XmlException;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesMaster;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMaster;
+import org.openxmlformats.schemas.presentationml.x2006.main.NotesMasterDocument;
+import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+* Notes master object associated with this layout.
+* <p>
+*  Within a notes master slide are contained all elements
+* that describe the objects and their corresponding formatting
+* for within a presentation slide.
+* </p>
+* <p>
+* Within a nodes master slide are two main elements.
+* The cSld element specifies the common slide elements such as shapes and
+* their attached text bodies. Then the notesStyles element specifies the
+* formatting for the text within each of these shapes.
+* </p>
+ *
+ * @author Yegor Kozlov
+*/
+@Beta
+ public class XSLFNotesMaster extends XSLFSheet {
+	 private CTNotesMaster _slide;
+    private Map<String, XSLFSlideLayout> _layouts;
+    private XSLFTheme _theme;
+
+    XSLFNotesMaster() {
+        super();
+        _slide = CTNotesMaster.Factory.newInstance();
+    }
+
+    protected XSLFNotesMaster(PackagePart part, PackageRelationship rel) throws IOException, XmlException {
+        super(part, rel);
+        NotesMasterDocument doc =
+            NotesMasterDocument.Factory.parse(getPackagePart().getInputStream());
+        _slide = doc.getNotesMaster();
+        setCommonSlideData(_slide.getCSld());
+    }
+
+    @Override
+    public CTNotesMaster getXmlObject() {
+       return _slide;
+    }
+
+    @Override
+    protected String getRootElementName(){
+        return "notesMaster";
+    }
+}
\ No newline at end of file

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java?rev=1165104&r1=1165103&r2=1165104&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java Sun Sep  4 20:14:43 2011
@@ -90,12 +90,19 @@ public class XSLFRelation extends POIXML
          XSLFSlideLayout.class
    );
    
-    public static final XSLFRelation SLIDE_MASTER = new XSLFRelation(
-          "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml",
-          "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster",
-          "/ppt/slideMasters/slideMaster#.xml",
-          XSLFSlideMaster.class
-    );
+   public static final XSLFRelation SLIDE_MASTER = new XSLFRelation(
+         "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml",
+         "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster",
+         "/ppt/slideMasters/slideMaster#.xml",
+         XSLFSlideMaster.class
+   );
+
+   public static final XSLFRelation NOTES_MASTER = new XSLFRelation(
+         "application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml",
+         "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster",
+         "/ppt/notesMasters/notesMaster#.xml",
+         XSLFNotesMaster.class
+   );
 
    public static final XSLFRelation COMMENTS = new XSLFRelation(
          "application/vnd.openxmlformats-officedocument.presentationml.comments+xml",

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java?rev=1165104&r1=1165103&r2=1165104&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java Sun Sep  4 20:14:43 2011
@@ -24,11 +24,13 @@ import org.apache.poi.util.Beta;
 import org.apache.xmlbeans.XmlObject;
 import org.apache.xmlbeans.XmlOptions;
 import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTCommonSlideData;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTConnector;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTPicture;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide;
 
 import javax.xml.namespace.QName;
 import java.io.IOException;
@@ -41,11 +43,12 @@ import java.util.regex.Pattern;
 
 @Beta
 public abstract class XSLFSheet extends POIXMLDocumentPart {
+    private XSLFCommonSlideData _commonSlideData;
     private XSLFDrawing _drawing;
     private List<XSLFShape> _shapes;
     private CTGroupShape _spTree;
 
-    public XSLFSheet(){
+    public XSLFSheet() {
         super();
     }
 
@@ -53,9 +56,9 @@ public abstract class XSLFSheet extends 
         super(part, rel);
     }
 
-	public XMLSlideShow getSlideShow() {
-		return (XMLSlideShow)getParent();
-	}
+    public XMLSlideShow getSlideShow() {
+       return (XMLSlideShow)getParent();
+    }
 
     protected List<XSLFShape> buildShapes(CTGroupShape spTree){
         List<XSLFShape> shapes = new ArrayList<XSLFShape>();
@@ -79,6 +82,16 @@ public abstract class XSLFSheet extends 
 
     public abstract XmlObject getXmlObject();
 
+    public XSLFCommonSlideData getCommonSlideData() {
+       return _commonSlideData;
+    }
+    protected void setCommonSlideData(CTCommonSlideData data) {
+       if(data == null) {
+          _commonSlideData = null;
+       } else {
+          _commonSlideData = new XSLFCommonSlideData(data);
+       }
+    }
 
     private XSLFDrawing getDrawing(){
         if(_drawing == null) {

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java?rev=1165104&r1=1165103&r2=1165104&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java Sun Sep  4 20:14:43 2011
@@ -70,6 +70,7 @@ public final class XSLFSlide extends XSL
         SldDocument doc =
             SldDocument.Factory.parse(getPackagePart().getInputStream());
         _slide = doc.getSld();
+        setCommonSlideData(_slide.getCSld());
     }
 
 

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java?rev=1165104&r1=1165103&r2=1165104&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java Sun Sep  4 20:14:43 2011
@@ -43,6 +43,7 @@ public class XSLFSlideLayout extends XSL
         SldLayoutDocument doc =
             SldLayoutDocument.Factory.parse(getPackagePart().getInputStream());
         _layout = doc.getSldLayout();
+        setCommonSlideData(_layout.getCSld());
     }
 
 

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java?rev=1165104&r1=1165103&r2=1165104&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java Sun Sep  4 20:14:43 2011
@@ -64,6 +64,7 @@ import java.util.Map;
         SldMasterDocument doc =
             SldMasterDocument.Factory.parse(getPackagePart().getInputStream());
         _slide = doc.getSldMaster();
+        setCommonSlideData(_slide.getCSld());
     }
 
     @Override

Added: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java?rev=1165104&view=auto
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java (added)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java Sun Sep  4 20:14:43 2011
@@ -0,0 +1,122 @@
+/* ====================================================================
+   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.usermodel;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.xslf.usermodel.XMLSlideShow;
+import org.apache.poi.xslf.usermodel.XSLFRelation;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesMasterIdListEntry;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterIdListEntry;
+
+public class TestXMLSlideShow extends TestCase {
+   private static final POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
+   private OPCPackage pack;
+
+   protected void setUp() throws Exception {
+      pack = OPCPackage.open(slTests.openResourceAsStream("sample.pptx"));
+   }
+
+   public void testContainsMainContentType() throws Exception {
+      boolean found = false;
+      for(PackagePart part : pack.getParts()) {
+         if(part.getContentType().equals(XSLFRelation.MAIN.getContentType())) {
+            found = true;
+         }
+         //System.out.println(part);
+      }
+      assertTrue(found);
+   }
+
+   public void testOpen() throws Exception {
+      XMLSlideShow xml;
+
+      // With the finalised uri, should be fine
+      xml = new XMLSlideShow(pack);
+      // Check the core
+      assertNotNull(xml.getCTPresentation());
+
+      // Check it has some slides
+      assertNotNull(xml.getSlides().length);
+      assertTrue(xml.getSlides().length > 0);
+
+      assertNotNull(xml.getSlideMasters().length);
+      assertTrue(xml.getSlideMasters().length > 0);
+   }
+
+   public void testSlideBasics() throws Exception {
+      XMLSlideShow xml = new XMLSlideShow(pack);
+
+      // Should have 1 master
+      assertEquals(1, xml.getSlideMasters().length);
+
+      // Should have two sheets
+      assertEquals(2, xml.getSlides().length);
+
+      // Check they're as expected
+      CTSlideIdListEntry[] slides = new CTSlideIdListEntry[
+         xml.getCTPresentation().getSldIdLst().getSldIdList().size()];
+      xml.getCTPresentation().getSldIdLst().getSldIdList().toArray(slides);
+
+      assertEquals(256, slides[0].getId());
+      assertEquals(257, slides[1].getId());
+      assertEquals("rId2", slides[0].getId2());
+      assertEquals("rId3", slides[1].getId2());
+
+      // Now get those objects
+      assertNotNull(xml.getSlides()[0]);
+      assertNotNull(xml.getSlides()[0]);
+
+      // And check they have notes as expected
+      // TODO
+//    assertNotNull(xml.getNotes(slides[0]));
+//    assertNotNull(xml.getNotes(slides[1]));
+
+      // Next up look for the slide master
+      CTSlideMasterIdListEntry[] masters = new CTSlideMasterIdListEntry[
+         xml.getCTPresentation().getSldMasterIdLst().getSldMasterIdList().size()];
+      xml.getCTPresentation().getSldMasterIdLst().getSldMasterIdList().toArray(masters);
+
+      assertEquals(2147483648l, masters[0].getId());
+      assertEquals("rId1", masters[0].getId2());
+      assertNotNull(xml.getSlideMasters()[0]);
+
+      // Finally look for the notes master
+      CTNotesMasterIdListEntry notesMaster =
+         xml.getCTPresentation().getNotesMasterIdLst().getNotesMasterId();
+      assertNotNull(notesMaster);
+      // TODO Get the wrapper
+	}
+	
+   public void testMetadataBasics() throws Exception {
+      XMLSlideShow xml = new XMLSlideShow(pack);
+
+      assertNotNull(xml.getProperties().getCoreProperties());
+      assertNotNull(xml.getProperties().getExtendedProperties());
+
+      assertEquals("Microsoft Office PowerPoint", xml.getProperties().getExtendedProperties().getUnderlyingProperties().getApplication());
+      assertEquals(0, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters());
+      assertEquals(0, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getLines());
+
+      assertEquals(null, xml.getProperties().getCoreProperties().getTitle());
+      assertEquals(null, xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty().getValue());
+   }
+}



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