You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2011/05/24 21:07:03 UTC

svn commit: r1127225 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/config/DefaultConfigProcessor.java test/java/org/apache/shindig/gadgets/config/ test/java/org/apache/shindig/gadgets/config/DefaultConfigProcessorTest.java

Author: johnh
Date: Tue May 24 19:07:02 2011
New Revision: 1127225

URL: http://svn.apache.org/viewvc?rev=1127225&view=rev
Log:
Allow optional injection of global config contributors.


Added:
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/config/
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/config/DefaultConfigProcessorTest.java
Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigProcessor.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigProcessor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigProcessor.java?rev=1127225&r1=1127224&r2=1127225&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigProcessor.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigProcessor.java Tue May 24 19:07:02 2011
@@ -18,6 +18,7 @@
 package org.apache.shindig.gadgets.config;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.inject.Inject;
 
@@ -32,6 +33,7 @@ public class DefaultConfigProcessor impl
   static final String GADGETS_FEATURES_KEY = "gadgets.features";
 
   private final Map<String, ConfigContributor> featureContributors;
+  private final List<ConfigContributor> globalContributors;
   private final ContainerConfig containerConfig;
   
   @Inject
@@ -39,14 +41,26 @@ public class DefaultConfigProcessor impl
       Map<String, ConfigContributor> featureContributors,
       ContainerConfig containerConfig) {
     this.featureContributors = featureContributors;
+    this.globalContributors = Lists.newLinkedList();
     this.containerConfig = containerConfig;
   }
   
+  @Inject(optional = true)
+  public void setGlobalContributors(List<ConfigContributor> globalContribs) {
+    globalContributors.addAll(globalContribs);
+  }
+  
   public Map<String, Object> getConfig(String container, List<String> features, String host,
       Gadget gadget) {
+    Map<String, Object> config = Maps.newHashMap();
+
+    // Perform global config
+    for (ConfigContributor contrib : globalContributors) {
+      contribute(contrib, config, container, host, gadget);
+    }
+    
     // Append some container specific things
     Map<String, Object> featureConfig = containerConfig.getMap(container, GADGETS_FEATURES_KEY);
-    Map<String, Object> config = Maps.newHashMap();
     
     if (featureConfig != null) {
       // Discard what we don't care about.
@@ -56,17 +70,21 @@ public class DefaultConfigProcessor impl
         if (conf != null) {
           config.put(name, conf);
         }
-        ConfigContributor contributor = featureContributors.get(name);
-        if (contributor != null) {
-          if (host != null) {
-            contributor.contribute(config, container, host);
-          } else if (gadget != null) {
-            contributor.contribute(config, gadget);
-          }
-        }
+        contribute(featureContributors.get(name), config, container, host, gadget);
       }
     }
     return config;
   }
+  
+  private void contribute(ConfigContributor contrib, Map<String, Object> config, String container,
+      String host, Gadget gadget) {
+    if (contrib != null) {
+      if (host != null) {
+        contrib.contribute(config, container, host);
+      } else if (gadget != null) {
+        contrib.contribute(config, gadget);
+      }
+    }
+  }
 
 }

Added: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/config/DefaultConfigProcessorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/config/DefaultConfigProcessorTest.java?rev=1127225&view=auto
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/config/DefaultConfigProcessorTest.java (added)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/config/DefaultConfigProcessorTest.java Tue May 24 19:07:02 2011
@@ -0,0 +1,122 @@
+/*
+ * 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.shindig.gadgets.config;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.notNull;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+
+import org.apache.shindig.config.ContainerConfig;
+import org.apache.shindig.gadgets.Gadget;
+import org.easymock.EasyMock;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.List;
+import java.util.Map;
+
+public class DefaultConfigProcessorTest {
+  private static final String CONFIG_FEATURE = "config-feature";
+  private static final List<String> CONFIG_FEATURES = Lists.newArrayList(CONFIG_FEATURE);
+  private static final Map<String, Object> CONFIG_FEATURE_MAP = ImmutableMap.<String, Object>of("key1", "val1", "key2", "val2");
+  private static final String NOCONFIG_FEATURE = "noconfig-feature";
+  private static final String CONTAINER = "container";
+  private static final String HOST = "host";
+  private static final Gadget GADGET = new Gadget();
+  
+  private ContainerConfig config;
+  
+  @Before
+  public void setUp() {
+    config = createMock(ContainerConfig.class);
+    expect(config.getMap(CONTAINER, DefaultConfigProcessor.GADGETS_FEATURES_KEY)).andReturn(CONFIG_FEATURE_MAP);
+    replay(config);
+  }
+  
+  @Test
+  public void testGlobalConfig() {
+    ConfigContributor contrib = mockContrib(HOST);
+    List<ConfigContributor> globalContrib = Lists.newArrayList(contrib);
+    ConfigContributor noContrib = mockContrib((String)null);
+    Map<String, ConfigContributor> featureContrib = ImmutableMap.of(NOCONFIG_FEATURE, noContrib);
+    DefaultConfigProcessor processor = new DefaultConfigProcessor(featureContrib, config);
+    processor.setGlobalContributors(globalContrib);
+    processor.getConfig(CONTAINER, CONFIG_FEATURES, HOST, null);
+    verify(config, contrib, noContrib);
+  }
+  
+  @Test
+  public void testFeatureConfigHost() {
+    ConfigContributor contrib = mockContrib(HOST);
+    List<ConfigContributor> globalContrib = Lists.newArrayList();
+    ConfigContributor noContrib = mockContrib((String)null);
+    Map<String, ConfigContributor> featureContrib = ImmutableMap.of(CONFIG_FEATURE, contrib,
+        NOCONFIG_FEATURE, noContrib);
+    DefaultConfigProcessor processor = new DefaultConfigProcessor(featureContrib, config);
+    processor.setGlobalContributors(globalContrib);
+    processor.getConfig(CONTAINER, CONFIG_FEATURES, HOST, null);
+    verify(config, contrib, noContrib);
+  }
+  
+  @Test
+  public void testFeatureConfigGadget() {
+    ConfigContributor contrib = mockContrib(GADGET);
+    List<ConfigContributor> globalContrib = Lists.newArrayList();
+    ConfigContributor noContrib = mockContrib((Gadget)null);
+    Map<String, ConfigContributor> featureContrib = ImmutableMap.of(CONFIG_FEATURE, contrib,
+        NOCONFIG_FEATURE, noContrib);
+    DefaultConfigProcessor processor = new DefaultConfigProcessor(featureContrib, config);
+    processor.setGlobalContributors(globalContrib);
+    processor.getConfig(CONTAINER, CONFIG_FEATURES, null, GADGET);
+    verify(config, contrib, noContrib);
+  }
+  
+  @SuppressWarnings("unchecked")
+  private ConfigContributor mockContrib(String host) {
+    ConfigContributor contrib = EasyMock.createMock(ConfigContributor.class);
+    createMock(ConfigContributor.class);
+    if (host != null) {
+      contrib.contribute((Map<String, Object>) notNull(), eq(CONTAINER), eq(host));
+      expectLastCall();
+    }
+    replay(contrib);
+    return contrib;
+  }
+  
+  @SuppressWarnings("unchecked")
+  private ConfigContributor mockContrib(Gadget gadget) {
+    ConfigContributor contrib = EasyMock.createMock(ConfigContributor.class);
+    createMock(ConfigContributor.class);
+    if (gadget != null) {
+      contrib.contribute((Map<String, Object>) notNull(), eq(gadget));
+      expectLastCall();
+    }
+    replay(contrib);
+    return contrib;
+  }
+}