Author: radu
Date: Thu Jun 30 15:35:37 2016
New Revision: 1750818
URL: http://svn.apache.org/viewvc?rev=1750818&view=rev
Log:
SLING-5813 - Allow a Resource to be used as a Sightly Use-Object with
data-sly-use
* Added a new UseProvider for Resource objects
* Added tests
(applied slightly modified patch from Vlad Băilescu; closes #151)
Added:
sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ResourceUseProvider.java
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/UseSomeJava.java
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/resource.html
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-someecma.ecma
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-somefile.html
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-somejs.js
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-sometemplate.html
Modified:
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/sightly.json
sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java
Added:
sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ResourceUseProvider.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ResourceUseProvider.java?rev=1750818&view=auto
==============================================================================
---
sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ResourceUseProvider.java
(added)
+++
sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ResourceUseProvider.java
Thu Jun 30 15:35:37 2016
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * 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.scripting.sightly.impl.engine.extension.use;
+
+import javax.script.Bindings;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Properties;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceUtil;
+import org.apache.sling.scripting.sightly.impl.utils.BindingsUtils;
+import org.apache.sling.scripting.sightly.render.RenderContext;
+import org.apache.sling.scripting.sightly.use.ProviderOutcome;
+import org.apache.sling.scripting.sightly.use.UseProvider;
+import org.osgi.framework.Constants;
+
+@Component(
+ metatype = true,
+ label = "Apache Sling Scripting Sightly Resource Use Provider",
+ description = "The Java Use Provider is responsible for instantiating
resource objects."
+)
+@Service(UseProvider.class)
+@Properties({
+ @Property(
+ name = Constants.SERVICE_RANKING,
+ label = "Service Ranking",
+ description = "The Service Ranking value acts as the priority
with which this Use Provider is queried to return an " +
+ "Use-object. A higher value represents a higher
priority.",
+ intValue = -10,
+ propertyPrivate = false
+ )
+})
+public class ResourceUseProvider implements UseProvider {
+
+ @Override
+ public ProviderOutcome provide(String identifier, RenderContext
renderContext, Bindings arguments) {
+ Bindings globalBindings = renderContext.getBindings();
+ SlingHttpServletRequest request =
BindingsUtils.getRequest(globalBindings);
+ String path = normalizePath(request, identifier);
+ try {
+ Resource resource =
request.getResourceResolver().getResource(path);
+ if (resource != null &&
!ResourceUtil.isNonExistingResource(resource)) {
+ return ProviderOutcome.success(resource);
+ }
+ } catch (Exception e) {
+ return ProviderOutcome.failure(e);
+ }
+ return ProviderOutcome.failure();
+ }
+
+ private String normalizePath(SlingHttpServletRequest request, String path)
{
+ if (!path.startsWith("/")) {
+ path = request.getResource().getPath() + "/" + path;
+ }
+ return ResourceUtil.normalize(path);
+ }
+}
Added:
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/UseSomeJava.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/UseSomeJava.java?rev=1750818&view=auto
==============================================================================
---
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/UseSomeJava.java
(added)
+++
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/UseSomeJava.java
Thu Jun 30 15:35:37 2016
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * 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 apps.sightly.scripts.use;
+
+public class UseSomeJava {
+
+ public static final String data = "foobar-somejava";
+
+}
Added:
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/resource.html
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/resource.html?rev=1750818&view=auto
==============================================================================
---
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/resource.html
(added)
+++
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/resource.html
Thu Jun 30 15:35:37 2016
@@ -0,0 +1,54 @@
+<!--/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/-->
+<div id="someresource" data-sly-use.someresource="/sightly/use-someresource">
+ <div class="name">${someresource.name}</div>
+ <div class="path">${someresource.path}</div>
+ <div class="type">${someresource.resourceType}</div>
+ <div class="data">${someresource.data}</div>
+</div>
+<div id="somefolder" data-sly-use.somefolder="/sightly/use-somefolder">
+ <div class="name">${somefolder.name}</div>
+ <div class="path">${somefolder.path}</div>
+ <div class="resourceType">${somefolder.resourceType}</div>
+ <div class="data">${somefolder.data}</div>
+</div>
+<div id="sometemplate" data-sly-use.sometemplate="use-sometemplate.html">
+ <div class="name">${sometemplate.name}</div>
+ <div class="path">${sometemplate.path}</div>
+ <div class="resourceType">${sometemplate.resourceType}</div>
+ <div class="data"><sly data-sly-call="${sometemplate.data}" /></div>
+</div>
+<div id="somejava" data-sly-use.somejava="UseSomeJava">
+ <div class="name">${somejava.name}</div>
+ <div class="path">${somejava.path}</div>
+ <div class="resourceType">${somejava.resourceType}</div>
+ <div class="data">${somejava.data}</div>
+</div>
+<div id="somejs" data-sly-use.somejs="use-somejs.js">
+ <div class="name">${somejs.name}</div>
+ <div class="path">${somejs.path}</div>
+ <div class="resourceType">${somejs.resourceType}</div>
+ <div class="data">${somejs.data}</div>
+</div>
+<div id="someecma" data-sly-use.someecma="use-someecma.ecma">
+ <div class="name">${someecma.name}</div>
+ <div class="path">${someecma.path}</div>
+ <div class="resourceType">${someecma.resourceType}</div>
+ <div class="data">${someecma}</div>
+</div>
Added:
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-someecma.ecma
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-someecma.ecma?rev=1750818&view=auto
==============================================================================
---
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-someecma.ecma
(added)
+++
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-someecma.ecma
Thu Jun 30 15:35:37 2016
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * 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.
+
******************************************************************************/
+ 'foobar-someecma';
\ No newline at end of file
Added:
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-somefile.html
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-somefile.html?rev=1750818&view=auto
==============================================================================
---
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-somefile.html
(added)
+++
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-somefile.html
Thu Jun 30 15:35:37 2016
@@ -0,0 +1,19 @@
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+foobar-somefile
\ No newline at end of file
Added:
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-somejs.js
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-somejs.js?rev=1750818&view=auto
==============================================================================
---
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-somejs.js
(added)
+++
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-somejs.js
Thu Jun 30 15:35:37 2016
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * 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.
+
******************************************************************************/
+use(function () {
+ return {
+ data: "foobar-somejs"
+ }
+});
\ No newline at end of file
Added:
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-sometemplate.html
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-sometemplate.html?rev=1750818&view=auto
==============================================================================
---
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-sometemplate.html
(added)
+++
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use-sometemplate.html
Thu Jun 30 15:35:37 2016
@@ -0,0 +1,19 @@
+<!--/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/-->
+<template data-sly-template.data=" @ ">foobar-sometemplate</template>
\ No newline at end of file
Modified:
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/sightly.json
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/sightly.json?rev=1750818&r1=1750817&r2=1750818&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/sightly.json
(original)
+++
sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/sightly.json
Thu Jun 30 15:35:37 2016
@@ -46,7 +46,15 @@
"sling:resourceType": "/apps/sightly/scripts/update"
},
"requestattributes": {
- "jcr:primaryType": "nt:unstructured",
+ "jcr:primaryType" : "nt:unstructured",
"sling:resourceType": "/apps/sightly/scripts/requestattributes"
+ },
+ "use-someresource": {
+ "jcr:primaryType": "nt:unstructured",
+ "data": "foobar-someresource"
+ },
+ "use-somefolder": {
+ "jcr:primaryType": "sling:Folder",
+ "data": "foobar-somefolder"
}
}
Modified:
sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java?rev=1750818&r1=1750817&r2=1750818&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java
(original)
+++
sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java
Thu Jun 30 15:35:37 2016
@@ -59,7 +59,7 @@ public class SlingSpecificsSightlyIT {
private static final String SLING_SCRIPT_UPDATE = "/sightly/update.html";
private static final String SLING_REQUEST_ATTRIBUTES =
"/sightly/requestattributes.html";
private static final String SLING_REQUEST_ATTRIBUTES_INCLUDE =
"/sightly/requestattributes.include.html";
-
+ private static final String SLING_RESOURCE_USE =
"/sightly/use.resource.html";
@BeforeClass
public static void init() {
@@ -259,6 +259,18 @@ public class SlingSpecificsSightlyIT {
assertEquals("", HTMLExtractor.innerHTML(url, pageContent,
"#attrs-unset"));
}
+ @Test
+ public void testResourceUse() {
+ String url = launchpadURL + SLING_RESOURCE_USE;
+ String pageContent = client.getStringContent(url, 200);
+ assertEquals("foobar-someresource", HTMLExtractor.innerHTML(url,
pageContent, "#someresource .data"));
+ assertEquals("foobar-somefolder", HTMLExtractor.innerHTML(url,
pageContent, "#somefolder .data"));
+ assertEquals("foobar-sometemplate", HTMLExtractor.innerHTML(url,
pageContent, "#sometemplate .data"));
+ assertEquals("foobar-somejava", HTMLExtractor.innerHTML(url,
pageContent, "#somejava .data"));
+ assertEquals("foobar-somejs", HTMLExtractor.innerHTML(url,
pageContent, "#somejs .data"));
+ assertEquals("foobar-someecma", HTMLExtractor.innerHTML(url,
pageContent, "#someecma .data"));
+ }
+
private void uploadFile(String fileName, String serverFileName, String
url) throws IOException {
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(launchpadURL + url);