You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2016/08/19 16:26:25 UTC
svn commit: r1756930 - in
/sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags:
ExecutionContext.java impl/ConfiguredFeature.java
impl/ExecutionContextImpl.java impl/FeatureManager.java package-info.java
Author: cziegeler
Date: Fri Aug 19 16:26:24 2016
New Revision: 1756930
URL: http://svn.apache.org/viewvc?rev=1756930&view=rev
Log:
SLING-5981 : Provide access to Features service in execution context
Modified:
sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/ExecutionContext.java
sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/ConfiguredFeature.java
sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/ExecutionContextImpl.java
sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java
sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/package-info.java
Modified: sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/ExecutionContext.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/ExecutionContext.java?rev=1756930&r1=1756929&r2=1756930&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/ExecutionContext.java (original)
+++ sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/ExecutionContext.java Fri Aug 19 16:26:24 2016
@@ -60,4 +60,11 @@ public interface ExecutionContext {
* @return the resource resolver or {@code null}
*/
ResourceResolver getResourceResolver();
+
+ /**
+ * Return the {@link Features} manager. This allows a feature to find out
+ * about other features.
+ * @since 1.1.0
+ */
+ Features getFeatures();
}
Modified: sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/ConfiguredFeature.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/ConfiguredFeature.java?rev=1756930&r1=1756929&r2=1756930&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/ConfiguredFeature.java (original)
+++ sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/ConfiguredFeature.java Fri Aug 19 16:26:24 2016
@@ -34,7 +34,10 @@ import org.osgi.service.metatype.annotat
@Designate(ocd = ConfiguredFeature.Config.class, factory = true)
@Component(service = Feature.class,
- configurationPolicy = ConfigurationPolicy.REQUIRE)
+ configurationPolicy = ConfigurationPolicy.REQUIRE,
+ property = {
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation"
+ })
public class ConfiguredFeature implements Feature {
@ObjectClassDefinition(name = "Apache Sling Configured Feature",
Modified: sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/ExecutionContextImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/ExecutionContextImpl.java?rev=1756930&r1=1756929&r2=1756930&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/ExecutionContextImpl.java (original)
+++ sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/ExecutionContextImpl.java Fri Aug 19 16:26:24 2016
@@ -23,9 +23,11 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest;
+import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.featureflags.ExecutionContext;
import org.apache.sling.featureflags.Feature;
+import org.apache.sling.featureflags.Features;
/**
* Implementation of the provider context.
@@ -40,18 +42,25 @@ public class ExecutionContextImpl implem
private final Map<String, Boolean> featureCache;
- public ExecutionContextImpl(final HttpServletRequest request) {
+ private final Features features;
+
+ public ExecutionContextImpl(final Features features, final HttpServletRequest request) {
ResourceResolver resourceResolver = null;
if (request != null) {
- Object resolverObject = request.getAttribute(REQUEST_ATTRIBUTE_RESOLVER);
- if (resolverObject instanceof ResourceResolver) {
- resourceResolver = (ResourceResolver) resolverObject;
+ if ( request instanceof SlingHttpServletRequest ) {
+ resourceResolver = ((SlingHttpServletRequest)request).getResourceResolver();
+ } else {
+ Object resolverObject = request.getAttribute(REQUEST_ATTRIBUTE_RESOLVER);
+ if (resolverObject instanceof ResourceResolver) {
+ resourceResolver = (ResourceResolver) resolverObject;
+ }
}
}
this.request = request;
this.resourceResolver = resourceResolver;
this.featureCache = new HashMap<String, Boolean>();
+ this.features = features;
}
@Override
@@ -64,11 +73,18 @@ public class ExecutionContextImpl implem
return this.resourceResolver;
}
- boolean isEnabled(Feature feature) {
+ @Override
+ public Features getFeatures() {
+ return this.features;
+ }
+
+ boolean isEnabled(final Feature feature) {
final String name = feature.getName();
Boolean entry = this.featureCache.get(name);
if (entry == null) {
- entry = Boolean.valueOf(feature.isEnabled(this));
+ // put false in the cache to stop on circular calls
+ this.featureCache.put(name, Boolean.FALSE);
+ entry = feature.isEnabled(this);
this.featureCache.put(name, entry);
}
return entry;
Modified: sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java?rev=1756930&r1=1756929&r2=1756930&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java (original)
+++ sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java Fri Aug 19 16:26:24 2016
@@ -62,7 +62,8 @@ import org.slf4j.LoggerFactory;
"felix.webconsole.label=features",
"felix.webconsole.title=Features",
"felix.webconsole.category=Sling",
- Constants.SERVICE_RANKING + ":Integer=16384"
+ Constants.SERVICE_RANKING + ":Integer=16384",
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation"
})
public class FeatureManager implements Features, Filter, Servlet {
@@ -90,7 +91,7 @@ public class FeatureManager implements F
}
@Override
- public boolean isEnabled(String featureName) {
+ public boolean isEnabled(final String featureName) {
final Feature feature = this.getFeature(featureName);
if (feature != null) {
return getCurrentExecutionContext().isEnabled(feature);
@@ -101,15 +102,17 @@ public class FeatureManager implements F
//--- Filter
@Override
- public void init(FilterConfig filterConfig) {
- // nothing todo do
+ public void init(final FilterConfig filterConfig) {
+ // nothing to do
}
@Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
- ServletException {
+ public void doFilter(final ServletRequest request,
+ final ServletResponse response,
+ final FilterChain chain)
+ throws IOException, ServletException {
+ this.pushContext((HttpServletRequest) request);
try {
- this.pushContext((HttpServletRequest) request);
chain.doFilter(request, response);
} finally {
this.popContext();
@@ -125,7 +128,7 @@ public class FeatureManager implements F
//--- Servlet
@Override
- public void init(ServletConfig config) {
+ public void init(final ServletConfig config) {
this.servletConfig = config;
}
@@ -221,7 +224,7 @@ public class FeatureManager implements F
//--- Client Context management and access
void pushContext(final HttpServletRequest request) {
- this.perThreadClientContext.set(new ExecutionContextImpl(request));
+ this.perThreadClientContext.set(new ExecutionContextImpl(this, request));
}
void popContext() {
@@ -230,7 +233,7 @@ public class FeatureManager implements F
ExecutionContextImpl getCurrentExecutionContext() {
ExecutionContextImpl ctx = this.perThreadClientContext.get();
- return (ctx != null) ? ctx : new ExecutionContextImpl(null);
+ return (ctx != null) ? ctx : new ExecutionContextImpl(this, null);
}
/**
Modified: sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/package-info.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/package-info.java?rev=1756930&r1=1756929&r2=1756930&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/package-info.java (original)
+++ sling/trunk/bundles/extensions/feature-flags/src/main/java/org/apache/sling/featureflags/package-info.java Fri Aug 19 16:26:24 2016
@@ -60,8 +60,8 @@
* </tr>
* </table>
*
- * @version 1.0
+ * @version 1.1
* @see <a href="http://sling.apache.org/documentation/the-sling-engine/featureflags.html">Feature Flags</a>
*/
-@org.osgi.annotation.versioning.Version("1.0.1")
+@org.osgi.annotation.versioning.Version("1.1.0")
package org.apache.sling.featureflags;