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