]> source.dussan.org Git - poi.git/commitdiff
XSLF initial work on comment authors, and tests
authorNick Burch <nick@apache.org>
Sun, 4 Sep 2011 21:09:20 +0000 (21:09 +0000)
committerNick Burch <nick@apache.org>
Sun, 4 Sep 2011 21:09:20 +0000 (21:09 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1165111 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFCommentAuthors.java [new file with mode: 0644]
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFComments.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java

index 131aa905970d8499d999e0f83d3153794176b1e9..6682420486d6149d835e4ec63159514e42df5fe0 100644 (file)
@@ -65,6 +65,7 @@ public class XMLSlideShow  extends POIXMLDocument {
     private List<XSLFSlide> _slides;
     private Map<String, XSLFSlideMaster> _masters;
     private XSLFNotesMaster _notesMaster;
+    private XSLFCommentAuthors _commentAuthors;
     protected List<XSLFPictureData> _pictures;
 
     public XMLSlideShow() {
@@ -125,6 +126,8 @@ public class XMLSlideShow  extends POIXMLDocument {
                     _masters.put(p.getPackageRelationship().getId(), master);
                 } else if (p instanceof XSLFNotesMaster) {
                     _notesMaster = (XSLFNotesMaster)p;
+                } else if (p instanceof XSLFCommentAuthors) {
+                    _commentAuthors = (XSLFCommentAuthors)p;
                 }
             }
 
@@ -219,6 +222,10 @@ public class XMLSlideShow  extends POIXMLDocument {
         return slide;
     }
     
+    /**
+     * Return the Notes Master, if there is one.
+     * (May not be present if no notes exist)  
+     */
     public XSLFNotesMaster getNotesMaster() {
         return _notesMaster; 
     }
@@ -233,6 +240,14 @@ public class XMLSlideShow  extends POIXMLDocument {
     public XSLFSlide[] getSlides() {
         return _slides.toArray(new XSLFSlide[_slides.size()]);
     }
+    
+    /**
+     * Returns the list of comment authors, if there is one.
+     * Will only be present if at least one slide has comments on it.
+     */
+    public XSLFCommentAuthors getCommentAuthors() {
+        return _commentAuthors;
+    }
 
     /**
      *
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFCommentAuthors.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFCommentAuthors.java
new file mode 100644 (file)
index 0000000..231dc00
--- /dev/null
@@ -0,0 +1,73 @@
+/* ====================================================================
+   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 java.io.IOException;
+
+import org.apache.poi.POIXMLDocumentPart;
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.openxml4j.opc.PackageRelationship;
+import org.apache.poi.util.Beta;
+import org.apache.xmlbeans.XmlException;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTCommentAuthor;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTCommentAuthorList;
+import org.openxmlformats.schemas.presentationml.x2006.main.CmAuthorLstDocument;
+
+@Beta
+public class XSLFCommentAuthors extends POIXMLDocumentPart {
+    private final CTCommentAuthorList _authors;
+    
+    /**
+     * Create a new set of slide comments
+     */
+    XSLFCommentAuthors() {
+       super();
+       CmAuthorLstDocument doc = CmAuthorLstDocument.Factory.newInstance();
+       _authors = doc.addNewCmAuthorLst();
+    }
+
+    /**
+     * Construct a SpreadsheetML slide authors from a package part
+     *
+     * @param part the package part holding the comment authors data,
+     * the content type must be <code>application/vnd.openxmlformats-officedocument.commentAuthors+xml</code>
+     * @param rel  the package relationship holding this comment authors,
+     * the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors
+     */
+    XSLFCommentAuthors(PackagePart part, PackageRelationship rel) throws IOException, XmlException {
+        super(part, rel);
+
+        CmAuthorLstDocument doc =
+           CmAuthorLstDocument.Factory.parse(getPackagePart().getInputStream());
+        _authors = doc.getCmAuthorLst();
+    }
+    
+    public CTCommentAuthorList getCTCommentAuthorsList() {
+       return _authors;
+    }
+    
+    public CTCommentAuthor getAuthorById(long id) {
+       // TODO Have a map
+       for (CTCommentAuthor author : _authors.getCmAuthorList()) {
+          if (author.getId() == id) {
+             return author;
+          }
+       }
+       return null;
+    }
+}
index 430b1fad6c9dae73eba4475bc8749b6785b89204..35e88465817ce9721f128a959966576d9e196b8f 100644 (file)
@@ -24,6 +24,7 @@ import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
 import org.apache.poi.util.Beta;
 import org.apache.xmlbeans.XmlException;
+import org.openxmlformats.schemas.presentationml.x2006.main.CTComment;
 import org.openxmlformats.schemas.presentationml.x2006.main.CTCommentList;
 import org.openxmlformats.schemas.presentationml.x2006.main.CmLstDocument;
 
@@ -59,4 +60,12 @@ public class XSLFComments extends POIXMLDocumentPart {
     public CTCommentList getCTCommentsList() {
        return _comments;
     }
+    
+    public int getNumberOfComments() {
+       return _comments.sizeOfCmArray();
+    }
+    
+    public CTComment getCommentAt(int pos) {
+       return _comments.getCmList().get(pos);
+    }
 }
index 7993d09c26d2bfbe8b23c4344fecf5a2e597827d..0d691e44dd8dcf6d5e24d93394ec314e531e0e69 100644 (file)
@@ -112,6 +112,13 @@ public class XSLFRelation extends POIXMLRelation {
          XSLFComments.class
    );
    
+   public static final XSLFRelation COMMENT_AUTHORS = new XSLFRelation(
+         "application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml",
+         "http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors",
+         "/ppt/commentAuthors.xml",
+         XSLFCommentAuthors.class
+   );
+   
     public static final XSLFRelation HYPERLINK = new XSLFRelation(
             null,
             "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",
index fd18db1e661979c3e107328e8dd6e2b4d4b6d31a..61eb7cd0a349f6ae80a2ffcb632647d7cbf85c20 100644 (file)
@@ -119,4 +119,43 @@ public class TestXMLSlideShow extends TestCase {
       assertEquals(null, xml.getProperties().getCoreProperties().getTitle());
       assertEquals(null, xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty().getValue());
    }
+   
+   public void testComments() throws Exception {
+      // Default sample file has none
+      XMLSlideShow xml = new XMLSlideShow(pack);
+      
+      assertEquals(null, xml.getCommentAuthors());
+      
+      for (XSLFSlide slide : xml.getSlides()) {
+         assertEquals(null, slide.getComments());
+      }
+      
+      // Try another with comments
+      OPCPackage packComments = OPCPackage.open(slTests.openResourceAsStream("45545_Comment.pptx"));
+      XMLSlideShow xmlComments = new XMLSlideShow(packComments);
+      
+      // Has one author
+      assertNotNull(xmlComments.getCommentAuthors());
+      assertEquals(1, xmlComments.getCommentAuthors().getCTCommentAuthorsList().sizeOfCmAuthorArray());
+      assertEquals("XPVMWARE01", xmlComments.getCommentAuthors().getAuthorById(0).getName());
+      
+      // First two slides have comments
+      for (int i=0; i<xmlComments.getSlides().length; i++) {
+         XSLFSlide slide = xmlComments.getSlides()[i];
+         
+         if(i == 0) {
+            assertNotNull(slide.getComments());
+            assertEquals(1, slide.getComments().getNumberOfComments());
+            assertEquals("testdoc", slide.getComments().getCommentAt(0).getText());
+            assertEquals(0, slide.getComments().getCommentAt(0).getAuthorId());
+         } else if (i == 1) {
+            assertNotNull(slide.getComments());
+            assertEquals(1, slide.getComments().getNumberOfComments());
+            assertEquals("test phrase", slide.getComments().getCommentAt(0).getText());
+            assertEquals(0, slide.getComments().getCommentAt(0).getAuthorId());
+         } else {
+            assertEquals(null, slide.getComments());
+         }
+      }
+   }
 }