Author: asanso
Date: Thu May 22 09:19:03 2014
New Revision: 1596784

URL: http://svn.apache.org/r1596784
Log:
SLING-3505 - Improve handling of updates to mapping (alias, vanity path)

* split a method in two in order to improve extensibility  (no functional 
changes)

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=1596784&r1=1596783&r2=1596784&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
 Thu May 22 09:19:03 2014
@@ -503,73 +503,81 @@ public class MapEntries implements Event
         Collections.sort(entries);
     }
 
+    /**
+     * Load aliases Search for all nodes inheriting the sling:alias
+     * property
+     */
     private Map<String, Map<String, String>> loadAliases(final 
ResourceResolver resolver) {
         final Map<String, Map<String, String>> map = new HashMap<String, 
Map<String, String>>();
         final String queryString = "SELECT sling:alias FROM nt:base WHERE 
sling:alias IS NOT NULL";
         final Iterator<Resource> i = resolver.findResources(queryString, 
"sql");
         while (i.hasNext()) {
-            final Resource resource = i.next();
+            final Resource resource = i.next();         
+            loadAlias(resource, map);
+        }
+        return map;
+    }
+    
+    /**
+     * Load alias given a resource
+     */
+    private void loadAlias(final Resource resource, Map<String, Map<String, 
String>> map) {
+        // ignore system tree
+        if (resource.getPath().startsWith(JCR_SYSTEM_PREFIX)) {
+            log.debug("loadAliases: Ignoring {}", resource);
+            return;
+        }
 
-            // ignore system tree
-            if (resource.getPath().startsWith(JCR_SYSTEM_PREFIX)) {
-                log.debug("loadAliases: Ignoring {}", resource);
-                continue;
-            }
-
-            // require properties
-            final ValueMap props = resource.adaptTo(ValueMap.class);
-            if (props == null) {
-                log.debug("loadAliases: Ignoring {} without properties", 
resource);
-                continue;
-            }
-
-            final String resourceName;
-            final String parentPath;
-            if (resource.getName().equals("jcr:content")) {
-                final Resource containingResource = resource.getParent();
-                parentPath = containingResource.getParent().getPath();
-                resourceName = containingResource.getName();
+        // require properties
+        final ValueMap props = resource.adaptTo(ValueMap.class);
+        if (props == null) {
+            log.debug("loadAliases: Ignoring {} without properties", resource);
+            return;
+        }
+
+        final String resourceName;
+        final String parentPath;
+        if (resource.getName().equals("jcr:content")) {
+            final Resource containingResource = resource.getParent();
+            parentPath = containingResource.getParent().getPath();
+            resourceName = containingResource.getName();
+        } else {
+            parentPath = resource.getParent().getPath();
+            resourceName = resource.getName();
+        }
+        Map<String, String> parentMap = map.get(parentPath);
+        for (final String alias : props.get(ResourceResolverImpl.PROP_ALIAS, 
String[].class)) {
+            if (parentMap != null && parentMap.containsKey(alias)) {
+                log.warn("Encountered duplicate alias {} under parent path {}. 
Refusing to replace current target {} with {}.", new Object[] {
+                        alias,
+                        parentPath,
+                        parentMap.get(alias),
+                        resourceName
+                });
             } else {
-                parentPath = resource.getParent().getPath();
-                resourceName = resource.getName();
-            }
-            Map<String, String> parentMap = map.get(parentPath);
-            for (final String alias : 
props.get(ResourceResolverImpl.PROP_ALIAS, String[].class)) {
-                if (parentMap != null && parentMap.containsKey(alias)) {
-                    log.warn("Encountered duplicate alias {} under parent path 
{}. Refusing to replace current target {} with {}.", new Object[] {
-                            alias,
-                            parentPath,
-                            parentMap.get(alias),
-                            resourceName
-                    });
-                } else {
-                    // check alias
-                    boolean invalid = alias.equals("..") || alias.equals(".");
-                    if ( !invalid ) {
-                        for(final char c : alias.toCharArray()) {
-                            // invalid if / or # or a ?
-                            if ( c == '/' || c == '#' || c == '?' ) {
-                                invalid = true;
-                                break;
-                            }
+                // check alias
+                boolean invalid = alias.equals("..") || alias.equals(".");
+                if ( !invalid ) {
+                    for(final char c : alias.toCharArray()) {
+                        // invalid if / or # or a ?
+                        if ( c == '/' || c == '#' || c == '?' ) {
+                            invalid = true;
+                            break;
                         }
                     }
-                    if ( invalid ) {
-                        log.warn("Encountered invalid alias {} under parent 
path {}. Refusing to use it.",
-                                alias, parentPath);
-                    } else {
-                        if (parentMap == null) {
-                            parentMap = new HashMap<String, String>();
-                            map.put(parentPath, parentMap);
-                        }
-                        parentMap.put(alias, resourceName);
+                }
+                if ( invalid ) {
+                    log.warn("Encountered invalid alias {} under parent path 
{}. Refusing to use it.",
+                            alias, parentPath);
+                } else {
+                    if (parentMap == null) {
+                        parentMap = new HashMap<String, String>();
+                        map.put(parentPath, parentMap);
                     }
+                    parentMap.put(alias, resourceName);
                 }
             }
         }
-
-        return map;
-
     }
     
     /**


Reply via email to