You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by an...@apache.org on 2021/04/08 18:39:19 UTC
[sling-whiteboard] branch master updated: Fixed an issue with
script resource resolver which I fixed by using our own System User
Resource Resolver
This is an automated email from the ASF dual-hosted git repository.
andysch pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
The following commit(s) were added to refs/heads/master by this push:
new ddd50a3 Fixed an issue with script resource resolver which I fixed by using our own System User Resource Resolver
ddd50a3 is described below
commit ddd50a32a83b581a29142aad3dec684c31bee4a6
Author: Andreas Schaefer <sc...@me.com>
AuthorDate: Thu Apr 8 11:39:03 2021 -0700
Fixed an issue with script resource resolver which I fixed by using our own System User Resource Resolver
---
.../api/DeclarativeDynamicResourceProvider.java | 5 +-
.../ddr/core/DeclarativeDynamicResourceImpl.java | 5 +-
.../DeclarativeDynamicResourceManagerService.java | 2 +-
.../DeclarativeDynamicResourceProviderHandler.java | 64 +++++++++++++---------
...g.jcr.repoinit.RepositoryInitializer-ddr.config | 1 +
.../core/DeclarativeDynamicResourceImplTest.java | 2 +-
...larativeDynamicResourceProviderHandlerTest.java | 6 +-
7 files changed, 50 insertions(+), 35 deletions(-)
diff --git a/org.apache.sling.ddr/api/src/main/java/org/apache/sling/ddr/api/DeclarativeDynamicResourceProvider.java b/org.apache.sling.ddr/api/src/main/java/org/apache/sling/ddr/api/DeclarativeDynamicResourceProvider.java
index 1602c1e..727db82 100644
--- a/org.apache.sling.ddr/api/src/main/java/org/apache/sling/ddr/api/DeclarativeDynamicResourceProvider.java
+++ b/org.apache.sling.ddr/api/src/main/java/org/apache/sling/ddr/api/DeclarativeDynamicResourceProvider.java
@@ -16,6 +16,7 @@
*/
package org.apache.sling.ddr.api;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.osgi.framework.Bundle;
@@ -33,11 +34,11 @@ public interface DeclarativeDynamicResourceProvider {
* @param bundle The Bundle where the Resource Provider is registered with
* @param targetRootPath The Parent Path of the Dynamic Resources
* @param providerRootPath The Source Folder of the Resources that provide the data
- * @param resourceResolverFactory Resource Resolver Factory that allows to create new Synthetic Resources
+ * @param resourceResolver Resource Resolver to create new Synthetic Resources
* @return
*/
long registerService(
- Bundle bundle, String targetRootPath, String providerRootPath, ResourceResolverFactory resourceResolverFactory,
+ Bundle bundle, String targetRootPath, String providerRootPath, ResourceResolver resourceResolver,
DeclarativeDynamicResourceManager declarativeDynamicResourceManager,
Map<String, List<String>> allowedDDRFilter, Map<String, List<String>> prohibitedDDRFilter, List<String> followedLinkNames
);
diff --git a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImpl.java b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImpl.java
index 6151770..eec1248 100644
--- a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImpl.java
+++ b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImpl.java
@@ -48,12 +48,11 @@ public class DeclarativeDynamicResourceImpl
* Creates a Resource that adds a Resource from a given location (source)
* into a different location (target path)
*
- * @param resourceResolver Resource Resolver to be used here
* @param source Resource that provides the data
* @param targetPath Path of the new, dynamic location of the resource
* @return The Synthetic Resource that will provide the Dynamic Resource
*/
- public static DeclarativeDynamicResource createSyntheticFromResource(ResourceResolver resourceResolver, Resource source, String targetPath, boolean mark) {
+ public static DeclarativeDynamicResource createSyntheticFromResource(Resource source, String targetPath, boolean mark) {
ValueMap properties = source.getValueMap();
Map<String,String> parameters = new HashMap<>();
String resourceSuperType = source.getResourceSuperType();
@@ -71,7 +70,7 @@ public class DeclarativeDynamicResourceImpl
metadata.setResolutionPathInfo(targetPath);
metadata.setCreationTime(System.currentTimeMillis());
return new DeclarativeDynamicResourceImpl(
- resourceResolver,
+ source.getResourceResolver(),
metadata,
source.getResourceType(),
resourceSuperType
diff --git a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceManagerService.java b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceManagerService.java
index 1c8c9cd..e9cf0ad 100644
--- a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceManagerService.java
+++ b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceManagerService.java
@@ -203,7 +203,7 @@ public class DeclarativeDynamicResourceManagerService
DeclarativeDynamicResourceProviderHandler service = new DeclarativeDynamicResourceProviderHandler();
log.info("Dynamic Target: '{}', Dynamic Provider: '{}'", ddrTargetResource, ddrProvider);
long id = service.registerService(
- bundleContext.getBundle(), ddrTargetPath, ddrProvider.getPath(), resourceResolverFactory,
+ bundleContext.getBundle(), ddrTargetPath, ddrProvider.getPath(), resourceResolver,
this,
allowedFilter, prohibitedFilter, followedLinkNames
);
diff --git a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java
index 9f0f4a9..b0c4d2c 100644
--- a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java
+++ b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java
@@ -16,10 +16,8 @@
*/
package org.apache.sling.ddr.core;
-import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.ddr.api.DeclarativeDynamicResourceManager;
import org.apache.sling.ddr.api.DeclarativeDynamicResourceProvider;
@@ -67,7 +65,7 @@ public class DeclarativeDynamicResourceProviderHandler
private String targetRootPath;
private String providerRootPath;
private boolean active;
- private ResourceResolverFactory resourceResolverFactory;
+ private ResourceResolver resourceResolver;
private DeclarativeDynamicResourceManager declarativeDynamicResourceManager;
private Map<String, List<String>> allowedDDRFilter;
private Map<String, List<String>> prohibitedDDRFilter;
@@ -80,13 +78,13 @@ public class DeclarativeDynamicResourceProviderHandler
//---------- Service Registration
public long registerService(
- Bundle bundle, String targetRootPath, String providerRootPath, ResourceResolverFactory resourceResolverFactory,
+ Bundle bundle, String targetRootPath, String providerRootPath, ResourceResolver resourceResolver,
DeclarativeDynamicResourceManager declarativeDynamicResourceManager,
Map<String, List<String>> allowedDDRFilter, Map<String, List<String>> prohibitedDDRFilter, List<String> followedLinkNames
) {
this.targetRootPath = targetRootPath;
this.providerRootPath = providerRootPath;
- this.resourceResolverFactory = resourceResolverFactory;
+ this.resourceResolver = resourceResolver;
this.declarativeDynamicResourceManager = declarativeDynamicResourceManager;
this.allowedDDRFilter = allowedDDRFilter == null ? new HashMap<String, List<String>>(): allowedDDRFilter;
this.prohibitedDDRFilter = prohibitedDDRFilter == null ? new HashMap<String, List<String>>(): prohibitedDDRFilter;
@@ -145,7 +143,7 @@ public class DeclarativeDynamicResourceProviderHandler
@Override
public Resource getResource(ResolveContext ctx, String path, ResourceContext resourceContext, Resource parent) {
- ResourceResolver resourceResolver = ctx.getResourceResolver();
+ ResourceResolver contextResourceResolver = ctx.getResourceResolver();
log.info("Get Resource, path: '{}', parent: '{}', provider root: '{}'", path, parent, providerRootPath);
String resourcePath;
if(path.startsWith(SLASH)) {
@@ -155,7 +153,7 @@ public class DeclarativeDynamicResourceProviderHandler
}
Resource answer = null;
if(resourcePath.startsWith(providerRootPath)) {
- answer = resourceResolver.getResource(resourcePath);
+ answer = getResource(contextResourceResolver, resourcePath);
} else if(resourcePath.startsWith(targetRootPath)) {
log.info("Before Getting Resource from Parent, path: '{}'", resourcePath);
ResourceProvider parentResourceProvider = ctx.getParentResourceProvider();
@@ -174,25 +172,29 @@ public class DeclarativeDynamicResourceProviderHandler
int index = resourcePath.lastIndexOf('/');
if (index > 0 && index < resourcePath.length() - 1) {
String parentPath = resourcePath.substring(0, index);
- obtainChildren(resourceResolver, parentPath, false);
+ obtainChildren(contextResourceResolver, parentPath, false);
mappedPath = mappings.get(resourcePath);
}
}
if (mappedPath != null) {
- Resource source = resourceResolver.getResource(mappedPath.getReference());
+ Resource source = getResource(
+ contextResourceResolver, mappedPath.isRef() ?
+ mappedPath.getReference():
+ mappedPath.getSource()
+ );
int index = resourcePath.lastIndexOf('/');
String parentPath = "";
if (index > 0 && index < resourcePath.length() - 1) {
parentPath = resourcePath.substring(0, index);
}
answer = createSyntheticFromResource(
- resourceResolver, source, resourcePath, parentPath.equals(targetRootPath)
+ source, resourcePath, parentPath.equals(targetRootPath)
);
}
}
}
} else {
- answer = resourceResolver.getResource(resourcePath);
+ answer = getResource(contextResourceResolver, resourcePath);
}
log.info("Return resource: '{}'", answer);
return answer;
@@ -203,7 +205,7 @@ public class DeclarativeDynamicResourceProviderHandler
Iterator<Resource> answer = null;
log.info("List Children, resolve-context: '{}', parent: '{}'", ctx, parent);
String resourcePath = parent.getPath();
- ResourceResolver resourceResolver = ctx.getResourceResolver();
+ ResourceResolver contextResourceResolver = ctx.getResourceResolver();
if(resourcePath.equals(providerRootPath)) {
// Handle the Source / Provider Path -> no DDRs here
answer = parent.listChildren();
@@ -228,19 +230,18 @@ public class DeclarativeDynamicResourceProviderHandler
log.info("Resource Path: '{}', Children List: '{}'", resourcePath, childrenList);
if (childrenList != null) {
for (Reference childPath : childrenList) {
- Resource child = resourceResolver.getResource(childPath.getReference());
+ Resource child = getResource(contextResourceResolver, childPath.getReference());
int index = childPath.getSource().lastIndexOf('/');
String childName = childPath.getSource().substring(index);
items.add(
createSyntheticFromResource(
- resourceResolver, child,
- resourcePath + childName,
+ child, resourcePath + childName,
resourcePath.equals(targetRootPath)
)
);
}
} else {
- items = obtainChildren(resourceResolver, resourcePath, true);
+ items = obtainChildren(contextResourceResolver, resourcePath, true);
}
}
answer = items.iterator();
@@ -298,7 +299,7 @@ public class DeclarativeDynamicResourceProviderHandler
return true;
}
- private List<Resource> obtainChildren(ResourceResolver resourceResolver, String resourcePath, boolean returnChildren) {
+ private List<Resource> obtainChildren(ResourceResolver contextResourceResolver, String resourcePath, boolean returnChildren) {
List<Resource> answer = new ArrayList<>();
String postfix = resourcePath.substring(targetRootPath.length());
if (!postfix.isEmpty() && postfix.charAt(0) == '/') {
@@ -308,10 +309,13 @@ public class DeclarativeDynamicResourceProviderHandler
childrenMappings.put(resourcePath, childrenList);
String targetPath = providerRootPath + SLASH + postfix;
Reference ref = mappings.get(resourcePath);
- Resource provider = ref == null || !ref.isRef() ?
- resourceResolver.getResource(targetPath) :
- resourceResolver.getResource(ref.getReference());
- ;
+ Resource provider =
+ getResource(
+ contextResourceResolver,
+ ref == null || !ref.isRef() ?
+ targetPath:
+ ref.getReference()
+ );
log.info("Provider, Path: '{}', Resource: '{}'", targetPath, provider);
if (provider != null) {
Iterator<Resource> i = provider.listChildren();
@@ -329,7 +333,7 @@ public class DeclarativeDynamicResourceProviderHandler
for (String followedLinkName : followedLinkNames) {
referencePath = properties.get(followedLinkName, String.class);
if (referencePath != null && !referencePath.isEmpty()) {
- Resource reference = resourceResolver.getResource(referencePath);
+ Resource reference = getResource(contextResourceResolver, referencePath);
if (reference != null && !reference.isResourceType(RESOURCE_TYPE_NON_EXISTING)) {
log.info("Add Path: '{}' to children list", resourcePath);
childrenList.add(new Reference(child.getPath(), referencePath));
@@ -339,7 +343,7 @@ public class DeclarativeDynamicResourceProviderHandler
if(returnChildren) {
answer.add(
createSyntheticFromResource(
- resourceResolver, reference,
+ reference,
parentPath + SLASH + child.getName(),
parentPath.equals(targetRootPath)
)
@@ -366,8 +370,7 @@ public class DeclarativeDynamicResourceProviderHandler
if(returnChildren) {
answer.add(
createSyntheticFromResource(
- resourceResolver, child,
- parentPath + SLASH + child.getName(),
+ child, parentPath + SLASH + child.getName(),
parentPath.equals(targetRootPath)
)
);
@@ -379,6 +382,17 @@ public class DeclarativeDynamicResourceProviderHandler
return answer;
}
+ private Resource getResource(ResourceResolver contextResourceResolver, String path) {
+ Resource answer = null;
+ if(contextResourceResolver != null) {
+ answer = contextResourceResolver.getResource(path);
+ }
+ if(answer == null) {
+ answer = resourceResolver.getResource(path);
+ }
+ return answer;
+ }
+
private class Reference {
private String source;
private String reference;
diff --git a/org.apache.sling.ddr/core/src/main/resources/SLING-CONTENT/apps/ddr/config/org.apache.sling.jcr.repoinit.RepositoryInitializer-ddr.config b/org.apache.sling.ddr/core/src/main/resources/SLING-CONTENT/apps/ddr/config/org.apache.sling.jcr.repoinit.RepositoryInitializer-ddr.config
index 39a45b1..0f525bd 100644
--- a/org.apache.sling.ddr/core/src/main/resources/SLING-CONTENT/apps/ddr/config/org.apache.sling.jcr.repoinit.RepositoryInitializer-ddr.config
+++ b/org.apache.sling.ddr/core/src/main/resources/SLING-CONTENT/apps/ddr/config/org.apache.sling.jcr.repoinit.RepositoryInitializer-ddr.config
@@ -24,6 +24,7 @@ scripts=[\
set ACL for ddr-serviceuser
allow jcr:read on /
end
+
"\
]
diff --git a/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImplTest.java b/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImplTest.java
index 32cdb0e..b8f2e22 100644
--- a/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImplTest.java
+++ b/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImplTest.java
@@ -62,7 +62,7 @@ public class DeclarativeDynamicResourceImplTest {
resourceResolver
);
DeclarativeDynamicResource declarativeDynamicResource = DeclarativeDynamicResourceImpl.createSyntheticFromResource(
- resourceResolver, source, dynamicResourceRoot + "/" + resourceName, true
+ source, dynamicResourceRoot + "/" + resourceName, true
);
assertEquals("Wrong DD-Resource Name", resourceName, declarativeDynamicResource.getName());
assertEquals("Wrong Resource Type", resourceType, declarativeDynamicResource.getResourceType());
diff --git a/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java b/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java
index 14e995d..d42ca9f 100644
--- a/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java
+++ b/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java
@@ -116,7 +116,7 @@ public class DeclarativeDynamicResourceProviderHandlerTest {
Resource dynamicParent = resourceResolver.getResource(dynamicResourceRoot);
declarativeDynamicResourceProviderHandler.registerService(
context.bundleContext().getBundle(), dynamicResourceRoot, confResourceRoot,
- resourceResolverFactory, null, null,
+ resourceResolver, null, null,
new HashMap<String, List<String>>() {{
put("jcr:primaryType", Arrays.asList("nt:file"));
}},
@@ -161,7 +161,7 @@ public class DeclarativeDynamicResourceProviderHandlerTest {
declarativeDynamicResourceProviderHandler.registerService(
context.bundleContext().getBundle(), dynamicResourceRoot, confResourceRoot,
- resourceResolverFactory, null, null,
+ resourceResolver, null, null,
new HashMap<String, List<String>>() {{
put("jcr:primaryType", Arrays.asList("nt:file", "nt:resource"));
}},
@@ -205,7 +205,7 @@ public class DeclarativeDynamicResourceProviderHandlerTest {
declarativeDynamicResourceProviderHandler.registerService(
context.bundleContext().getBundle(), dynamicResourceRoot, confResourceRoot,
- resourceResolverFactory, declarativeDynamicResourceManager,null, null,
+ resourceResolver, declarativeDynamicResourceManager,null, null,
Arrays.asList("sling:ddrRef")
);