You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2012/02/06 11:57:03 UTC

svn commit: r1240974 - /sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java

Author: fmeschbe
Date: Mon Feb  6 10:57:03 2012
New Revision: 1240974

URL: http://svn.apache.org/viewvc?rev=1240974&view=rev
Log:
SLING-2403 Ignore /jcr:system subtree events and vanity paths

Modified:
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java?rev=1240974&r1=1240973&r2=1240974&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java Mon Feb  6 10:57:03 2012
@@ -65,6 +65,8 @@ public class MapEntries implements Event
 
     public static final String DEFAULT_MAP_ROOT = "/etc/map";
 
+    private static final String JCR_SYSTEM_PREFIX = "/jcr:system/";
+
     static final String ANY_SCHEME_HOST = "[^/]+/[^/]+";
 
     /** default log */
@@ -174,10 +176,10 @@ public class MapEntries implements Event
      * has been null-ed after having been triggered.
      */
     void init() {
-        while (MapEntries.this.resolver != null) {
+        while (this.resolver != null) {
             try {
-                MapEntries.this.initTrigger.acquire();
-                MapEntries.this.doInit();
+                this.initTrigger.acquire();
+                this.doInit();
             } catch (InterruptedException ie) {
                 // just continue acquisition
             }
@@ -307,21 +309,30 @@ public class MapEntries implements Event
      * appropriate events.
      */
     public void handleEvent(final Event event) {
+
+        // check for path (used for some tests below
+        final Object p = event.getProperty(SlingConstants.PROPERTY_PATH);
+        final String path;
+        if (p instanceof String) {
+            path = (String) p;
+        } else {
+            // not a string path or null, ignore this event
+            return;
+        }
+
+        // don't care for system area
+        if (path.startsWith(JCR_SYSTEM_PREFIX)) {
+            return;
+        }
+
         // check whether a remove event has an influence on vanity paths
         boolean doInit = true;
-        if (SlingConstants.TOPIC_RESOURCE_REMOVED.equals(event.getTopic())) {
+        if (SlingConstants.TOPIC_RESOURCE_REMOVED.equals(event.getTopic()) && !path.startsWith(this.mapRoot)) {
             doInit = false;
-            final Object p = event.getProperty(SlingConstants.PROPERTY_PATH);
-            if (p instanceof String) {
-                final String path = (String) p;
-                doInit = path.startsWith(this.mapRoot);
-                if (!doInit) {
-                    for (String target : this.vanityTargets) {
-                        if (target.startsWith(path)) {
-                            doInit = true;
-                            break;
-                        }
-                    }
+            for (String target : this.vanityTargets) {
+                if (target.startsWith(path)) {
+                    doInit = true;
+                    break;
                 }
             }
         }
@@ -419,8 +430,17 @@ public class MapEntries implements Event
             queryString, "sql");
         while (i.hasNext()) {
             Resource resource = i.next();
+
+            // ignore system tree
+            if (resource.getPath().startsWith(JCR_SYSTEM_PREFIX)) {
+                log.debug("loadVanityPaths: Ignoring {}", resource);
+                continue;
+            }
+
+            // require properties
             ValueMap row = resource.adaptTo(ValueMap.class);
             if (row == null) {
+                log.debug("loadVanityPaths: Ignoring {} without properties", resource);
                 continue;
             }