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 2021/04/13 11:53:41 UTC

[sling-org-apache-sling-dynamic-include] branch master updated: SLING-10096 - Allow the SlingHttpServletRequest in the IncludeGenerator or Sling dynamic includes

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-dynamic-include.git


The following commit(s) were added to refs/heads/master by this push:
     new e2c70ea  SLING-10096 - Allow the SlingHttpServletRequest in the IncludeGenerator or Sling dynamic includes
e2c70ea is described below

commit e2c70ea7f5303e1952d5fd415c3d0939f6a00ced
Author: Santiago GarcĂ­a Pimentel <sa...@gmail.com>
AuthorDate: Tue Apr 13 13:53:33 2021 +0200

    SLING-10096 - Allow the SlingHttpServletRequest in the IncludeGenerator or Sling dynamic includes
    
    Extend the IncludeGenerator interface with the Sling Request object to give more flexibility to custom implementators of the interface
    
    Co-authored-by: Santiago Garcia Pimentel <sa...@netcentric.biz>
---
 pom.xml                                            |  6 +++++-
 .../apache/sling/dynamicinclude/Configuration.java |  9 ++-------
 .../sling/dynamicinclude/IncludeTagFilter.java     |  5 ++---
 .../{generator => api}/IncludeGenerator.java       | 22 ++++++++++++++++++++--
 .../package-info.java}                             | 12 +++---------
 .../generator/IncludeGeneratorWhiteboard.java      |  1 +
 .../generator/types/EsiGenerator.java              |  5 +++--
 .../generator/types/JsiGenerator.java              |  5 +++--
 .../generator/types/SsiGenerator.java              |  5 +++--
 9 files changed, 42 insertions(+), 28 deletions(-)

diff --git a/pom.xml b/pom.xml
index 092484f..808e75a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
     </parent>    
     
     <artifactId>org.apache.sling.dynamic-include</artifactId>
-    <version>3.2.1-SNAPSHOT</version>
+    <version>3.3.0-SNAPSHOT</version>
     
     <name>Apache Sling Dynamic Include</name>
     <description>Dynamic Include filter for Apache Sling</description>
@@ -71,6 +71,10 @@
             <artifactId>org.osgi.service.component.annotations</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.annotation.versioning</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.servlets.annotations</artifactId>
             <scope>provided</scope>
diff --git a/src/main/java/org/apache/sling/dynamicinclude/Configuration.java b/src/main/java/org/apache/sling/dynamicinclude/Configuration.java
index 0fa523a..30cbce6 100755
--- a/src/main/java/org/apache/sling/dynamicinclude/Configuration.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/Configuration.java
@@ -38,7 +38,6 @@ import org.osgi.service.component.annotations.ConfigurationPolicy;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
 import org.osgi.service.metatype.annotations.Designate;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
-import org.osgi.service.metatype.annotations.Option;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -66,17 +65,13 @@ public class Configuration {
       @AttributeDefinition(name="Resource types", description="Filter will replace components with selected resource types", cardinality = Integer.MAX_VALUE)
       String include$_$filter_config_resource$_$types() default "";
       
-      @AttributeDefinition(name = "Include type", description = "Type of generated include tags", options = {
-          @Option(label = "Apache SSI", value = "SSI"),
-          @Option(label = "ESI", value = "ESI"),
-          @Option(label = "Javascript", value = "JSI")
-      })
+      @AttributeDefinition(name = "Include type", description = "Type of generated include tags")
       String include$_$filter_config_include$_$type() default "SSI";
       
       @AttributeDefinition(name="Add comment", description = "Add comment to included components")
       boolean include$_$filter_config_add__comment() default false;
       
-      @AttributeDefinition(name = "Filter selector", description = "Selector used to mark included resources")
+      @AttributeDefinition(name = "Filter selector", description = "Selector used to mark included resources. The Built in option are 'SSI','ESI' and 'JSI'")
       String include$_$filter_config_selector() default "nocache";
 
       @AttributeDefinition(name = "Extension", description = "Extension to append to virtual resources to make caching possible")
diff --git a/src/main/java/org/apache/sling/dynamicinclude/IncludeTagFilter.java b/src/main/java/org/apache/sling/dynamicinclude/IncludeTagFilter.java
index b43568a..7bdddd3 100644
--- a/src/main/java/org/apache/sling/dynamicinclude/IncludeTagFilter.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/IncludeTagFilter.java
@@ -25,7 +25,6 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Collection;
 import java.util.Enumeration;
-import java.util.List;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -39,7 +38,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceUtil;
-import org.apache.sling.dynamicinclude.generator.IncludeGenerator;
+import org.apache.sling.dynamicinclude.api.IncludeGenerator;
 import org.apache.sling.dynamicinclude.generator.IncludeGeneratorWhiteboard;
 import org.apache.sling.dynamicinclude.impl.UrlBuilder;
 import org.apache.sling.servlets.annotations.SlingServletFilter;
@@ -97,7 +96,7 @@ public class IncludeTagFilter implements Filter {
         // Only write the includes markup if the required, configurable request
         // header is present
         if (shouldWriteIncludes(config, slingRequest)) {
-            String include = generator.getInclude(url);
+            String include = generator.getInclude(slingRequest,url);
             LOG.debug(include);
             writer.append(include);
         } else {
diff --git a/src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGenerator.java b/src/main/java/org/apache/sling/dynamicinclude/api/IncludeGenerator.java
similarity index 50%
copy from src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGenerator.java
copy to src/main/java/org/apache/sling/dynamicinclude/api/IncludeGenerator.java
index 91998aa..e950ddc 100755
--- a/src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGenerator.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/api/IncludeGenerator.java
@@ -17,7 +17,9 @@
  * under the License.
  */
 
-package org.apache.sling.dynamicinclude.generator;
+package org.apache.sling.dynamicinclude.api;
+
+import org.apache.sling.api.SlingHttpServletRequest;
 
 /**
  * Include generator interface
@@ -25,5 +27,21 @@ package org.apache.sling.dynamicinclude.generator;
 public interface IncludeGenerator {
     String getType();
 
-    String getInclude(String url);
+    /**
+     * Returns the string used to include the resource.
+     * For example, this might be a Javascript code that retrieves a snippet of html,
+     * an Apache SSI Tag, or an Edge Side Include Tag.
+     * <p>
+     * This method receives the sling request and an Url that has already be normalized as followed:
+     * <ul>
+     * <li>The query string has been removed</li>
+     * <li>The Url has been mapped using the ResourceResolver</li>
+     * <li>The jcr:content paths have been encoded to _jcr_content.</li>
+     * </ul>
+     *
+     * @param request       the Sling request object
+     * @param normalizedUrl the requested url, normalized
+     * @return a String used to include the resource
+     **/
+    String getInclude(SlingHttpServletRequest request, String normalizedUrl);
 }
diff --git a/src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGenerator.java b/src/main/java/org/apache/sling/dynamicinclude/api/package-info.java
old mode 100755
new mode 100644
similarity index 81%
rename from src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGenerator.java
rename to src/main/java/org/apache/sling/dynamicinclude/api/package-info.java
index 91998aa..07f09e3
--- a/src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGenerator.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/api/package-info.java
@@ -17,13 +17,7 @@
  * under the License.
  */
 
-package org.apache.sling.dynamicinclude.generator;
+@Version("1.0.0")
+package org.apache.sling.dynamicinclude.api;
 
-/**
- * Include generator interface
- */
-public interface IncludeGenerator {
-    String getType();
-
-    String getInclude(String url);
-}
+import org.osgi.annotation.versioning.Version;
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGeneratorWhiteboard.java b/src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGeneratorWhiteboard.java
index 8294744..5f742c7 100755
--- a/src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGeneratorWhiteboard.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGeneratorWhiteboard.java
@@ -26,6 +26,7 @@ import static org.osgi.service.component.annotations.ReferencePolicy.DYNAMIC;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 
+import org.apache.sling.dynamicinclude.api.IncludeGenerator;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 
diff --git a/src/main/java/org/apache/sling/dynamicinclude/generator/types/EsiGenerator.java b/src/main/java/org/apache/sling/dynamicinclude/generator/types/EsiGenerator.java
index 0d47fcd..b648800 100755
--- a/src/main/java/org/apache/sling/dynamicinclude/generator/types/EsiGenerator.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/generator/types/EsiGenerator.java
@@ -20,7 +20,8 @@
 package org.apache.sling.dynamicinclude.generator.types;
 
 import org.apache.commons.lang3.StringEscapeUtils;
-import org.apache.sling.dynamicinclude.generator.IncludeGenerator;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.dynamicinclude.api.IncludeGenerator;
 import org.osgi.service.component.annotations.Component;
 
 /**
@@ -36,7 +37,7 @@ public class EsiGenerator implements IncludeGenerator {
     }
 
     @Override
-    public String getInclude(String url) {
+    public String getInclude(SlingHttpServletRequest request, String url) {
         StringBuffer buf = new StringBuffer();
         buf.append("<esi:include src=\"");
         buf.append(StringEscapeUtils.escapeHtml4(url));
diff --git a/src/main/java/org/apache/sling/dynamicinclude/generator/types/JsiGenerator.java b/src/main/java/org/apache/sling/dynamicinclude/generator/types/JsiGenerator.java
index a777f42..f3d36a8 100755
--- a/src/main/java/org/apache/sling/dynamicinclude/generator/types/JsiGenerator.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/generator/types/JsiGenerator.java
@@ -27,7 +27,8 @@ import java.io.UnsupportedEncodingException;
 import java.net.URL;
 
 import org.apache.commons.lang3.StringEscapeUtils;
-import org.apache.sling.dynamicinclude.generator.IncludeGenerator;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.dynamicinclude.api.IncludeGenerator;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
@@ -69,7 +70,7 @@ public class JsiGenerator implements IncludeGenerator {
     }
 
     @Override
-    public String getInclude(String url) {
+    public String getInclude(SlingHttpServletRequest request, String url) {
         if (template == null) {
             throw new IllegalStateException("JSI generator hasn't be initialized");
         }
diff --git a/src/main/java/org/apache/sling/dynamicinclude/generator/types/SsiGenerator.java b/src/main/java/org/apache/sling/dynamicinclude/generator/types/SsiGenerator.java
index 718d506..1cbee83 100755
--- a/src/main/java/org/apache/sling/dynamicinclude/generator/types/SsiGenerator.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/generator/types/SsiGenerator.java
@@ -19,7 +19,8 @@
 
 package org.apache.sling.dynamicinclude.generator.types;
 
-import org.apache.sling.dynamicinclude.generator.IncludeGenerator;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.dynamicinclude.api.IncludeGenerator;
 import org.osgi.service.component.annotations.Component;
 
 /**
@@ -35,7 +36,7 @@ public class SsiGenerator implements IncludeGenerator {
     }
 
     @Override
-    public String getInclude(String url) {
+    public String getInclude(SlingHttpServletRequest request, String url) {
         StringBuffer buf = new StringBuffer();
         buf.append("<!--#include virtual=\"");
         buf.append(escapeForApache(url));