mirror of https://github.com/apache/poi.git
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
d526d35ff7
commit
d51fcd4843
|
@ -72,6 +72,12 @@ public final class PackageRelationshipCollection implements
|
||||||
* Reference to the package.
|
* Reference to the package.
|
||||||
*/
|
*/
|
||||||
private OPCPackage container;
|
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.
|
* Constructor.
|
||||||
|
@ -206,14 +212,17 @@ public final class PackageRelationshipCollection implements
|
||||||
*/
|
*/
|
||||||
public PackageRelationship addRelationship(URI targetUri,
|
public PackageRelationship addRelationship(URI targetUri,
|
||||||
TargetMode targetMode, String relationshipType, String id) {
|
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) {
|
// Work up until we find a unique number (there could be gaps etc)
|
||||||
// Generate a unique ID is id parameter is null.
|
do {
|
||||||
int i = 0;
|
id = "rId" + nextRelationshipId++;
|
||||||
do {
|
} while (relationshipsByID.get(id) != null);
|
||||||
id = "rId" + ++i;
|
}
|
||||||
} while (relationshipsByID.get(id) != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
PackageRelationship rel = new PackageRelationship(container,
|
PackageRelationship rel = new PackageRelationship(container,
|
||||||
sourcePart, targetUri, targetMode, relationshipType, id);
|
sourcePart, targetUri, targetMode, relationshipType, id);
|
||||||
|
|
|
@ -254,6 +254,25 @@ public class TestRelationships extends TestCase {
|
||||||
// Check core too
|
// Check core too
|
||||||
assertEquals("/docProps/core.xml",
|
assertEquals("/docProps/core.xml",
|
||||||
pkg.getRelationshipsByType("http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties").getRelationship(0).getTargetURI().toString());
|
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