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
This commit is contained in:
parent
dd21676086
commit
000620ac52
@ -73,6 +73,12 @@ public final class PackageRelationshipCollection implements
|
||||
*/
|
||||
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.
|
||||
if (nextRelationshipId == -1) {
|
||||
nextRelationshipId = size() + 1;
|
||||
}
|
||||
|
||||
if (id == null) {
|
||||
// Generate a unique ID is id parameter is null.
|
||||
int i = 0;
|
||||
do {
|
||||
id = "rId" + ++i;
|
||||
} while (relationshipsByID.get(id) != null);
|
||||
}
|
||||
// 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);
|
||||
|
@ -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…
Reference in New Issue
Block a user