mirror of https://github.com/apache/poi.git
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
This commit is contained in:
parent
80741fdf37
commit
d9f9af50e2
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue