SLING-10308 Moving the JS calling part into the DIV

Merge pull request #20 from maximilianvoss/master: Moving the JS calling part into the DIV, thus it get replaced after data is loaded.
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..717209c 100755
--- a/src/main/java/org/apache/sling/dynamicinclude/Configuration.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/Configuration.java
@@ -36,9 +36,9 @@
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.ConfigurationPolicy;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.AttributeType;
 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;
 
@@ -63,20 +63,18 @@
       @AttributeDefinition(name="Base path regular expression", description="This SDI configuration will work only for paths matching this value. If value starts with \\\"^\\\" sign, regex matching will be performed. Otherwise it will check for path prefix.")
       String include$_$filter_config_path() default "/content";
       
-      @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 = "Resource types",
+          description = "Filter will replace components with selected resource types",
+          type = AttributeType.STRING)
+      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")
@@ -88,8 +86,10 @@
       @AttributeDefinition(name = "Required header", description = "SDI will work only for requests with given header")
       String include$_$filter_config_required__header() default "Server-Agent=Communique-Dispatcher";
 
-      @AttributeDefinition(name = "Ignore URL params", description = "SDI will process the request even if it contains configured GET parameters", cardinality = Integer.MAX_VALUE)
-      String include$_$filter_config_ignoreUrlParams() default "";
+      @AttributeDefinition(name = "Ignore URL params",
+          description = "SDI will process the request even if it contains configured GET parameters",
+          type = AttributeType.STRING)
+      String[] include$_$filter_config_ignoreUrlParams() default {};
 
       @AttributeDefinition(name =  "Include path rewriting", description = "Check to enable include path rewriting")
       boolean include$_$filter_config_rewrite() default false;
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.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.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 @@
         // 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/api/IncludeGenerator.java b/src/main/java/org/apache/sling/dynamicinclude/api/IncludeGenerator.java
new file mode 100755
index 0000000..e950ddc
--- /dev/null
+++ b/src/main/java/org/apache/sling/dynamicinclude/api/IncludeGenerator.java
@@ -0,0 +1,47 @@
+/*-
+ * 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.dynamicinclude.api;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+
+/**
+ * Include generator interface
+ */
+public interface IncludeGenerator {
+    String getType();
+
+    /**
+     * 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 80%
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 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 @@
     }
 
     @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.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 @@
     }
 
     @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 @@
     }
 
     @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));
diff --git a/src/test/java/org/apache/sling/dynamicinclude/ConfigurationTest.java b/src/test/java/org/apache/sling/dynamicinclude/ConfigurationTest.java
index 85cdf8a..ee9c29d 100644
--- a/src/test/java/org/apache/sling/dynamicinclude/ConfigurationTest.java
+++ b/src/test/java/org/apache/sling/dynamicinclude/ConfigurationTest.java
@@ -74,17 +74,18 @@
     properties.put("include-filter.config.add_comment", true);
     properties.put("include-filter.config.ttl", 60);
     properties.put("include-filter.config.enabled", true);
-    properties.put("include-filter.config.resource-types", new String[]{"test/resource/type"});
+    properties.put("include-filter.config.resource-types",
+        new String[] { "test/resource/type", "test/resource/type2" });
     properties.put("include-filter.config.required_header", "CustomHeader: value");
     properties.put("include-filter.config.selector", "cache");
     properties.put("include-filter.config.rewrite", true);
-    properties.put("include-filter.config.ignoreUrlParams", new String[] {"query"});
+    properties.put("include-filter.config.ignoreUrlParams", new String[] { "query", "query2" });
 
     context.registerInjectActivateService(tested, properties);
 
     assertThat(tested.getPathMatcher().getClass().isAssignableFrom(PrefixPathMatcher.class), is(true));
     assertThat(tested.getAddComment(), is(true));
-    assertThat(tested.getIgnoreUrlParams().size(), is(1));
+    assertThat(tested.getIgnoreUrlParams().size(), is(2));
     assertThat(tested.getIncludeSelector(), is("cache"));
     assertThat(tested.getIncludeTypeName(), is("ESI"));
     assertThat(tested.getRequiredHeader(), is("CustomHeader: value"));
@@ -93,5 +94,6 @@
     assertThat(tested.hasTtlSet(), is(true));
     assertThat(tested.isRewritePath(), is(true));
     assertThat(tested.isSupportedResourceType("test/resource/type"), is(true));
+    assertThat(tested.isSupportedResourceType("test/resource/type2"), is(true));
   }
 }