Author: cziegeler
Date: Tue Oct 11 16:22:14 2016
New Revision: 1764287

URL: http://svn.apache.org/viewvc?rev=1764287&view=rev
Log:
SLING-6131 : MapEntries: Invalid logic around added/changed/removed property 
names

Modified:
    
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java

Modified: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java?rev=1764287&r1=1764286&r2=1764287&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
 Tue Oct 11 16:22:14 2016
@@ -457,7 +457,7 @@ public class MapEntries implements Resou
         this.mapMaps = Collections.unmodifiableSet(new 
TreeSet<MapEntry>(newMapMaps.values()));
     }
 
-    private void doAddVanity(String path) {
+    private boolean doAddVanity(String path) {
         Resource resource = resolver.getResource(path);
         boolean needsUpdate = false;
         if (isAllVanityPathEntriesCached() || vanityCounter.longValue() < 
maxCachedVanityPathEntries) {
@@ -469,15 +469,19 @@ public class MapEntries implements Resou
         }
         if ( needsUpdate ) {
             updateBloomFilterFile = true;
+            return true;
         }
+        return false;
     }
 
-    private void doUpdateVanity(String path) {
-         doRemoveVanity(path);
-         doAddVanity(path);
+    private boolean doUpdateVanity(String path) {
+         boolean changed = doRemoveVanity(path);
+         changed |= doAddVanity(path);
+
+         return changed;
     }
 
-    private void doRemoveVanity(String path) {
+    private boolean doRemoveVanity(String path) {
         String actualContentPath = getActualContentPath(path);
         List <String> l = vanityTargets.remove(actualContentPath);
         if (l != null){
@@ -499,7 +503,9 @@ public class MapEntries implements Resou
             if (vanityCounter.longValue() > 0) {
                 vanityCounter.addAndGet(-2);
             }
+            return true;
         }
+        return false;
     }
 
     private void doUpdateVanityOrder(String path, boolean deletion) {
@@ -546,7 +552,7 @@ public class MapEntries implements Resou
         loadAlias(resource, this.aliasMap);
     }
 
-    private void doUpdateAlias(String path, boolean nodeDeletion) {
+    private boolean doUpdateAlias(String path, boolean nodeDeletion) {
         if (nodeDeletion){
             if (path.endsWith("/jcr:content")) {
                 path =  path.substring(0, path.length() - 
"/jcr:content".length());
@@ -556,6 +562,7 @@ public class MapEntries implements Resou
                     final ValueMap props = resource.adaptTo(ValueMap.class);
                     if (props.get(ResourceResolverImpl.PROP_ALIAS, 
String[].class) != null) {
                         doAddAlias(path);
+                        return true;
                     }
                 }
             }
@@ -568,6 +575,7 @@ public class MapEntries implements Resou
                     final ValueMap props = parent.adaptTo(ValueMap.class);
                     if (props.get(ResourceResolverImpl.PROP_ALIAS, 
String[].class) != null) {
                         doAddAlias(path);
+                        return true;
                     }
                 } else if (resource.getChild("jcr:content") != null) {
                     Resource jcrContent = resource.getChild("jcr:content");
@@ -575,10 +583,12 @@ public class MapEntries implements Resou
                     final ValueMap props = jcrContent.adaptTo(ValueMap.class);
                     if (props.get(ResourceResolverImpl.PROP_ALIAS, 
String[].class) != null) {
                         doAddAlias(path);
+                        return true;
                     }
                 }
             }
         }
+        return false;
     }
 
     private void doRemoveAlias(String path, boolean nodeDeletion) {
@@ -801,10 +811,18 @@ public class MapEntries implements Resou
                 } else {
 
                     if (path.startsWith(this.mapRoot)) {
-                        doUpdateConfiguration();
+                        wasResolverRefreshed = 
doUpdateConfiguration(wasResolverRefreshed);
                     } else {
-                        doUpdateVanity(path);
-                        doUpdateAlias(path, false);
+                        if ( !wasResolverRefreshed ) {
+                            wasResolverRefreshed = true;
+                            this.resolver.refresh();
+                        }
+                        boolean changed = doUpdateVanity(path);
+                        changed |= doUpdateAlias(path, false);
+
+                        if ( changed ) {
+                            this.sendChangeEvent();
+                        }
                     }
                 }
 


Reply via email to