diff options
author | Yegor Kozlov <yegor@apache.org> | 2009-08-14 17:25:22 +0000 |
---|---|---|
committer | Yegor Kozlov <yegor@apache.org> | 2009-08-14 17:25:22 +0000 |
commit | 5b8fc241bf035c779335b0720369a1077deab317 (patch) | |
tree | fac069f14c328a8f2bfb733c4926c14aa139a8ea /src/ooxml/java | |
parent | e5aac25b0000fe6bab13999b087f3e207d5be358 (diff) | |
download | poi-5b8fc241bf035c779335b0720369a1077deab317.tar.gz poi-5b8fc241bf035c779335b0720369a1077deab317.zip |
improved loading of package parts so that same logical parts correspond to the same physical instances, see followup in Bugzilla 47668
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@804303 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/java')
-rw-r--r-- | src/ooxml/java/org/apache/poi/POIXMLDocument.java | 4 | ||||
-rwxr-xr-x | src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java | 17 |
2 files changed, 12 insertions, 9 deletions
diff --git a/src/ooxml/java/org/apache/poi/POIXMLDocument.java b/src/ooxml/java/org/apache/poi/POIXMLDocument.java index a4da9c77b2..9e716e4cc8 100644 --- a/src/ooxml/java/org/apache/poi/POIXMLDocument.java +++ b/src/ooxml/java/org/apache/poi/POIXMLDocument.java @@ -192,7 +192,7 @@ public abstract class POIXMLDocument extends POIXMLDocumentPart{ } 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 abstract class POIXMLDocument extends POIXMLDocumentPart{ */ 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(); diff --git a/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java b/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java index 487bf533b8..6fccf1cb51 100755 --- a/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java +++ b/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java @@ -170,12 +170,14 @@ public class POIXMLDocumentPart { /** * 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 @@ public class POIXMLDocumentPart { * 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 @@ public class POIXMLDocumentPart { } } - 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)); } } } |