You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:12:16 UTC
[sling-org-apache-sling-scripting-sightly-js-provider] 04/13:
SLING-4578 - Incorrect Sightly JS Use-API script dependency resolution
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.scripting.sightly.js.provider-1.0.2
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-js-provider.git
commit 104aad1c908e13ab04d7122a858f2a24aaf37367
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Mon Apr 6 20:15:05 2015 +0000
SLING-4578 - Incorrect Sightly JS Use-API script dependency resolution
* explicitly check component inheritance when resolving script dependencies
* provided tests for Use API dependency inheritance
* made sure IT are run in the same order on all platforms
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/scripting/sightly/js-use-provider@1671688 13f79535-47bb-0310-9956-ffa450edef68
---
.../scripting/sightly/js/impl/JsEnvironment.java | 42 +++++++++++++++++++---
1 file changed, 38 insertions(+), 4 deletions(-)
diff --git a/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java b/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
index 859accc..d91b764 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
@@ -30,7 +30,9 @@ import javax.script.SimpleBindings;
import javax.script.SimpleScriptContext;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.scripting.SlingScriptHelper;
import org.apache.sling.scripting.sightly.ResourceResolution;
@@ -89,10 +91,11 @@ public class JsEnvironment {
SlingScriptHelper scriptHelper = (SlingScriptHelper) globalBindings.get(SlingBindings.SLING);
Resource componentCaller = ResourceResolution.getResourceForRequest(caller.getResourceResolver(), scriptHelper.getRequest());
if (scriptResource == null) {
- scriptResource = ResourceResolution.getResourceFromSearchPath(componentCaller, path);
- }
- if (scriptResource == null) {
- scriptResource = ResourceResolution.getResourceFromSearchPath(caller, path);
+ if (isResourceOverlay(caller, componentCaller)) {
+ scriptResource = ResourceResolution.getResourceFromSearchPath(componentCaller, path);
+ } else {
+ scriptResource = ResourceResolution.getResourceFromSearchPath(caller, path);
+ }
}
if (scriptResource == null) {
throw new SightlyException("Required script resource could not be located: " + path);
@@ -170,4 +173,35 @@ public class JsEnvironment {
}
});
}
+
+ /**
+ * Using the inheritance chain created with the help of {@code sling:resourceSuperType} this method checks if {@code resourceB}
+ * inherits from {@code resourceA}. In case {@code resourceA} is a {@code nt:file}, its parent will be used for the inheritance check.
+ *
+ * @param resourceA the base resource
+ * @param resourceB the potentially overlaid resource
+ * @return {@code true} if {@code resourceB} overlays {@code resourceB}, {@code false} otherwise
+ */
+ private boolean isResourceOverlay(Resource resourceA, Resource resourceB) {
+ String resourceBSuperType = resourceB.getResourceSuperType();
+ if (StringUtils.isNotEmpty(resourceBSuperType)) {
+ String parentResourceType = resourceA.getResourceType();
+ if ("nt:file".equals(parentResourceType)) {
+ parentResourceType = ResourceUtil.getParent(resourceA.getPath());
+ }
+ if (resourceBSuperType.equals(parentResourceType)) {
+ return true;
+ }
+ Resource parentB = resourceB.getResourceResolver().getResource(resourceBSuperType);
+ resourceBSuperType = parentB.getResourceSuperType();
+ while (!"/".equals(parentB.getPath()) && StringUtils.isNotEmpty(resourceBSuperType)) {
+ if (resourceBSuperType.equals(parentResourceType)) {
+ return true;
+ }
+ parentB = parentB.getParent();
+ resourceBSuperType = parentB.getResourceSuperType();
+ }
+ }
+ return false;
+ }
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.