Browse Source

Improve the number of steps when generating an ID of a new relationship, and add more tests, bug #53904

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1442148 13f79535-47bb-0310-9956-ffa450edef68
tags/3.10-beta1
Nick Burch 11 years ago
parent
commit
d51fcd4843

+ 17
- 8
src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java View File

@@ -72,6 +72,12 @@ public final class PackageRelationshipCollection implements
* Reference to the package.
*/
private OPCPackage container;
/**
* The ID number of the next rID# to generate, or -1
* if that is still to be determined.
*/
private int nextRelationshipId = -1;

/**
* Constructor.
@@ -206,14 +212,17 @@ public final class PackageRelationshipCollection implements
*/
public PackageRelationship addRelationship(URI targetUri,
TargetMode targetMode, String relationshipType, String id) {

if (id == null) {
// Generate a unique ID is id parameter is null.
int i = 0;
do {
id = "rId" + ++i;
} while (relationshipsByID.get(id) != null);
}
if (id == null) {
// Generate a unique ID is id parameter is null.
if (nextRelationshipId == -1) {
nextRelationshipId = size() + 1;
}

// Work up until we find a unique number (there could be gaps etc)
do {
id = "rId" + nextRelationshipId++;
} while (relationshipsByID.get(id) != null);
}

PackageRelationship rel = new PackageRelationship(container,
sourcePart, targetUri, targetMode, relationshipType, id);

+ 19
- 0
src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestRelationships.java View File

@@ -254,6 +254,25 @@ public class TestRelationships extends TestCase {
// Check core too
assertEquals("/docProps/core.xml",
pkg.getRelationshipsByType("http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties").getRelationship(0).getTargetURI().toString());
// Add some more
partB.addExternalRelationship("http://poi.apache.org/new", "http://example/poi/new");
partB.addExternalRelationship("http://poi.apache.org/alt", "http://example/poi/alt");
// Check the relations
assertEquals(2, partA.getRelationships().size());
assertEquals(3, partB.getRelationships().size());
assertEquals("/partB", partA.getRelationship("rId1").getTargetURI().toString());
assertEquals("http://poi.apache.org/",
partA.getRelationship("rId2").getTargetURI().toString());
assertEquals("http://poi.apache.org/ss/",
partB.getRelationship("rId1").getTargetURI().toString());
assertEquals("http://poi.apache.org/new",
partB.getRelationship("rId2").getTargetURI().toString());
assertEquals("http://poi.apache.org/alt",
partB.getRelationship("rId3").getTargetURI().toString());
}



Loading…
Cancel
Save