]> source.dussan.org Git - poi.git/commitdiff
Improve the number of steps when generating an ID of a new relationship, and add...
authorNick Burch <nick@apache.org>
Mon, 4 Feb 2013 15:06:46 +0000 (15:06 +0000)
committerNick Burch <nick@apache.org>
Mon, 4 Feb 2013 15:06:46 +0000 (15:06 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1442148 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java
src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestRelationships.java

index a5a40990c28b4a004d66a82daa812f8741699799..e157176ebef516d747e8b0fa025a89b6f7eb1e12 100644 (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);
index 510377a9e0fad48c66760a6f4a934cc7e8ea02d0..f329356704dfb54254efb596f85fe2e8d1971f3f 100644 (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());
     }