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;
-
}
/**