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;
+ }
+}