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]>.

Reply via email to