ASF Bugzilla – Attachment 24120 Details for
Bug 47668
OOXML is parsed as tree, but PPTX is a graph
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Suggested Patch on trunk revision 802651
diff.txt (text/plain), 3.71 KB, created by
Stefan Stern
on 2009-08-10 00:23:17 UTC
(
hide
)
Description:
Suggested Patch on trunk revision 802651
Filename:
MIME Type:
Creator:
Stefan Stern
Created:
2009-08-10 00:23:17 UTC
Size:
3.71 KB
patch
obsolete
>Index: src/ooxml/java/org/apache/poi/POIXMLDocument.java >=================================================================== >--- src/ooxml/java/org/apache/poi/POIXMLDocument.java (revision 802651) >+++ src/ooxml/java/org/apache/poi/POIXMLDocument.java (working copy) >@@ -17,7 +17,10 @@ > package org.apache.poi; > > import java.io.*; >+import java.util.HashMap; > import java.util.List; >+import java.util.Map; >+import java.util.Set; > > import org.apache.poi.poifs.common.POIFSConstants; > import org.apache.poi.util.IOUtils; >@@ -53,6 +56,13 @@ > this.pkg = pkg; > } > >+ public void load(POIXMLFactory factory) throws IOException, OpenXML4JException { >+ Map<PackagePart, POIXMLDocumentPart> context = new HashMap<PackagePart, POIXMLDocumentPart> (); >+ read(factory, context); >+ onDocumentRead(); >+ context.clear(); >+ } >+ > /** > * Wrapper to open a package, returning an IOException > * in the event of a problem. >@@ -207,5 +217,21 @@ > > getPackage().save(stream); > } >+ >+ /** >+ * Write out this document to an Outputstream. >+ * >+ * @param stream - the java OutputStream you wish to write the XLS to >+ * >+ * @exception IOException if anything can't be written. >+ */ >+ public final void write(OutputStream stream, Set<PackagePart> alreadySaved) throws IOException { >+ //force all children to commit their changes into the underlying OOXML Package >+ onSave(alreadySaved); > >+ //save extended and custom properties >+ getProperties().commit(); >+ >+ getPackage().save(stream); >+ } > } >Index: src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java >=================================================================== >--- src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java (revision 802651) >+++ src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java (working copy) >@@ -19,7 +19,8 @@ > import java.io.IOException; > import java.util.LinkedList; > import java.util.List; >-import java.net.URI; >+import java.util.Map; >+import java.util.Set; > > import org.apache.xmlbeans.XmlOptions; > import org.apache.poi.util.POILogger; >@@ -180,6 +181,20 @@ > } > > /** >+ * Save changes in the underlying OOXML package. >+ * Recursively fires {@link #commit()} for each package part >+ */ >+ protected final void onSave(Set<PackagePart> alreadySaved) throws IOException{ >+ commit(); >+ alreadySaved.add(this.getPackagePart()); >+ for(POIXMLDocumentPart p : relations){ >+ if (!alreadySaved.contains(p.getPackagePart())) { >+ p.onSave(alreadySaved); >+ } >+ } >+ } >+ >+ /** > * Create a new child POIXMLDocumentPart > * > * @param descriptor the part descriptor >@@ -258,6 +273,29 @@ > } > } > >+ protected final void read(POIXMLFactory factory, Map<PackagePart, POIXMLDocumentPart> context) throws OpenXML4JException { >+ PackageRelationshipCollection rels = packagePart.getRelationships(); >+ for (PackageRelationship rel : rels) { >+ if(rel.getTargetMode() == TargetMode.INTERNAL){ >+ PackagePartName relName = PackagingURIHelper.createPartName(rel.getTargetURI()); >+ PackagePart p = packagePart.getPackage().getPart(relName); >+ if(p == null) { >+ logger.log(POILogger.ERROR, "Skipped invalid entry " + rel.getTargetURI()); >+ continue; >+ } >+ if (!context.containsKey(p)) { >+ POIXMLDocumentPart childPart = factory.createDocumentPart(rel, p); >+ context.put(p, childPart); >+ childPart.parent = this; >+ addRelation(childPart); >+ if(p.hasRelationships()) childPart.read(factory, context); >+ } >+ else { >+ addRelation(context.get(p)); >+ } >+ } >+ } >+ } > > /** > * Fired when a new package part is created
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 47668
: 24120 |
24121