You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2020/04/17 00:28:12 UTC

[sling-org-apache-sling-servlets-resolver] branch issues/SLING-9365 updated: Use resource decorator to decorate scripts into the tree

This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch issues/SLING-9365
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git


The following commit(s) were added to refs/heads/issues/SLING-9365 by this push:
     new f2c2aca  Use resource decorator to decorate scripts into the tree
f2c2aca is described below

commit f2c2aca69be0d3e4d8515672a842fe44aaff1f31
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Fri Apr 17 02:27:58 2020 +0200

    Use resource decorator to decorate scripts into the tree
---
 .../resolver/internal/ScriptResourceDecorator.java | 109 +++++++++++++++++++++
 .../resolver/internal/SlingServletResolver.java    |  36 +------
 2 files changed, 110 insertions(+), 35 deletions(-)

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
new file mode 100644
index 0000000..22da829
--- /dev/null
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/ScriptResourceDecorator.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.servlets.resolver.internal;
+
+import java.util.Iterator;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceDecorator;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.servlets.resolver.internal.resource.MergingServletResourceProvider;
+import org.apache.sling.spi.resource.provider.ResolveContext;
+import org.apache.sling.spi.resource.provider.ResourceContext;
+import org.apache.sling.spi.resource.provider.ResourceProvider;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+
+@Component
+public class ScriptResourceDecorator implements ResourceDecorator
+{
+    private final MergingServletResourceProvider m_provider;
+
+    @Activate
+    public ScriptResourceDecorator(@Reference MergingServletResourceProvider provider) {
+        m_provider = provider;
+    }
+
+    @Override
+    public Resource decorate(Resource resource)
+    {
+        String path = resource.getPath();
+        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);
+            }
+        }
+        script.getResourceMetadata().putAll(resource.getResourceMetadata());
+
+        return script;
+    }
+
+    @Override
+    public Resource decorate(Resource resource, HttpServletRequest request)
+    {
+        return decorate(resource);
+    }
+
+    private Resource getResource(Resource resource, String path) {
+        return m_provider.getResource(new ResolveContext<Void>()
+        {
+            @Override
+            public ResourceResolver getResourceResolver()
+            {
+                return null;
+            }
+
+            @Override
+            public Void getProviderState()
+            {
+                return null;
+            }
+
+            @Override
+            public ResolveContext<?> getParentResolveContext()
+            {
+                return null;
+            }
+
+            @Override
+            public ResourceProvider<?> getParentResourceProvider()
+            {
+                return new ResourceProvider<Object>()
+                {
+                    @Override
+                    public Resource getResource(ResolveContext<Object> ctx, String path, ResourceContext resourceContext, Resource parent)
+                    {
+                        return resource;
+                    }
+
+                    @Override
+                    public Iterator<Resource> listChildren(ResolveContext<Object> ctx, Resource parent)
+                    {
+                        return null;
+                    }
+                };
+            }
+        }, path, null, null);
+    }
+}
diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java b/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
index 7d19056..caed253 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
@@ -166,43 +166,9 @@ public class SlingServletResolver
 
         final ResourceResolver scriptResolver = this.getScriptResourceResolver();
 
-        final SlingHttpServletRequest slingHttpServletRequest;
-
-        if (!Resource.RESOURCE_TYPE_NON_EXISTING.equals(resourceType))
-        {
-            slingHttpServletRequest = request;
-        }
-        else {
-
-            String path = request.getRequestPathInfo().getResourcePath();
-
-            Resource lookup = scriptResolver.getResource(path);
-
-            if (lookup == null)
-            {
-                int idx = path.indexOf('.');
-                if (idx != -1)
-                {
-                    path = path.substring(0, idx);
-                }
-                lookup = scriptResolver.getResource(path);
-            }
-
-            final Resource servletResource = lookup;
-
-            slingHttpServletRequest = servletResource != null ? new SlingHttpServletRequestWrapper(request) {
-                @Override
-                public Resource getResource()
-                {
-                    return servletResource;
-                }
-            } : request;
-            resourceType = slingHttpServletRequest.getResource().getResourceType();
-        }
-
         Servlet servlet = null;
         if ( resourceType != null && resourceType.length() > 0 ) {
-            servlet = resolveServletInternal(slingHttpServletRequest, null, resourceType, scriptResolver);
+            servlet = resolveServletInternal(request, null, resourceType, scriptResolver);
         }
 
         // last resort, use the core bundle default servlet