You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2013/11/13 10:37:59 UTC

svn commit: r1541439 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java

Author: alexparvulescu
Date: Wed Nov 13 09:37:59 2013
New Revision: 1541439

URL: http://svn.apache.org/r1541439
Log:
OAK-685 Enforce referential integrity for referenceable nodes
 - keep track of references stored in multiple valued properties too

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java?rev=1541439&r1=1541438&r2=1541439&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java Wed Nov 13 09:37:59 2013
@@ -259,10 +259,10 @@ class ReferenceEditor extends DefaultEdi
     public void propertyChanged(PropertyState before, PropertyState after) {
         if (before != null) {
             if (before.getType() == REFERENCE) {
-                put(rmRefs, before.getValue(STRING), getPath());
+                put(rmRefs, before.getValue(STRINGS), getPath());
             }
             if (before.getType() == WEAKREFERENCE) {
-                put(rmWeakRefs, before.getValue(STRING), getPath());
+                put(rmWeakRefs, before.getValue(STRINGS), getPath());
             }
             if (JCR_UUID.equals(before.getName())) {
                 // node remove + add -> changed uuid
@@ -274,10 +274,10 @@ class ReferenceEditor extends DefaultEdi
         }
         if (after != null) {
             if (after.getType() == REFERENCE) {
-                put(newRefs, after.getValue(STRING), getPath());
+                put(newRefs, after.getValue(STRINGS), getPath());
             }
             if (after.getType() == WEAKREFERENCE) {
-                put(newWeakRefs, after.getValue(STRING), getPath());
+                put(newWeakRefs, after.getValue(STRINGS), getPath());
             }
         }
     }
@@ -361,14 +361,16 @@ class ReferenceEditor extends DefaultEdi
         return false;
     }
 
-    private static void put(Map<String, Set<String>> map, String key,
-            String value) {
-        Set<String> values = map.get(key);
-        if (values == null) {
-            values = newHashSet();
+    private static void put(Map<String, Set<String>> map,
+            Iterable<String> keys, String value) {
+        for (String key : keys) {
+            Set<String> values = map.get(key);
+            if (values == null) {
+                values = newHashSet();
+            }
+            values.add(value);
+            map.put(key, values);
         }
-        values.add(value);
-        map.put(key, values);
     }
 
     private static void set(NodeBuilder child, String name, Set<String> add,