This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.scripting.thymeleaf-0.0.6 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-thymeleaf.git
commit 6ab46f9ef878a3fa235d1d97dedf29f0d638a931 Author: Oliver Lietz <[email protected]> AuthorDate: Mon Feb 23 14:18:01 2015 +0000 SLING-4297 add a dialect and processors to provide out-of-the-box support for a Sling Include * improve include, drop resource and path attributes git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/scripting/thymeleaf@1661679 13f79535-47bb-0310-9956-ffa450edef68 --- .../thymeleaf/internal/dialect/SlingDialect.java | 4 -- .../processor/attr/SlingIncludeAttrProcessor.java | 51 +++++++++++++++------- .../processor/attr/SlingPathAttrProcessor.java | 43 ------------------ .../processor/attr/SlingResourceAttrProcessor.java | 43 ------------------ 4 files changed, 36 insertions(+), 105 deletions(-) diff --git a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/dialect/SlingDialect.java b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/dialect/SlingDialect.java index 6099a6e..017b972 100644 --- a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/dialect/SlingDialect.java +++ b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/dialect/SlingDialect.java @@ -27,10 +27,8 @@ import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.Service; import org.apache.sling.scripting.thymeleaf.internal.processor.attr.SlingAddSelectorsAttrProcessor; import org.apache.sling.scripting.thymeleaf.internal.processor.attr.SlingIncludeAttrProcessor; -import org.apache.sling.scripting.thymeleaf.internal.processor.attr.SlingPathAttrProcessor; import org.apache.sling.scripting.thymeleaf.internal.processor.attr.SlingReplaceSelectorsAttrProcessor; import org.apache.sling.scripting.thymeleaf.internal.processor.attr.SlingReplaceSuffixAttrProcessor; -import org.apache.sling.scripting.thymeleaf.internal.processor.attr.SlingResourceAttrProcessor; import org.apache.sling.scripting.thymeleaf.internal.processor.attr.SlingResourceTypeAttrProcessor; import org.apache.sling.scripting.thymeleaf.internal.processor.attr.SlingUnwrapAttrProcessor; import org.osgi.framework.Constants; @@ -61,10 +59,8 @@ public final class SlingDialect extends AbstractDialect { final Set<IProcessor> processors = new HashSet<IProcessor>(); processors.add(new SlingAddSelectorsAttrProcessor()); processors.add(new SlingIncludeAttrProcessor()); - processors.add(new SlingPathAttrProcessor()); processors.add(new SlingReplaceSelectorsAttrProcessor()); processors.add(new SlingReplaceSuffixAttrProcessor()); - processors.add(new SlingResourceAttrProcessor()); processors.add(new SlingResourceTypeAttrProcessor()); processors.add(new SlingUnwrapAttrProcessor()); return processors; diff --git a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/processor/attr/SlingIncludeAttrProcessor.java b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/processor/attr/SlingIncludeAttrProcessor.java index 6291746..e08aaec 100644 --- a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/processor/attr/SlingIncludeAttrProcessor.java +++ b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/processor/attr/SlingIncludeAttrProcessor.java @@ -35,11 +35,15 @@ import org.apache.sling.scripting.thymeleaf.internal.dom.NodeUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.thymeleaf.Arguments; +import org.thymeleaf.Configuration; import org.thymeleaf.context.IContext; import org.thymeleaf.dom.Element; import org.thymeleaf.dom.Macro; import org.thymeleaf.processor.ProcessorResult; import org.thymeleaf.processor.attr.AbstractAttrProcessor; +import org.thymeleaf.standard.expression.IStandardExpression; +import org.thymeleaf.standard.expression.IStandardExpressionParser; +import org.thymeleaf.standard.expression.StandardExpressions; public class SlingIncludeAttrProcessor extends AbstractAttrProcessor { @@ -65,16 +69,24 @@ public class SlingIncludeAttrProcessor extends AbstractAttrProcessor { final SlingWebContext slingWebContext = (SlingWebContext) context; final SlingHttpServletRequest slingHttpServletRequest = slingWebContext.getHttpServletRequest(); final SlingHttpServletResponse slingHttpServletResponse = slingWebContext.getHttpServletResponse(); - // resource and path - Resource resource = NodeUtil.getNodeProperty(element, SlingResourceAttrProcessor.NODE_PROPERTY_NAME, Resource.class); - String path = NodeUtil.getNodeProperty(element, SlingPathAttrProcessor.NODE_PROPERTY_NAME, String.class); + // resource or path to include + final Configuration configuration = arguments.getConfiguration(); + final String attributeValue = element.getAttributeValue(attributeName); + final IStandardExpressionParser parser = StandardExpressions.getExpressionParser(configuration); + final IStandardExpression expression = parser.parseExpression(configuration, arguments, attributeValue); + final Object include = expression.execute(configuration, arguments); + String path = null; + if (include instanceof String) { + path = (String) include; + } + Resource resource = null; + if (include instanceof Resource) { + resource = (Resource) include; + } // request dispatcher options - final String resourceType = NodeUtil.getNodeProperty(element, SlingResourceTypeAttrProcessor.NODE_PROPERTY_NAME, String.class); - final String replaceSelectors = NodeUtil.getNodeProperty(element, SlingReplaceSelectorsAttrProcessor.NODE_PROPERTY_NAME, String.class); - final String addSelectors = NodeUtil.getNodeProperty(element, SlingAddSelectorsAttrProcessor.NODE_PROPERTY_NAME, String.class); - final String replaceSuffix = NodeUtil.getNodeProperty(element, SlingReplaceSuffixAttrProcessor.NODE_PROPERTY_NAME, String.class); + final RequestDispatcherOptions requestDispatcherOptions = prepareRequestDispatcherOptions(element); // dispatch - final String content = dispatch(resource, path, slingHttpServletRequest, slingHttpServletResponse, resourceType, replaceSelectors, addSelectors, replaceSuffix); + final String content = dispatch(resource, path, slingHttpServletRequest, slingHttpServletResponse, requestDispatcherOptions); // cleanup element.removeAttribute(attributeName); element.clearChildren(); @@ -91,15 +103,23 @@ public class SlingIncludeAttrProcessor extends AbstractAttrProcessor { return ProcessorResult.OK; } - /** - * @see org.apache.sling.scripting.jsp.taglib.IncludeTagHandler - */ - protected String dispatch(Resource resource, String path, final SlingHttpServletRequest slingHttpServletRequest, final SlingHttpServletResponse slingHttpServletResponse, final String resourceType, final String replaceSelectors, final String addSelectors, final String replaceSuffix) { + protected RequestDispatcherOptions prepareRequestDispatcherOptions(final Element element) { + final String resourceType = NodeUtil.getNodeProperty(element, SlingResourceTypeAttrProcessor.NODE_PROPERTY_NAME, String.class); + final String replaceSelectors = NodeUtil.getNodeProperty(element, SlingReplaceSelectorsAttrProcessor.NODE_PROPERTY_NAME, String.class); + final String addSelectors = NodeUtil.getNodeProperty(element, SlingAddSelectorsAttrProcessor.NODE_PROPERTY_NAME, String.class); + final String replaceSuffix = NodeUtil.getNodeProperty(element, SlingReplaceSuffixAttrProcessor.NODE_PROPERTY_NAME, String.class); final RequestDispatcherOptions options = new RequestDispatcherOptions(); options.setForceResourceType(resourceType); options.setReplaceSelectors(replaceSelectors); options.setAddSelectors(addSelectors); options.setReplaceSuffix(replaceSuffix); + return options; + } + + /** + * @see org.apache.sling.scripting.jsp.taglib.IncludeTagHandler + */ + protected String dispatch(Resource resource, String path, final SlingHttpServletRequest slingHttpServletRequest, final SlingHttpServletResponse slingHttpServletResponse, final RequestDispatcherOptions requestDispatcherOptions) { // ensure the path (if set) is absolute and normalized if (path != null) { @@ -116,11 +136,12 @@ public class SlingIncludeAttrProcessor extends AbstractAttrProcessor { resource = slingHttpServletRequest.getResource(); } else { // check whether the path (would) resolve, else SyntheticRes. + final String resourceType = requestDispatcherOptions.getForceResourceType(); final Resource tmp = slingHttpServletRequest.getResourceResolver().resolve(path); if (tmp == null && resourceType != null) { resource = new SyntheticResource(slingHttpServletRequest.getResourceResolver(), path, resourceType); // TODO DispatcherSyntheticResource? // remove resource type overwrite as synthetic resource is correctly typed as requested - options.remove(RequestDispatcherOptions.OPT_FORCE_RESOURCE_TYPE); + requestDispatcherOptions.remove(RequestDispatcherOptions.OPT_FORCE_RESOURCE_TYPE); } } } @@ -129,9 +150,9 @@ public class SlingIncludeAttrProcessor extends AbstractAttrProcessor { // create a dispatcher for the resource or path final RequestDispatcher dispatcher; if (resource != null) { - dispatcher = slingHttpServletRequest.getRequestDispatcher(resource, options); + dispatcher = slingHttpServletRequest.getRequestDispatcher(resource, requestDispatcherOptions); } else { - dispatcher = slingHttpServletRequest.getRequestDispatcher(path, options); + dispatcher = slingHttpServletRequest.getRequestDispatcher(path, requestDispatcherOptions); } if (dispatcher != null) { diff --git a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/processor/attr/SlingPathAttrProcessor.java b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/processor/attr/SlingPathAttrProcessor.java deleted file mode 100644 index 5ff6eb6..0000000 --- a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/processor/attr/SlingPathAttrProcessor.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.thymeleaf.internal.processor.attr; - -public final class SlingPathAttrProcessor extends SlingNodePropertyAttrProcessor { - - public static final int ATTR_PRECEDENCE = 99; - - public static final String ATTR_NAME = "path"; - - public static final String NODE_PROPERTY_NAME = String.format("%s.%s", PREFIX, ATTR_NAME); - - public SlingPathAttrProcessor() { - super(ATTR_NAME); - } - - @Override - public int getPrecedence() { - return ATTR_PRECEDENCE; - } - - @Override - protected String getNodePropertyName() { - return NODE_PROPERTY_NAME; - } - -} diff --git a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/processor/attr/SlingResourceAttrProcessor.java b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/processor/attr/SlingResourceAttrProcessor.java deleted file mode 100644 index e0cd062..0000000 --- a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/processor/attr/SlingResourceAttrProcessor.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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.thymeleaf.internal.processor.attr; - -public final class SlingResourceAttrProcessor extends SlingNodePropertyAttrProcessor { - - public static final int ATTR_PRECEDENCE = 99; - - public static final String ATTR_NAME = "resource"; - - public static final String NODE_PROPERTY_NAME = String.format("%s.%s", PREFIX, ATTR_NAME); - - public SlingResourceAttrProcessor() { - super(ATTR_NAME); - } - - @Override - public int getPrecedence() { - return ATTR_PRECEDENCE; - } - - @Override - protected String getNodePropertyName() { - return NODE_PROPERTY_NAME; - } - -} -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
