Add XSLF access to slide comments, and fix some code comments

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1165108 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2011-09-04 20:45:10 +00:00
parent dcdb4fc768
commit 17c3ed2223
4 changed files with 92 additions and 12 deletions

View File

@ -0,0 +1,62 @@
/* ====================================================================
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.CTCommentList;
import org.openxmlformats.schemas.presentationml.x2006.main.CmLstDocument;
@Beta
public class XSLFComments extends POIXMLDocumentPart {
private final CTCommentList _comments;
/**
* Create a new set of slide comments
*/
XSLFComments() {
super();
CmLstDocument doc = CmLstDocument.Factory.newInstance();
_comments = doc.addNewCmLst();
}
/**
* Construct a SpreadsheetML slide comments from a package part
*
* @param part the package part holding the comments data,
* the content type must be <code>application/vnd.openxmlformats-officedocument.comments+xml</code>
* @param rel the package relationship holding this comments,
* the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments
*/
XSLFComments(PackagePart part, PackageRelationship rel) throws IOException, XmlException {
super(part, rel);
CmLstDocument doc =
CmLstDocument.Factory.parse(getPackagePart().getInputStream());
_comments = doc.getCmLst();
}
public CTCommentList getCTCommentsList() {
return _comments;
}
}

View File

@ -31,7 +31,7 @@ public final class XSLFNotes extends XSLFSheet {
private CTNotesSlide _notes;
/**
* Create a new slide
* Create a new notes
*/
XSLFNotes() {
super();
@ -40,12 +40,12 @@ public final class XSLFNotes extends XSLFSheet {
}
/**
* Construct a SpreadsheetML drawing from a package part
* Construct a SpreadsheetML notes from a package part
*
* @param part the package part holding the drawing data,
* the content type must be <code>application/vnd.openxmlformats-officedocument.drawing+xml</code>
* @param rel the package relationship holding this drawing,
* the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing
* @param part the package part holding the notes data,
* the content type must be <code>application/vnd.openxmlformats-officedocument.notes+xml</code>
* @param rel the package relationship holding this notes,
* the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/notes
*/
XSLFNotes(PackagePart part, PackageRelationship rel) throws IOException, XmlException {
super(part, rel);

View File

@ -108,7 +108,8 @@ public class XSLFRelation extends POIXMLRelation {
public static final XSLFRelation COMMENTS = new XSLFRelation(
"application/vnd.openxmlformats-officedocument.presentationml.comments+xml",
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",
null, null
"/ppt/comments/comment#.xml",
XSLFComments.class
);
public static final XSLFRelation HYPERLINK = new XSLFRelation(

View File

@ -38,6 +38,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.SldDocument;
public final class XSLFSlide extends XSLFSheet {
private final CTSlide _slide;
private XSLFSlideLayout _layout;
private XSLFComments _comments;
private XSLFNotes _notes;
/**
@ -50,12 +51,12 @@ public final class XSLFSlide extends XSLFSheet {
}
/**
* Construct a SpreadsheetML drawing from a package part
* Construct a SpreadsheetML slide from a package part
*
* @param part the package part holding the drawing data,
* the content type must be <code>application/vnd.openxmlformats-officedocument.drawing+xml</code>
* @param rel the package relationship holding this drawing,
* the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing
* @param part the package part holding the slide data,
* the content type must be <code>application/vnd.openxmlformats-officedocument.slide+xml</code>
* @param rel the package relationship holding this slide,
* the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide
*/
XSLFSlide(PackagePart part, PackageRelationship rel) throws IOException, XmlException {
super(part, rel);
@ -125,6 +126,22 @@ public final class XSLFSlide extends XSLFSheet {
return _layout;
}
public XSLFComments getComments() {
if(_comments == null) {
for (POIXMLDocumentPart p : getRelations()) {
if (p instanceof XSLFComments) {
_comments = (XSLFComments)p;
}
}
}
if(_comments == null) {
// This slide lacks comments
// Not all have them, sorry...
return null;
}
return _comments;
}
public XSLFNotes getNotes() {
if(_notes == null) {
for (POIXMLDocumentPart p : getRelations()) {