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