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(); + } } }