aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2011-09-04 21:09:20 +0000
committerNick Burch <nick@apache.org>2011-09-04 21:09:20 +0000
commitd9f9af50e2af507d6090e6ab61b37a024a8049a1 (patch)
treebf4e913f26ad4faeca7f1c1515f74ac24c1df23e
parent80741fdf37a4896985e973322a66bbaf8f52d424 (diff)
downloadpoi-d9f9af50e2af507d6090e6ab61b37a024a8049a1.tar.gz
poi-d9f9af50e2af507d6090e6ab61b37a024a8049a1.zip
XSLF initial work on comment authors, and tests
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1165111 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java15
-rw-r--r--src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFCommentAuthors.java73
-rw-r--r--src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFComments.java9
-rw-r--r--src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java7
-rw-r--r--src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java39
5 files changed, 143 insertions, 0 deletions
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 131aa90597..6682420486 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
@@ -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
index 0000000000..231dc008d6
--- /dev/null
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFCommentAuthors.java
@@ -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;
+ }
+}
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFComments.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFComments.java
index 430b1fad6c..35e8846581 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFComments.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFComments.java
@@ -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);
+ }
}
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java
index 7993d09c26..0d691e44dd 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRelation.java
@@ -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",
diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java
index fd18db1e66..61eb7cd0a3 100644
--- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java
+++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXMLSlideShow.java
@@ -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());
+ }
+ }
+ }
}