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:
Nick Burch 2011-09-04 21:09:20 +00:00
parent dd69223e2b
commit 27304042f8
5 changed files with 143 additions and 0 deletions

View File

@ -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;
} }
@ -234,6 +241,14 @@ public class XMLSlideShow extends POIXMLDocument {
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;
}
/** /**
* *
* @param newIndex 0-based index of the slide * @param newIndex 0-based index of the slide

View File

@ -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;
}
}

View File

@ -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);
}
} }

View File

@ -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",

View File

@ -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());
}
}
}
} }