SLING-9365: optimize the path lookup
diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java
index 035316f..c8880d1 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java
@@ -45,22 +45,27 @@
@Override
public Resource decorate(Resource resource) {
String path = ResourceUtil.normalize(resource.getPath());
- String resolutionPath = resource.getResourceMetadata().getResolutionPath();
- Resource script = getResource(resource, path);
- if (script == resource && Resource.RESOURCE_TYPE_NON_EXISTING.equals(resource.getResourceType())) {
- int idx = path.indexOf('.');
- if (idx != -1) {
- path = path.substring(0, idx);
- script = getResource(resource, path);
- resolutionPath = path;
+ if (this.provider.isRootOf(path)) {
+ String resolutionPath = resource.getResourceMetadata().getResolutionPath();
+ Resource script = getResource(resource, path);
+ if (script == resource && Resource.RESOURCE_TYPE_NON_EXISTING.equals(resource.getResourceType())) {
+ int idx = path.indexOf('.');
+ if (idx != -1) {
+ path = path.substring(0, idx);
+ script = getResource(resource, path);
+ resolutionPath = path;
+ }
}
- }
- if (script != resource) {
- script.getResourceMetadata().putAll(resource.getResourceMetadata());
- script.getResourceMetadata().setResolutionPath(resolutionPath);
- }
+ if (script != resource) {
+ script.getResourceMetadata().putAll(resource.getResourceMetadata());
+ script.getResourceMetadata().setResolutionPath(resolutionPath);
+ }
- return script;
+ return script;
+ }
+ else {
+ return resource;
+ }
}
@Override
diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java
index a73dce0..05ebd46 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/resource/MergingServletResourceProvider.java
@@ -123,6 +123,20 @@
}
}
+ public boolean isRootOf(String path) {
+ if (path != null && path.startsWith("/")) {
+ int idx = path.indexOf('/', 1);
+ if (idx != -1) {
+ path = path.substring(0, idx);
+ return tree.get().containsKey(path);
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+
public Resource getResource(ResolveContext resolveContext, String path) {
Resource wrapped = null;
final ResourceProvider parentProvider = resolveContext.getParentResourceProvider();