You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2009/08/14 19:25:22 UTC

svn commit: r804303 - in /poi/trunk/src/ooxml/java/org/apache/poi: POIXMLDocument.java POIXMLDocumentPart.java

Author: yegor
Date: Fri Aug 14 17:25:22 2009
New Revision: 804303

URL: http://svn.apache.org/viewvc?rev=804303&view=rev
Log:
improved loading of package parts so that same logical parts correspond to the same physical instances, see followup in Bugzilla 47668

Modified:
    poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocument.java
    poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java

Modified: poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocument.java?rev=804303&r1=804302&r2=804303&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocument.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocument.java Fri Aug 14 17:25:22 2009
@@ -192,7 +192,7 @@
     }
 
     protected final void load(POIXMLFactory factory) throws IOException {
-    	Map<PackageRelationship, POIXMLDocumentPart> context = new HashMap<PackageRelationship, POIXMLDocumentPart>();
+    	Map<PackagePart, POIXMLDocumentPart> context = new HashMap<PackagePart, POIXMLDocumentPart>();
         try {
             read(factory, context);
         } catch (OpenXML4JException e){
@@ -211,7 +211,7 @@
      */
     public final void write(OutputStream stream) throws IOException {
         //force all children to commit their changes into the underlying OOXML Package
-        Set<PackageRelationship> context = new HashSet<PackageRelationship>();
+        Set<PackagePart> context = new HashSet<PackagePart>();
         onSave(context);
         context.clear();
 

Modified: poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java?rev=804303&r1=804302&r2=804303&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java Fri Aug 14 17:25:22 2009
@@ -170,12 +170,14 @@
     /**
      * Save changes in the underlying OOXML package.
      * Recursively fires {@link #commit()} for each package part
+     *
+     * @param alreadySaved    context set containing already visited nodes
      */
-    protected final void onSave(Set<PackageRelationship> alreadySaved) throws IOException{
+    protected final void onSave(Set<PackagePart> alreadySaved) throws IOException{
     	commit();
-    	alreadySaved.add(this.getPackageRelationship());
+    	alreadySaved.add(this.getPackagePart());
     	for(POIXMLDocumentPart p : relations){
-    		if (!alreadySaved.contains(p.getPackageRelationship())) {
+            if (!alreadySaved.contains(p.getPackagePart())) {
     			p.onSave(alreadySaved);
     		}
     	}
@@ -229,8 +231,9 @@
      * using the specified factory
      *
      * @param factory   the factory object that creates POIXMLFactory instances
+     * @param context   context map containing already visited noted keyed by targetURI
      */
-    protected void read(POIXMLFactory factory, Map<PackageRelationship, POIXMLDocumentPart> context) throws OpenXML4JException {
+    protected void read(POIXMLFactory factory, Map<PackagePart, POIXMLDocumentPart> context) throws OpenXML4JException {
     	PackageRelationshipCollection rels = packagePart.getRelationships();
     	for (PackageRelationship rel : rels) {
     		if(rel.getTargetMode() == TargetMode.INTERNAL){
@@ -251,17 +254,17 @@
                     }
                 }
 
-                if (!context.containsKey(rel)) {
+                if (!context.containsKey(p)) {
     				POIXMLDocumentPart childPart = factory.createDocumentPart(rel, p);
     				childPart.parent = this;
     				addRelation(childPart);
                     if(p != null){
-                        context.put(rel, childPart);
+                        context.put(p, childPart);
                         if(p.hasRelationships()) childPart.read(factory, context);
                     }
     			}
     			else {
-    				addRelation(context.get(rel));
+    				addRelation(context.get(p));
     			}
     		}
     	}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org