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 List<XSLFSlide> _slides;
|
||||||
private Map<String, XSLFSlideMaster> _masters;
|
private Map<String, XSLFSlideMaster> _masters;
|
||||||
private XSLFNotesMaster _notesMaster;
|
private XSLFNotesMaster _notesMaster;
|
||||||
|
private XSLFCommentAuthors _commentAuthors;
|
||||||
protected List<XSLFPictureData> _pictures;
|
protected List<XSLFPictureData> _pictures;
|
||||||
|
|
||||||
public XMLSlideShow() {
|
public XMLSlideShow() {
|
||||||
|
@ -125,6 +126,8 @@ public class XMLSlideShow extends POIXMLDocument {
|
||||||
_masters.put(p.getPackageRelationship().getId(), master);
|
_masters.put(p.getPackageRelationship().getId(), master);
|
||||||
} else if (p instanceof XSLFNotesMaster) {
|
} else if (p instanceof XSLFNotesMaster) {
|
||||||
_notesMaster = (XSLFNotesMaster)p;
|
_notesMaster = (XSLFNotesMaster)p;
|
||||||
|
} else if (p instanceof XSLFCommentAuthors) {
|
||||||
|
_commentAuthors = (XSLFCommentAuthors)p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,6 +222,10 @@ public class XMLSlideShow extends POIXMLDocument {
|
||||||
return slide;
|
return slide;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the Notes Master, if there is one.
|
||||||
|
* (May not be present if no notes exist)
|
||||||
|
*/
|
||||||
public XSLFNotesMaster getNotesMaster() {
|
public XSLFNotesMaster getNotesMaster() {
|
||||||
return _notesMaster;
|
return _notesMaster;
|
||||||
}
|
}
|
||||||
|
@ -233,6 +240,14 @@ public class XMLSlideShow extends POIXMLDocument {
|
||||||
public XSLFSlide[] getSlides() {
|
public XSLFSlide[] getSlides() {
|
||||||
return _slides.toArray(new XSLFSlide[_slides.size()]);
|
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.openxml4j.opc.PackageRelationship;
|
||||||
import org.apache.poi.util.Beta;
|
import org.apache.poi.util.Beta;
|
||||||
import org.apache.xmlbeans.XmlException;
|
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.CTCommentList;
|
||||||
import org.openxmlformats.schemas.presentationml.x2006.main.CmLstDocument;
|
import org.openxmlformats.schemas.presentationml.x2006.main.CmLstDocument;
|
||||||
|
|
||||||
|
@ -59,4 +60,12 @@ public class XSLFComments extends POIXMLDocumentPart {
|
||||||
public CTCommentList getCTCommentsList() {
|
public CTCommentList getCTCommentsList() {
|
||||||
return _comments;
|
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
|
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(
|
public static final XSLFRelation HYPERLINK = new XSLFRelation(
|
||||||
null,
|
null,
|
||||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",
|
"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().getTitle());
|
||||||
assertEquals(null, xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty().getValue());
|
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