Author: radu Date: Tue Aug 29 09:35:03 2017 New Revision: 1806544 URL: http://svn.apache.org/viewvc?rev=1806544&view=rev Log: SLING-6504 - Use-API to support more flexible way to adapt from different objects
* applied slightly modified patch from Feike Visser <fvis...@adobe.com> (closes #243) Added: sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/ResourceResolverAdapterUseObject.java sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/impl/ResourceResolverAdapterFactory.java sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/impl/ResourceResolverAdapterUseObjectImpl.java Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/package-info.java sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.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/JavaUseProvider.java?rev=1806544&r1=1806543&r2=1806544&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java (original) +++ sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java Tue Aug 29 09:35:03 2017 @@ -25,6 +25,7 @@ import javax.script.Bindings; import javax.servlet.ServletRequest; import org.apache.sling.api.SlingHttpServletRequest; +import org.apache.sling.api.adapter.Adaptable; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.scripting.SlingScriptHelper; import org.apache.sling.commons.classloader.ClassLoaderWriter; @@ -62,6 +63,7 @@ public class JavaUseProvider implements } + public static final String ADAPTABLE = "adaptable"; private static final Logger LOG = LoggerFactory.getLogger(JavaUseProvider.class); private static final Pattern JAVA_PATTERN = Pattern.compile("([[\\p{L}&&[^\\p{Lu}]]_$][\\p{L}\\p{N}_$]*\\.)*[\\p{Lu}_$][\\p{L}\\p{N}_$]*"); @@ -101,6 +103,14 @@ public class JavaUseProvider implements if (result != null) { return ProviderOutcome.success(result); } + Object adaptableCandidate = arguments.get(ADAPTABLE); + if (adaptableCandidate != null && adaptableCandidate instanceof Adaptable) { + Adaptable adaptable = (Adaptable) adaptableCandidate; + result = adaptable.adaptTo(cls); + if (result != null) { + return ProviderOutcome.success(result); + } + } result = request.adaptTo(cls); if (result == null) { Resource resource = BindingsUtils.getResource(globalBindings); Added: sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/ResourceResolverAdapterUseObject.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/ResourceResolverAdapterUseObject.java?rev=1806544&view=auto ============================================================================== --- sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/ResourceResolverAdapterUseObject.java (added) +++ sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/ResourceResolverAdapterUseObject.java Tue Aug 29 09:35:03 2017 @@ -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 org.apache.sling.scripting.sightly.testing.adaptable; + +public interface ResourceResolverAdapterUseObject { + + String getTitle(); + +} Added: sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/impl/ResourceResolverAdapterFactory.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/impl/ResourceResolverAdapterFactory.java?rev=1806544&view=auto ============================================================================== --- sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/impl/ResourceResolverAdapterFactory.java (added) +++ sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/impl/ResourceResolverAdapterFactory.java Tue Aug 29 09:35:03 2017 @@ -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. + ******************************************************************************/ +package org.apache.sling.scripting.sightly.testing.adaptable.impl; + +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.adapter.AdapterFactory; +import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.scripting.sightly.testing.adaptable.ResourceResolverAdapterUseObject; + +@Component +@Service +@Properties({ + @Property( + name = AdapterFactory.ADAPTABLE_CLASSES, + value = { + "org.apache.sling.api.resource.ResourceResolver" + } + ), + @Property( + name = AdapterFactory.ADAPTER_CLASSES, + value = { + "org.apache.sling.scripting.sightly.testing.adaptable.ResourceResolverAdapterUseObject" + } + ) +}) +public class ResourceResolverAdapterFactory implements AdapterFactory { + + @Override + public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) { + if (type == ResourceResolverAdapterUseObject.class && adaptable instanceof ResourceResolver) { + return (AdapterType) new ResourceResolverAdapterUseObjectImpl("SUCCESS"); + } + return null; + } +} Added: sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/impl/ResourceResolverAdapterUseObjectImpl.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/impl/ResourceResolverAdapterUseObjectImpl.java?rev=1806544&view=auto ============================================================================== --- sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/impl/ResourceResolverAdapterUseObjectImpl.java (added) +++ sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/impl/ResourceResolverAdapterUseObjectImpl.java Tue Aug 29 09:35:03 2017 @@ -0,0 +1,35 @@ +/******************************************************************************* + * 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.testing.adaptable.impl; + +import org.apache.sling.scripting.sightly.testing.adaptable.ResourceResolverAdapterUseObject; + +public class ResourceResolverAdapterUseObjectImpl implements ResourceResolverAdapterUseObject { + + private String title; + + public ResourceResolverAdapterUseObjectImpl(String title) { + this.title = title; + } + + @Override + public String getTitle() { + return title != null ? title : "FAILED"; + } +} Modified: sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/package-info.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/package-info.java?rev=1806544&r1=1806543&r2=1806544&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/package-info.java (original) +++ sling/trunk/bundles/scripting/sightly/testing-content/src/main/java/org/apache/sling/scripting/sightly/testing/adaptable/package-info.java Tue Aug 29 09:35:03 2017 @@ -15,7 +15,7 @@ * limitations under the License. ******************************************************************************/ -@Version("1.0.4") +@Version("1.1.0") package org.apache.sling.scripting.sightly.testing.adaptable; import org.osgi.annotation.versioning.Version; Modified: sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html?rev=1806544&r1=1806543&r2=1806544&view=diff ============================================================================== --- sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html (original) +++ sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html Tue Aug 29 09:35:03 2017 @@ -25,6 +25,7 @@ data-sly-use.resmodel="org.apache.sling.scripting.sightly.testing.models.ResourceModel" data-sly-use.reqadapt="org.apache.sling.scripting.sightly.testing.adaptable.RequestAdapterUseObject" data-sly-use.resadapt="org.apache.sling.scripting.sightly.testing.adaptable.ResourceAdapterUseObject" + data-sly-use.rradapt="${'org.apache.sling.scripting.sightly.testing.adaptable.ResourceResolverAdapterUseObject' @ adaptable = request.resourceResolver}" data-sly-use.osgi="org.apache.sling.scripting.sightly.testing.use.TestService" data-sly-use.repoNoPkg="RepoPojoNoPkg" data-sly-use.testEnum="TestEnumHolder"> @@ -37,5 +38,6 @@ <div id="osgi">${osgi.sayHello}</div> <div id="repopojo-nopkg">${repoNoPkg.FIELD}</div> <div id="test-enum">${testEnum.constantValue}</div> + <div id="rradapt">${rradapt.title}</div> </body> </html> 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=1806544&r1=1806543&r2=1806544&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 Tue Aug 29 09:35:03 2017 @@ -88,6 +88,7 @@ public class SlingSpecificsSightlyIT { String pageContent = client.getStringContent(url, 200); assertEquals("SUCCESS", HTMLExtractor.innerHTML(url, pageContent, "#resadapt")); assertEquals("SUCCESS", HTMLExtractor.innerHTML(url, pageContent, "#reqadapt")); + assertEquals("SUCCESS", HTMLExtractor.innerHTML(url, pageContent, "#rradapt")); } @Test