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]>.

Reply via email to