* 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.
*/
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);
// 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());
}