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 2020/01/10 12:27:11 UTC
[sling-org-apache-sling-dynamic-include] 01/01: SLING-8982 -
dynamic-include: upgrade to parent pom 35
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to branch feature/SLING-8982
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-dynamic-include.git
commit 0b4d79a598c433e22e0a0d1afeaec7dc74ee0f9a
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Fri Jan 10 13:26:46 2020 +0100
SLING-8982 - dynamic-include: upgrade to parent pom 35
---
pom.xml | 54 +++----
.../sling/dynamicinclude/CacheControlFilter.java | 14 +-
.../apache/sling/dynamicinclude/Configuration.java | 160 +++++++++------------
.../dynamicinclude/ConfigurationWhiteboard.java | 31 ++--
.../sling/dynamicinclude/IncludeTagFilter.java | 11 +-
.../dynamicinclude/SyntheticResourceFilter.java | 21 ++-
.../generator/IncludeGeneratorWhiteboard.java | 25 ++--
.../dynamicinclude/generator/package-info.java | 3 +-
.../generator/types/EsiGenerator.java | 4 +-
.../generator/types/JsiGenerator.java | 6 +-
.../generator/types/SsiGenerator.java | 4 +-
.../generator/types/package-info.java | 3 +-
.../apache/sling/dynamicinclude/package-info.java | 3 +-
.../dynamicinclude/pathmatcher/package-info.java | 3 +-
.../sling/dynamicinclude/ConfigurationTest.java | 44 +++---
.../ConfigurationWhiteboardTest.java | 35 ++---
16 files changed, 191 insertions(+), 230 deletions(-)
diff --git a/pom.xml b/pom.xml
index f846266..244c94a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,14 +23,13 @@
<parent>
<groupId>org.apache.sling</groupId>
- <artifactId>sling</artifactId>
- <version>26</version>
+ <artifactId>sling-bundle-parent</artifactId>
+ <version>35</version>
<relativePath />
</parent>
<artifactId>org.apache.sling.dynamic-include</artifactId>
<version>3.1.7-SNAPSHOT</version>
- <packaging>bundle</packaging>
<name>Apache Sling Dynamic Include</name>
<description>Dynamic Include filter for Apache Sling</description>
@@ -55,50 +54,36 @@
</developer>
</developers>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-scr-plugin</artifactId>
- <executions>
- <execution>
- <id>generate-scr-scrdescriptor</id>
- <goals>
- <goal>scr</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- </plugin>
- </plugins>
- </build>
-
<dependencies>
<!-- osgi -->
<dependency>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.core</artifactId>
+ <artifactId>osgi.core</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
+ <artifactId>osgi.cmpn</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.scr.annotations</artifactId>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.annotation.versioning</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component.annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.servlets.annotations</artifactId>
<scope>provided</scope>
</dependency>
<!-- javax -->
<dependency>
<groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
+ <artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
@@ -126,7 +111,6 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.0</version>
<scope>provided</scope>
</dependency>
@@ -138,10 +122,10 @@
<scope>provided</scope>
</dependency>
+ <!-- testing -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -150,6 +134,12 @@
<version>2.18.3</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.testing.osgi-mock.junit4</artifactId>
+ <version>2.4.10</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/src/main/java/org/apache/sling/dynamicinclude/CacheControlFilter.java b/src/main/java/org/apache/sling/dynamicinclude/CacheControlFilter.java
index c515815..3591b3f 100644
--- a/src/main/java/org/apache/sling/dynamicinclude/CacheControlFilter.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/CacheControlFilter.java
@@ -28,15 +28,21 @@ import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.sling.SlingFilter;
-import org.apache.felix.scr.annotations.sling.SlingFilterScope;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.servlets.annotations.SlingServletFilter;
+import org.apache.sling.servlets.annotations.SlingServletFilterScope;
+import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@SlingFilter(scope = {SlingFilterScope.REQUEST, SlingFilterScope.FORWARD}, order = 0)
+
+@SlingServletFilter(scope = { SlingServletFilterScope.REQUEST, SlingServletFilterScope.FORWARD } )
+@Component(property = {
+ Constants.SERVICE_RANKING + ":Integer=0"
+})
public class CacheControlFilter implements Filter {
private static final String HEADER_DATE = "Date";
diff --git a/src/main/java/org/apache/sling/dynamicinclude/Configuration.java b/src/main/java/org/apache/sling/dynamicinclude/Configuration.java
index 51f3823..97a33a1 100755
--- a/src/main/java/org/apache/sling/dynamicinclude/Configuration.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/Configuration.java
@@ -21,101 +21,83 @@ package org.apache.sling.dynamicinclude;
import java.util.Arrays;
import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.ConfigurationPolicy;
-import org.apache.felix.scr.annotations.Properties;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.PropertyOption;
-import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.dynamicinclude.pathmatcher.PathMatcher;
import org.apache.sling.dynamicinclude.pathmatcher.PrefixPathMatcher;
import org.apache.sling.dynamicinclude.pathmatcher.RegexPathMatcher;
import org.osgi.framework.Constants;
-import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
+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.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+import org.osgi.service.metatype.annotations.Option;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Include filter configuration.
*/
-@Component(metatype = true, configurationFactory = true, label = "Apache Sling Dynamic Include - Configuration", immediate = true, policy = ConfigurationPolicy.REQUIRE)
-@Service(Configuration.class)
-@Properties({
- @Property(name = Constants.SERVICE_VENDOR, value = "The Apache Software Foundation"),
- @Property(name = Configuration.PROPERTY_FILTER_ENABLED, boolValue = Configuration.DEFAULT_FILTER_ENABLED, label = "Enabled", description = "Check to enable the filter"),
- @Property(name = Configuration.PROPERTY_FILTER_PATH, value = Configuration.DEFAULT_FILTER_PATH, label = "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."),
- @Property(name = Configuration.PROPERTY_FILTER_RESOURCE_TYPES, cardinality = Integer.MAX_VALUE, label = "Resource types", description = "Filter will replace components with selected resource types"),
- @Property(name = Configuration.PROPERTY_INCLUDE_TYPE, value = Configuration.DEFAULT_INCLUDE_TYPE, label = "Include type", description = "Type of generated include tags", options = {
- @PropertyOption(name = "SSI", value = "Apache SSI"), @PropertyOption(name = "ESI", value = "ESI"),
- @PropertyOption(name = "JSI", value = "Javascript")}),
- @Property(name = Configuration.PROPERTY_ADD_COMMENT, boolValue = Configuration.DEFAULT_ADD_COMMENT, label = "Add comment", description = "Add comment to included components"),
- @Property(name = Configuration.PROPERTY_FILTER_SELECTOR, value = Configuration.DEFAULT_FILTER_SELECTOR, label = "Filter selector", description = "Selector used to mark included resources"),
- @Property(name = Configuration.PROPERTY_EXTENSION, value = Configuration.DEFAULT_EXTENSION, label = "Extension", description = "Extension to append to virtual resources to make caching possible"),
- @Property(name = Configuration.PROPERTY_COMPONENT_TTL, label = "Component TTL", description = "\"Time to live\" cache header for rendered component (in seconds)"),
- @Property(name = Configuration.PROPERTY_REQUIRED_HEADER, value = Configuration.DEFAULT_REQUIRED_HEADER, label = "Required header", description = "SDI will work only for requests with given header"),
- @Property(name = Configuration.PROPERTY_IGNORE_URL_PARAMS, cardinality = Integer.MAX_VALUE, label = "Ignore URL params", description = "SDI will process the request even if it contains configured GET parameters"),
- @Property(name = Configuration.PROPERTY_REWRITE_PATH, boolValue = Configuration.DEFAULT_REWRITE_DISABLED, label = "Include path rewriting", description = "Check to enable include path rewriting"),
- @Property(name = Configuration.PROPERTY_APPEND_SUFFIX, boolValue = Configuration.DEFAULT_APPEND_SUFFIX, label = "Append suffix to dynamic includes", description = "Check to append the suffix of the parent request to the dynamic include."),
- @Property(name= Configuration.NAME_HINT_PROPERTY_NAME, value=Configuration.NAME_HINT_VALUE)})
+@Component(service = Configuration.class,
+ immediate = true,
+ configurationPolicy = ConfigurationPolicy.REQUIRE,
+ property = {
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
+ "webconsole.configurationFactory.nameHint={include-filter.config.include-type} for [{include-filter.config.resource-types}] at path: {include-filter.config.path}"
+ })
+@Designate(ocd = Configuration.Config.class, factory = true)
public class Configuration {
+
+ @ObjectClassDefinition(name = "Apache Sling Dynamic Include - Configuration")
+ public @interface Config {
+ @AttributeDefinition(name="Enabled", description="Check to enable the filter")
+ boolean include$_$filter_config_enabled() default false;
+
+ @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 = "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")
+ })
+ 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")
+ String include$_$filter_config_selector() default "nocache";
+
+ @AttributeDefinition(name = "Extension", description = "Extension to append to virtual resources to make caching possible")
+ String include$_$filter_config_extension() default "";
+
+ @AttributeDefinition(name = "Component TTL", description = "\"Time to live\" cache header for rendered component (in seconds)")
+ String include$_$filter_config_ttl() default "";
+
+ @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 = "Include path rewriting", description = "Check to enable include path rewriting")
+ boolean include$_$filter_config_rewrite() default false;
+
+ @AttributeDefinition(name = "Append suffix to dynamic includes", description = "Check to append the suffix of the parent request to the dynamic include.")
+ boolean include$_$filter_config_appendSuffix() default true;
+ }
private static final Logger LOG = LoggerFactory.getLogger(Configuration.class);
- static final String PROPERTY_FILTER_PATH = "include-filter.config.path";
-
- static final String DEFAULT_FILTER_PATH = "/content";
-
- static final String PROPERTY_FILTER_ENABLED = "include-filter.config.enabled";
-
- static final boolean DEFAULT_FILTER_ENABLED = false;
-
- static final String PROPERTY_FILTER_RESOURCE_TYPES = "include-filter.config.resource-types";
-
- static final String PROPERTY_FILTER_SELECTOR = "include-filter.config.selector";
-
- static final String DEFAULT_FILTER_SELECTOR = "nocache";
-
- static final String PROPERTY_EXTENSION = "include-filter.config.extension";
-
- static final String DEFAULT_EXTENSION = "";
-
- static final String PROPERTY_COMPONENT_TTL = "include-filter.config.ttl";
-
- static final String PROPERTY_INCLUDE_TYPE = "include-filter.config.include-type";
-
- static final String DEFAULT_INCLUDE_TYPE = "SSI";
-
- static final String PROPERTY_ADD_COMMENT = "include-filter.config.add_comment";
-
- static final boolean DEFAULT_ADD_COMMENT = false;
-
- static final String PROPERTY_REQUIRED_HEADER = "include-filter.config.required_header";
-
- static final String DEFAULT_REQUIRED_HEADER = "Server-Agent=Communique-Dispatcher";
-
- static final String PROPERTY_IGNORE_URL_PARAMS = "include-filter.config.ignoreUrlParams";
-
- static final String PROPERTY_REWRITE_PATH = "include-filter.config.rewrite";
-
- static final String NAME_HINT_PROPERTY_NAME = "webconsole.configurationFactory.nameHint";
-
- static final String NAME_HINT_VALUE = "{" + PROPERTY_INCLUDE_TYPE + "} for [{"
- + PROPERTY_FILTER_RESOURCE_TYPES + "}] at path: {" + PROPERTY_FILTER_PATH + "}";
-
- static final boolean DEFAULT_REWRITE_DISABLED = false;
-
- static final String PROPERTY_APPEND_SUFFIX = "include-filter.config.appendSuffix";
-
- static final boolean DEFAULT_APPEND_SUFFIX = true;
-
private PathMatcher pathMatcher;
private boolean isEnabled;
@@ -141,12 +123,12 @@ public class Configuration {
private boolean appendSuffix;
@Activate
- public void activate(ComponentContext context, Map<String, ?> properties) {
- isEnabled = PropertiesUtil.toBoolean(properties.get(PROPERTY_FILTER_ENABLED), DEFAULT_FILTER_ENABLED);
- String pathPattern = PropertiesUtil.toString(properties.get(PROPERTY_FILTER_PATH), DEFAULT_FILTER_PATH);
+ public void activate(Config cfg) {
+ isEnabled = cfg.include$_$filter_config_enabled();
+ String pathPattern = cfg.include$_$filter_config_path();
pathMatcher = choosePathMatcher(pathPattern);
String[] resourceTypeList;
- resourceTypeList = PropertiesUtil.toStringArray(properties.get(PROPERTY_FILTER_RESOURCE_TYPES), new String[0]);
+ resourceTypeList = PropertiesUtil.toStringArray(cfg.include$_$filter_config_resource$_$types(), new String[0]);
for (int i = 0; i < resourceTypeList.length; i++) {
String[] s = resourceTypeList[i].split(";");
String name = s[0].trim();
@@ -154,16 +136,16 @@ public class Configuration {
}
this.resourceTypes = Arrays.asList(resourceTypeList);
- includeSelector = PropertiesUtil.toString(properties.get(PROPERTY_FILTER_SELECTOR), DEFAULT_FILTER_SELECTOR);
- extension = PropertiesUtil.toString(properties.get(PROPERTY_EXTENSION), DEFAULT_EXTENSION);
- ttl = PropertiesUtil.toInteger(properties.get(PROPERTY_COMPONENT_TTL), -1);
- addComment = PropertiesUtil.toBoolean(properties.get(PROPERTY_ADD_COMMENT), DEFAULT_ADD_COMMENT);
- includeTypeName = PropertiesUtil.toString(properties.get(PROPERTY_INCLUDE_TYPE), DEFAULT_INCLUDE_TYPE);
- requiredHeader = PropertiesUtil.toString(properties.get(PROPERTY_REQUIRED_HEADER), DEFAULT_REQUIRED_HEADER);
- ignoreUrlParams = Arrays.asList(PropertiesUtil.toStringArray(properties.get(PROPERTY_IGNORE_URL_PARAMS),
+ includeSelector = cfg.include$_$filter_config_selector();
+ extension = cfg.include$_$filter_config_extension();
+ ttl = PropertiesUtil.toInteger(cfg.include$_$filter_config_ttl(), -1);
+ addComment = cfg.include$_$filter_config_add__comment();
+ includeTypeName = cfg.include$_$filter_config_include$_$type();
+ requiredHeader = cfg.include$_$filter_config_required__header();
+ ignoreUrlParams = Arrays.asList(PropertiesUtil.toStringArray(cfg.include$_$filter_config_ignoreUrlParams(),
new String[0]));
- rewritePath = PropertiesUtil.toBoolean(properties.get(PROPERTY_REWRITE_PATH), DEFAULT_REWRITE_DISABLED);
- appendSuffix = PropertiesUtil.toBoolean(properties.get(PROPERTY_APPEND_SUFFIX), DEFAULT_APPEND_SUFFIX);
+ rewritePath = cfg.include$_$filter_config_rewrite();
+ appendSuffix = cfg.include$_$filter_config_appendSuffix();
}
private PathMatcher choosePathMatcher(String pathPattern) {
diff --git a/src/main/java/org/apache/sling/dynamicinclude/ConfigurationWhiteboard.java b/src/main/java/org/apache/sling/dynamicinclude/ConfigurationWhiteboard.java
index 377fbe7..5755dcf 100644
--- a/src/main/java/org/apache/sling/dynamicinclude/ConfigurationWhiteboard.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/ConfigurationWhiteboard.java
@@ -19,23 +19,23 @@
package org.apache.sling.dynamicinclude;
-import java.util.Set;
+import static org.osgi.service.component.annotations.FieldOption.UPDATE;
+import static org.osgi.service.component.annotations.ReferenceCardinality.MULTIPLE;
+import static org.osgi.service.component.annotations.ReferencePolicy.DYNAMIC;
+
+import java.util.Collection;
import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.regex.Matcher;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.ReferencePolicy;
-import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
-@Component
-@Service(ConfigurationWhiteboard.class)
+@Component(service = ConfigurationWhiteboard.class)
public class ConfigurationWhiteboard {
- @Reference(referenceInterface = Configuration.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC)
- private Set<Configuration> configs = new CopyOnWriteArraySet<Configuration>();
+ @Reference(service = Configuration.class, cardinality = MULTIPLE, policy = DYNAMIC, fieldOption = UPDATE)
+ // declared Collection due to SLING-8986
+ private volatile Collection<Configuration> configs = new CopyOnWriteArraySet<Configuration>();
public Configuration getConfiguration(SlingHttpServletRequest request, String resourceType) {
for (Configuration c : configs) {
@@ -50,12 +50,9 @@ public class ConfigurationWhiteboard {
final String requestPath = request.getRequestPathInfo().getResourcePath();
return config.isEnabled() && config.getPathMatcher().match(requestPath);
}
-
- protected void bindConfigs(final Configuration config) {
+
+ // visible for testing
+ void bindConfigs(final Configuration config) {
configs.add(config);
}
-
- protected void unbindConfigs(final Configuration config) {
- configs.remove(config);
- }
}
diff --git a/src/main/java/org/apache/sling/dynamicinclude/IncludeTagFilter.java b/src/main/java/org/apache/sling/dynamicinclude/IncludeTagFilter.java
index 66bdba8..396984b 100644
--- a/src/main/java/org/apache/sling/dynamicinclude/IncludeTagFilter.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/IncludeTagFilter.java
@@ -35,19 +35,22 @@ import javax.servlet.ServletResponse;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.sling.SlingFilter;
-import org.apache.felix.scr.annotations.sling.SlingFilterScope;
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.generator.IncludeGeneratorWhiteboard;
import org.apache.sling.dynamicinclude.impl.UrlBuilder;
+import org.apache.sling.servlets.annotations.SlingServletFilter;
+import org.apache.sling.servlets.annotations.SlingServletFilterScope;
+import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@SlingFilter(scope = SlingFilterScope.INCLUDE, order = -500)
+@SlingServletFilter(scope = SlingServletFilterScope.INCLUDE)
+@Component(property = { Constants.SERVICE_RANKING + ":Integer=-500"} )
public class IncludeTagFilter implements Filter {
private static final Logger LOG = LoggerFactory.getLogger(IncludeTagFilter.class);
diff --git a/src/main/java/org/apache/sling/dynamicinclude/SyntheticResourceFilter.java b/src/main/java/org/apache/sling/dynamicinclude/SyntheticResourceFilter.java
index ef02a96..5073fec 100644
--- a/src/main/java/org/apache/sling/dynamicinclude/SyntheticResourceFilter.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/SyntheticResourceFilter.java
@@ -30,24 +30,21 @@ import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.commons.lang3.StringUtils;
-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.Reference;
-import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.request.RequestDispatcherOptions;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
-import org.apache.sling.engine.EngineConstants;
+import org.apache.sling.servlets.annotations.SlingServletFilter;
+import org.apache.sling.servlets.annotations.SlingServletFilterScope;
import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
-@Component(metatype = true, label = "Apache Sling Dynamic Include - Synthetic Resource Filter")
-@Service
-@Properties({
- @Property(name = Constants.SERVICE_VENDOR, value = "The Apache Software Foundation"),
- @Property(name = EngineConstants.SLING_FILTER_SCOPE, value = EngineConstants.FILTER_SCOPE_REQUEST, propertyPrivate = true),
- @Property(name = Constants.SERVICE_RANKING, intValue = Integer.MIN_VALUE, propertyPrivate = false) })
+@SlingServletFilter(scope = SlingServletFilterScope.REQUEST)
+@Component(property = {
+ Constants.SERVICE_RANKING + ":Integer=" + Integer.MIN_VALUE,
+ Constants.SERVICE_VENDOR +"=The Apache Software Foundation"
+})
public class SyntheticResourceFilter implements Filter {
@Reference
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 aaaaf1a..8294744 100755
--- a/src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGeneratorWhiteboard.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/generator/IncludeGeneratorWhiteboard.java
@@ -19,24 +19,24 @@
package org.apache.sling.dynamicinclude.generator;
+import static org.osgi.service.component.annotations.FieldOption.UPDATE;
+import static org.osgi.service.component.annotations.ReferenceCardinality.MULTIPLE;
+import static org.osgi.service.component.annotations.ReferencePolicy.DYNAMIC;
+
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.ReferencePolicy;
-import org.apache.felix.scr.annotations.Service;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
/**
* Service that provides include generator of given type.
*/
-@Component
-@Service(IncludeGeneratorWhiteboard.class)
+@Component(service = IncludeGeneratorWhiteboard.class)
public class IncludeGeneratorWhiteboard {
- @Reference(referenceInterface = IncludeGenerator.class, cardinality = ReferenceCardinality.MANDATORY_MULTIPLE, policy = ReferencePolicy.DYNAMIC)
+ @Reference(service = IncludeGenerator.class, cardinality = MULTIPLE, policy = DYNAMIC, fieldOption = UPDATE)
private Set<IncludeGenerator> generators = new CopyOnWriteArraySet<IncludeGenerator>();
public IncludeGenerator getGenerator(String type) {
@@ -47,13 +47,4 @@ public class IncludeGeneratorWhiteboard {
}
return null;
}
-
- void bindGenerators(IncludeGenerator generator) {
- generators.add(generator);
- }
-
- void unbindGenerators(IncludeGenerator generator) {
- generators.remove(generator);
- }
-
}
diff --git a/src/main/java/org/apache/sling/dynamicinclude/generator/package-info.java b/src/main/java/org/apache/sling/dynamicinclude/generator/package-info.java
index 91d2fc9..823689b 100644
--- a/src/main/java/org/apache/sling/dynamicinclude/generator/package-info.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/generator/package-info.java
@@ -18,5 +18,4 @@
*/
@Version("3.0.0")
package org.apache.sling.dynamicinclude.generator;
-import aQute.bnd.annotation.Version;
-
+import org.osgi.annotation.versioning.Version;
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 0e89283..0d47fcd 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,15 +20,13 @@
package org.apache.sling.dynamicinclude.generator.types;
import org.apache.commons.lang3.StringEscapeUtils;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Service;
import org.apache.sling.dynamicinclude.generator.IncludeGenerator;
+import org.osgi.service.component.annotations.Component;
/**
* ESI include generator
*/
@Component
-@Service
public class EsiGenerator implements IncludeGenerator {
private static final String GENERATOR_NAME = "ESI";
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 a251a24..a796022 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,11 +27,10 @@ import java.io.UnsupportedEncodingException;
import java.net.URL;
import org.apache.commons.lang3.StringEscapeUtils;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Service;
import org.apache.sling.dynamicinclude.generator.IncludeGenerator;
import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,7 +38,6 @@ import org.slf4j.LoggerFactory;
* Client side include generator - using Ajax/JQuery.
*/
@Component
-@Service
public class JsiGenerator implements IncludeGenerator {
private static final String TEMPLATE_FILENAME = "generators/jquery.html";
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 efa5712..718d506 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,15 +19,13 @@
package org.apache.sling.dynamicinclude.generator.types;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Service;
import org.apache.sling.dynamicinclude.generator.IncludeGenerator;
+import org.osgi.service.component.annotations.Component;
/**
* Apache SSI include generator
*/
@Component
-@Service
public class SsiGenerator implements IncludeGenerator {
private static final String GENERATOR_NAME = "SSI";
diff --git a/src/main/java/org/apache/sling/dynamicinclude/generator/types/package-info.java b/src/main/java/org/apache/sling/dynamicinclude/generator/types/package-info.java
index 2ffbf94..41f423e 100644
--- a/src/main/java/org/apache/sling/dynamicinclude/generator/types/package-info.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/generator/types/package-info.java
@@ -18,5 +18,4 @@
*/
@Version("3.0.0")
package org.apache.sling.dynamicinclude.generator.types;
-import aQute.bnd.annotation.Version;
-
+import org.osgi.annotation.versioning.Version;
diff --git a/src/main/java/org/apache/sling/dynamicinclude/package-info.java b/src/main/java/org/apache/sling/dynamicinclude/package-info.java
index 70512f2..20757e4 100644
--- a/src/main/java/org/apache/sling/dynamicinclude/package-info.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/package-info.java
@@ -18,5 +18,4 @@
*/
@Version("4.2.1")
package org.apache.sling.dynamicinclude;
-import aQute.bnd.annotation.Version;
-
+import org.osgi.annotation.versioning.Version;
diff --git a/src/main/java/org/apache/sling/dynamicinclude/pathmatcher/package-info.java b/src/main/java/org/apache/sling/dynamicinclude/pathmatcher/package-info.java
index 1eb7026..e067a58 100644
--- a/src/main/java/org/apache/sling/dynamicinclude/pathmatcher/package-info.java
+++ b/src/main/java/org/apache/sling/dynamicinclude/pathmatcher/package-info.java
@@ -18,5 +18,4 @@
*/
@Version("3.0.0")
package org.apache.sling.dynamicinclude.pathmatcher;
-import aQute.bnd.annotation.Version;
-
+import org.osgi.annotation.versioning.Version;
diff --git a/src/test/java/org/apache/sling/dynamicinclude/ConfigurationTest.java b/src/test/java/org/apache/sling/dynamicinclude/ConfigurationTest.java
index d430458..85cdf8a 100644
--- a/src/test/java/org/apache/sling/dynamicinclude/ConfigurationTest.java
+++ b/src/test/java/org/apache/sling/dynamicinclude/ConfigurationTest.java
@@ -24,40 +24,42 @@ import static org.hamcrest.MatcherAssert.assertThat;
import java.util.HashMap;
import java.util.Map;
-import java.util.regex.PatternSyntaxException;
import org.apache.sling.dynamicinclude.pathmatcher.PrefixPathMatcher;
+import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
public class ConfigurationTest {
private Configuration tested;
+
+ @Rule
+ public final OsgiContext context = new OsgiContext();
@Before
public void setUp() {
tested = new Configuration();
}
- @Test(expected = PatternSyntaxException.class)
+ @Test(expected = RuntimeException.class)
public void shouldThrowExceptionWhenRegexisInvalid() throws Exception {
- Map<String, Object> properties = new HashMap<String, Object>();
- properties.put(Configuration.PROPERTY_FILTER_PATH, "^(");
-
- tested.activate(null, properties);
+
+ context.registerInjectActivateService(tested, "include-filter.config.path", "^(");
}
@Test
public void shouldSetDefaultValuesWhenPropertiesAreEmpty() throws Exception {
Map<String, Object> properties = new HashMap<String, Object>();
- tested.activate(null, properties);
+ context.registerInjectActivateService(tested, properties);
assertThat(tested.getPathMatcher().getClass().isAssignableFrom(PrefixPathMatcher.class), is(true));
assertThat(tested.getAddComment(), is(false));
assertThat(tested.getIgnoreUrlParams().size(), is(0));
- assertThat(tested.getIncludeSelector(), is(Configuration.DEFAULT_FILTER_SELECTOR));
- assertThat(tested.getIncludeTypeName(), is(Configuration.DEFAULT_INCLUDE_TYPE));
- assertThat(tested.getRequiredHeader(), is(Configuration.DEFAULT_REQUIRED_HEADER));
+ assertThat(tested.getIncludeSelector(), is("nocache"));
+ assertThat(tested.getIncludeTypeName(), is("SSI"));
+ assertThat(tested.getRequiredHeader(), is("Server-Agent=Communique-Dispatcher"));
assertThat(tested.getTtl(), is(-1));
assertThat(tested.isEnabled(), is(false));
assertThat(tested.hasTtlSet(), is(false));
@@ -67,18 +69,18 @@ public class ConfigurationTest {
@Test
public void shouldSetConfigurationValues() throws Exception {
Map<String, Object> properties = new HashMap<String, Object>();
- properties.put(Configuration.PROPERTY_FILTER_PATH, "/content/test/path");
- properties.put(Configuration.PROPERTY_INCLUDE_TYPE, "ESI");
- properties.put(Configuration.PROPERTY_ADD_COMMENT, true);
- properties.put(Configuration.PROPERTY_COMPONENT_TTL, 60);
- properties.put(Configuration.PROPERTY_FILTER_ENABLED, true);
- properties.put(Configuration.PROPERTY_FILTER_RESOURCE_TYPES, new String[]{"test/resource/type"});
- properties.put(Configuration.PROPERTY_REQUIRED_HEADER, "CustomHeader: value");
- properties.put(Configuration.PROPERTY_FILTER_SELECTOR, "cache");
- properties.put(Configuration.PROPERTY_REWRITE_PATH, true);
- properties.put(Configuration.PROPERTY_IGNORE_URL_PARAMS, new String[] {"query"});
+ properties.put("include-filter.config.path", "/content/test/path");
+ properties.put("include-filter.config.include-type", "ESI");
+ 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.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"});
- tested.activate(null, properties);
+ context.registerInjectActivateService(tested, properties);
assertThat(tested.getPathMatcher().getClass().isAssignableFrom(PrefixPathMatcher.class), is(true));
assertThat(tested.getAddComment(), is(true));
diff --git a/src/test/java/org/apache/sling/dynamicinclude/ConfigurationWhiteboardTest.java b/src/test/java/org/apache/sling/dynamicinclude/ConfigurationWhiteboardTest.java
index c32e4d9..b53326b 100644
--- a/src/test/java/org/apache/sling/dynamicinclude/ConfigurationWhiteboardTest.java
+++ b/src/test/java/org/apache/sling/dynamicinclude/ConfigurationWhiteboardTest.java
@@ -18,9 +18,6 @@
*/
package org.apache.sling.dynamicinclude;
-import static org.apache.sling.dynamicinclude.Configuration.PROPERTY_FILTER_ENABLED;
-import static org.apache.sling.dynamicinclude.Configuration.PROPERTY_FILTER_PATH;
-import static org.apache.sling.dynamicinclude.Configuration.PROPERTY_FILTER_RESOURCE_TYPES;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -28,9 +25,12 @@ import static org.mockito.Mockito.when;
import java.util.HashMap;
import java.util.Map;
+
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.request.RequestPathInfo;
+import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -38,9 +38,12 @@ import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class ConfigurationWhiteboardTest {
-
+
private static final String TEST_RESOURCE_PATH = "/content/test/engl/home/pageresource";
public static final String TEST_RESOURCE_TYPE = "test/component/resourceType";
+
+ @Rule
+ public final OsgiContext context = new OsgiContext();
private ConfigurationWhiteboard tested;
@@ -60,11 +63,11 @@ public class ConfigurationWhiteboardTest {
private Configuration buildConfiguration(boolean enabled, String pathRegex, String[] resourceTypes) {
Configuration configuration = new Configuration();
Map<String, Object> properties = new HashMap<String, Object>();
- properties.put(PROPERTY_FILTER_ENABLED, enabled);
- properties.put(PROPERTY_FILTER_PATH, pathRegex);
- properties.put(PROPERTY_FILTER_RESOURCE_TYPES, resourceTypes);
- configuration.activate(null, properties);
- return configuration;
+ properties.put("include-filter.config.enabled", enabled);
+ properties.put("include-filter.config.path", pathRegex);
+ properties.put("include-filter.config.resource-types", resourceTypes);
+
+ return context.registerInjectActivateService(configuration, properties);
}
@Test
@@ -74,25 +77,25 @@ public class ConfigurationWhiteboardTest {
@Test
public void shouldNotReturnConfigurationIfResourceTypeDoesNotMatch() throws Exception {
- Configuration testConfiguration = buildConfiguration(true, "^/content.*$", new String[]{"invalid/resourceType"});
- tested.bindConfigs(testConfiguration);
+ buildConfiguration(true, "^/content.*$", new String[]{"invalid/resourceType"});
+ context.registerInjectActivateService(tested);
assertThat(tested.getConfiguration(request, TEST_RESOURCE_TYPE), is(nullValue()));
}
@Test
public void shouldNotReturnConfigurationIfConfigurationIsDisabled() throws Exception {
- Configuration testConfiguration = buildConfiguration(false, "^/content.*$", new String[]{TEST_RESOURCE_TYPE});
- tested.bindConfigs(testConfiguration);
+ buildConfiguration(false, "^/content.*$", new String[]{TEST_RESOURCE_TYPE});
+ context.registerInjectActivateService(tested);
assertThat(tested.getConfiguration(request, TEST_RESOURCE_TYPE), is(nullValue()));
}
@Test
public void shouldNotReturnConfigurationIfPathDoesNotMatchRegex() throws Exception {
- Configuration testConfiguration = buildConfiguration(true, "^/content/notMatched/.*$",
+ buildConfiguration(true, "^/content/notMatched/.*$",
new String[]{TEST_RESOURCE_TYPE});
- tested.bindConfigs(testConfiguration);
+ context.registerInjectActivateService(tested);
assertThat(tested.getConfiguration(request, TEST_RESOURCE_TYPE), is(nullValue()));
}
@@ -100,7 +103,7 @@ public class ConfigurationWhiteboardTest {
@Test
public void shouldReturnValidConfiguration() throws Exception {
Configuration testConfiguration = buildConfiguration(true, "^/content.*$", new String[]{TEST_RESOURCE_TYPE});
- tested.bindConfigs(testConfiguration);
+ context.registerInjectActivateService(tested);
assertThat(tested.getConfiguration(request, TEST_RESOURCE_TYPE), is(testConfiguration));
}