This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.featureflags-1.0.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-featureflags.git
commit 35ebee9a827ec6cd78f2122ce9ce4b3c3031cde5 Author: Carsten Ziegeler <[email protected]> AuthorDate: Fri Jan 3 08:52:41 2014 +0000 Take III, add Feature interface and support adapting to functionality interfaces git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/feature-flags@1555034 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/sling/featureflags/Feature.java | 2 +- ...rceTypeMapper.java => ResourceTypeMapping.java} | 2 +- .../sling/featureflags/impl/ClientContextImpl.java | 24 ++++++----------- .../sling/featureflags/impl/FeatureManager.java | 5 ++-- .../featureflags/impl/ResourceDecoratorImpl.java | 30 ++++++++++------------ 5 files changed, 26 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/apache/sling/featureflags/Feature.java b/src/main/java/org/apache/sling/featureflags/Feature.java index 9dc0f26..cedbb61 100644 --- a/src/main/java/org/apache/sling/featureflags/Feature.java +++ b/src/main/java/org/apache/sling/featureflags/Feature.java @@ -28,7 +28,7 @@ import aQute.bnd.annotation.ConsumerType; * be adapted to different services, like * <ul> * <li>{@link ResourceHiding}</li> - * <li>{@link ResourceTypeMapper}</li> + * <li>{@link ResourceTypeMapping}</li> * </ul> */ @ConsumerType diff --git a/src/main/java/org/apache/sling/featureflags/ResourceTypeMapper.java b/src/main/java/org/apache/sling/featureflags/ResourceTypeMapping.java similarity index 97% rename from src/main/java/org/apache/sling/featureflags/ResourceTypeMapper.java rename to src/main/java/org/apache/sling/featureflags/ResourceTypeMapping.java index 311990e..7f6f3c6 100644 --- a/src/main/java/org/apache/sling/featureflags/ResourceTypeMapper.java +++ b/src/main/java/org/apache/sling/featureflags/ResourceTypeMapping.java @@ -27,7 +27,7 @@ import aQute.bnd.annotation.ConsumerType; * this service interface. */ @ConsumerType -public interface ResourceTypeMapper { +public interface ResourceTypeMapping { /** * Returns the resource type mapping for a feature. diff --git a/src/main/java/org/apache/sling/featureflags/impl/ClientContextImpl.java b/src/main/java/org/apache/sling/featureflags/impl/ClientContextImpl.java index e15b798..03b0506 100644 --- a/src/main/java/org/apache/sling/featureflags/impl/ClientContextImpl.java +++ b/src/main/java/org/apache/sling/featureflags/impl/ClientContextImpl.java @@ -21,14 +21,15 @@ package org.apache.sling.featureflags.impl; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.sling.featureflags.ClientContext; import org.apache.sling.featureflags.Feature; import org.apache.sling.featureflags.ProviderContext; import org.apache.sling.featureflags.ResourceHiding; -import org.apache.sling.featureflags.ResourceTypeMapper; +import org.apache.sling.featureflags.ResourceTypeMapping; /** * Implementation of the client context @@ -41,32 +42,23 @@ public class ClientContextImpl implements ClientContext { private final List<ResourceHiding> hidingFeatures; - private final List<ResourceTypeMapper> mapperFeatures; + private final Map<String, String> mapperFeatures = new HashMap<String, String>(); public ClientContextImpl(final ProviderContext featureContext, final List<Feature> features) { - Collections.sort(features, new Comparator<Feature>() { - - @Override - public int compare(final Feature arg0, final Feature arg1) { - return arg0.getName().compareTo(arg1.getName()); - } - - }); this.enabledFeatures = Collections.unmodifiableList(features); final List<ResourceHiding> hiding = new ArrayList<ResourceHiding>(); - final List<ResourceTypeMapper> mapping = new ArrayList<ResourceTypeMapper>(); for(final Feature f : this.enabledFeatures) { final ResourceHiding rh = f.adaptTo(ResourceHiding.class); if ( rh != null ) { hiding.add(rh); } - final ResourceTypeMapper rm = f.adaptTo(ResourceTypeMapper.class); + final ResourceTypeMapping rm = f.adaptTo(ResourceTypeMapping.class); if ( rm != null ) { - mapping.add(rm); + final Map<String, String> mapping = rm.getResourceTypeMapping(); + mapperFeatures.putAll(mapping); } } this.hidingFeatures = hiding; - this.mapperFeatures = mapping; this.featureContext = featureContext; } @@ -93,7 +85,7 @@ public class ClientContextImpl implements ClientContext { return this.hidingFeatures; } - public Collection<ResourceTypeMapper> getMappingFeatures() { + public Map<String, String> getResourceTypeMapping() { return this.mapperFeatures; } } diff --git a/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java b/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java index 63faf52..c9813e3 100644 --- a/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java +++ b/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Reference; @@ -54,7 +55,7 @@ public class FeatureManager implements Features { private final Map<String, List<FeatureProviderDescription>> providers = new HashMap<String, List<FeatureProviderDescription>>(); - private Map<String, FeatureDescription> activeProviders = new HashMap<String, FeatureDescription>(); + private Map<String, FeatureDescription> activeProviders = new TreeMap<String, FeatureDescription>(); /** * Bind a new feature provider @@ -113,7 +114,7 @@ public class FeatureManager implements Features { } private void calculateActiveProviders() { - final Map<String, FeatureDescription> activeMap = new HashMap<String, FeatureDescription>(); + final Map<String, FeatureDescription> activeMap = new TreeMap<String, FeatureDescription>(); for(final Map.Entry<String, List<FeatureProviderDescription>> entry : this.providers.entrySet()) { final FeatureProviderDescription desc = entry.getValue().get(0); final FeatureDescription info = new FeatureDescription(); diff --git a/src/main/java/org/apache/sling/featureflags/impl/ResourceDecoratorImpl.java b/src/main/java/org/apache/sling/featureflags/impl/ResourceDecoratorImpl.java index 2118d43..e2f818d 100644 --- a/src/main/java/org/apache/sling/featureflags/impl/ResourceDecoratorImpl.java +++ b/src/main/java/org/apache/sling/featureflags/impl/ResourceDecoratorImpl.java @@ -27,7 +27,6 @@ import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceDecorator; import org.apache.sling.api.resource.ResourceWrapper; import org.apache.sling.featureflags.ClientContext; -import org.apache.sling.featureflags.ResourceTypeMapper; /** * Resource decorator implementing the resource type mapping @@ -43,24 +42,21 @@ public class ResourceDecoratorImpl implements ResourceDecorator { public Resource decorate(final Resource resource) { final ClientContext info = manager.getCurrentClientContext(); if ( info != null ) { - for(final ResourceTypeMapper f : ((ClientContextImpl)info).getMappingFeatures() ) { + final String resourceType = resource.getResourceType(); + final String overwriteType = ((ClientContextImpl)info).getResourceTypeMapping().get(resourceType); + if ( overwriteType != null ) { + return new ResourceWrapper(resource) { - final String resourceType = resource.getResourceType(); - final String overwriteType = f.getResourceTypeMapping().get(resourceType); - if ( overwriteType != null ) { - return new ResourceWrapper(resource) { + @Override + public String getResourceType() { + return overwriteType; + } - @Override - public String getResourceType() { - return overwriteType; - } - - @Override - public String getResourceSuperType() { - return resourceType; - } - }; - } + @Override + public String getResourceSuperType() { + return resourceType; + } + }; } } return resource; -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
