private List<XSLFSlide> _slides;
private Map<String, XSLFSlideMaster> _masters;
private XSLFNotesMaster _notesMaster;
+ private XSLFCommentAuthors _commentAuthors;
protected List<XSLFPictureData> _pictures;
public XMLSlideShow() {
_masters.put(p.getPackageRelationship().getId(), master);
} else if (p instanceof XSLFNotesMaster) {
_notesMaster = (XSLFNotesMaster)p;
+ } else if (p instanceof XSLFCommentAuthors) {
+ _commentAuthors = (XSLFCommentAuthors)p;
}
}
return slide;
}
+ /**
+ * Return the Notes Master, if there is one.
+ * (May not be present if no notes exist)
+ */
public XSLFNotesMaster getNotesMaster() {
return _notesMaster;
}
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;
+ }
/**
*
--- /dev/null
+/* ====================================================================
+ 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;
+ }
+}
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;
public CTCommentList getCTCommentsList() {
return _comments;
}
+
+ public int getNumberOfComments() {
+ return _comments.sizeOfCmArray();
+ }
+
+ public CTComment getCommentAt(int pos) {
+ return _comments.getCmList().get(pos);
+ }
}
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",
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());
+ }
+ }
+ }
}