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/04 10:38:01 UTC
svn commit: r1099371 - in /shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/config/
main/java/org/apache/shindig/gadgets/js/
main/java/org/apache/shindig/gadgets/render/
test/java/org/apache/shindig/gadgets/js/ test/java/org/apache/...
Author: johnh
Date: Wed May 4 08:38:00 2011
New Revision: 1099371
URL: http://svn.apache.org/viewvc?rev=1099371&view=rev
Log:
Refactor config-map generation into a separate class shared by JS and gadget rendering.
This both shares code and allows convenient overriding of this generation pipeline.
Added:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ConfigProcessor.java
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/DefaultConfigContributorModule.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/ConfigInjectionProcessor.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/CompilationProcessorTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/ConfigInjectionProcessorTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
Added: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ConfigProcessor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ConfigProcessor.java?rev=1099371&view=auto
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ConfigProcessor.java (added)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/ConfigProcessor.java Wed May 4 08:38:00 2011
@@ -0,0 +1,29 @@
+/*
+ * 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 java.util.List;
+import java.util.Map;
+
+import org.apache.shindig.gadgets.Gadget;
+
+public interface ConfigProcessor {
+ // TODO: Clean up ConfigContributor interfaces so this lame uber-interface is not needed.
+ Map<String, Object> getConfig(String container, List<String> features, String host,
+ Gadget gadget);
+}
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigContributorModule.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigContributorModule.java?rev=1099371&r1=1099370&r2=1099371&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigContributorModule.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigContributorModule.java Wed May 4 08:38:00 2011
@@ -29,6 +29,7 @@ public class DefaultConfigContributorMod
@Override
protected void configure() {
registerConfigContributors();
+ bind(ConfigProcessor.class).to(DefaultConfigProcessor.class);
}
protected void registerConfigContributors() {
Added: 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=1099371&view=auto
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigProcessor.java (added)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/config/DefaultConfigProcessor.java Wed May 4 08:38:00 2011
@@ -0,0 +1,72 @@
+/*
+ * 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 com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Maps;
+import com.google.inject.Inject;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.shindig.config.ContainerConfig;
+import org.apache.shindig.gadgets.Gadget;
+
+public class DefaultConfigProcessor implements ConfigProcessor {
+ @VisibleForTesting
+ static final String GADGETS_FEATURES_KEY = "gadgets.features";
+
+ private final Map<String, ConfigContributor> featureContributors;
+ private final ContainerConfig containerConfig;
+
+ @Inject
+ public DefaultConfigProcessor(
+ Map<String, ConfigContributor> featureContributors,
+ ContainerConfig containerConfig) {
+ this.featureContributors = featureContributors;
+ this.containerConfig = containerConfig;
+ }
+
+ public Map<String, Object> getConfig(String container, List<String> features, String host,
+ Gadget 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.
+ for (String name : features) {
+ Object conf = featureConfig.get(name);
+ // Add from containerConfig.
+ 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);
+ }
+ }
+ }
+ }
+ return config;
+ }
+
+}
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/ConfigInjectionProcessor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/ConfigInjectionProcessor.java?rev=1099371&r1=1099370&r2=1099371&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/ConfigInjectionProcessor.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/ConfigInjectionProcessor.java Wed May 4 08:38:00 2011
@@ -20,15 +20,13 @@ package org.apache.shindig.gadgets.js;
import java.util.Map;
import org.apache.shindig.common.JsonSerializer;
-import org.apache.shindig.config.ContainerConfig;
import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.RenderingContext;
-import org.apache.shindig.gadgets.config.ConfigContributor;
+import org.apache.shindig.gadgets.config.ConfigProcessor;
import org.apache.shindig.gadgets.features.FeatureRegistry;
import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Maps;
import com.google.inject.Inject;
public class ConfigInjectionProcessor implements JsProcessor {
@@ -37,17 +35,14 @@ public class ConfigInjectionProcessor im
static final String GADGETS_FEATURES_KEY = "gadgets.features";
private final FeatureRegistry registry;
- private final ContainerConfig containerConfig;
- private final Map<String, ConfigContributor> configContributors;
+ private final ConfigProcessor configProcessor;
@Inject
public ConfigInjectionProcessor(
FeatureRegistry registry,
- ContainerConfig containerConfig,
- Map<String, ConfigContributor> configContributors) {
+ ConfigProcessor configProcessor) {
this.registry = registry;
- this.containerConfig = containerConfig;
- this.configContributors = configContributors;
+ this.configProcessor = configProcessor;
}
public boolean process(JsRequest request, JsResponseBuilder builder) {
@@ -56,31 +51,11 @@ public class ConfigInjectionProcessor im
// Append gadgets.config initialization if not in standard gadget mode.
if (ctx.getRenderingContext() != RenderingContext.GADGET) {
- String container = ctx.getContainer();
-
- // Append some container specific things
- Map<String, Object> features = containerConfig.getMap(container, GADGETS_FEATURES_KEY);
-
- if (features != null) {
- Map<String, Object> config =
- Maps.newHashMapWithExpectedSize(features.size() + 2);
-
- // Discard what we don't care about.
- for (String name : registry.getFeatures(jsUri.getLibs())) {
- Object conf = features.get(name);
- // Add from containerConfig.
- if (conf != null) {
- config.put(name, conf);
- }
- ConfigContributor contributor = configContributors.get(name);
- if (contributor != null) {
- contributor.contribute(config, container, request.getHost());
- }
- }
- if (!config.isEmpty()) {
- builder.appendJs(
- "gadgets.config.init(" + JsonSerializer.serialize(config) + ");\n", CONFIG_INIT_ID);
- }
+ Map<String, Object> config = configProcessor.getConfig(
+ ctx.getContainer(), registry.getFeatures(jsUri.getLibs()), request.getHost(), null);
+ if (!config.isEmpty()) {
+ builder.appendJs(
+ "gadgets.config.init(" + JsonSerializer.serialize(config) + ");\n", CONFIG_INIT_ID);
}
}
return true;
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java?rev=1099371&r1=1099370&r2=1099371&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriter.java Wed May 4 08:38:00 2011
@@ -29,7 +29,7 @@ import org.apache.shindig.gadgets.Gadget
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.MessageBundleFactory;
import org.apache.shindig.gadgets.UnsupportedFeatureException;
-import org.apache.shindig.gadgets.config.ConfigContributor;
+import org.apache.shindig.gadgets.config.ConfigProcessor;
import org.apache.shindig.gadgets.features.FeatureRegistry;
import org.apache.shindig.gadgets.features.FeatureResource;
import org.apache.shindig.gadgets.preload.PreloadException;
@@ -103,14 +103,13 @@ public class RenderingGadgetRewriter imp
protected final ContainerConfig containerConfig;
protected final FeatureRegistry featureRegistry;
protected final JsUriManager jsUriManager;
- protected final Map<String, ConfigContributor> configContributors;
-
+ protected final ConfigProcessor configProcessor;
protected Set<String> defaultExternLibs = ImmutableSet.of();
protected Boolean externalizeFeatures = false;
- //DOCTYPE for HTML5, OpenSocial 2.0 default
+ // DOCTYPE for HTML5, OpenSocial 2.0 default
private String defaultDoctypeQName = "html";
private String defaultDoctypePubId = null;
private String defaultDoctypeSysId = null;
@@ -123,12 +122,12 @@ public class RenderingGadgetRewriter imp
ContainerConfig containerConfig,
FeatureRegistry featureRegistry,
JsUriManager jsUriManager,
- Map<String, ConfigContributor> configContributors) {
+ ConfigProcessor configProcessor) {
this.messageBundleFactory = messageBundleFactory;
this.containerConfig = containerConfig;
this.featureRegistry = featureRegistry;
this.jsUriManager = jsUriManager;
- this.configContributors = configContributors;
+ this.configProcessor = configProcessor;
}
public void setDefaultDoctypeQName(String qname) {
@@ -409,30 +408,14 @@ public class RenderingGadgetRewriter imp
*/
protected String getLibraryConfig(Gadget gadget, List<String> reqs)
throws GadgetException {
- GadgetContext context = gadget.getContext();
-
- Map<String, Object> features = containerConfig.getMap(context.getContainer(), FEATURES_KEY);
-
- Map<String, Object> config
- = Maps.newHashMapWithExpectedSize(features == null ? 2 : features.size() + 2);
-
- if (features != null) {
- // Discard what we don't care about.
- for (String name : reqs) {
- Object conf = features.get(name);
- if (conf != null) {
- config.put(name, conf);
- }
-
- // See if this feature has configuration data
- ConfigContributor contributor = configContributors.get(name);
- if (contributor != null) {
- contributor.contribute(config, gadget);
- }
- }
+ Map<String, Object> config =
+ configProcessor.getConfig(gadget.getContext().getContainer(), reqs, null, gadget);
+
+ if (config.size() > 0) {
+ return "gadgets.config.init(" + JsonSerializer.serialize(config) + ");\n";
}
-
- return "gadgets.config.init(" + JsonSerializer.serialize(config) + ");\n";
+
+ return "";
}
/**
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/CompilationProcessorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/CompilationProcessorTest.java?rev=1099371&r1=1099370&r2=1099371&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/CompilationProcessorTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/CompilationProcessorTest.java Wed May 4 08:38:00 2011
@@ -55,7 +55,6 @@ public class CompilationProcessorTest {
@Test
public void compilerIsRun() throws Exception {
JsUri jsUri = control.createMock(JsUri.class);
- FeatureBundle bundle = control.createMock(FeatureBundle.class);
JsResponseBuilder builder =
new JsResponseBuilder().setCacheTtlSecs(1234).setStatusCode(200)
.appendJs("content1:", "source1")
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/ConfigInjectionProcessorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/ConfigInjectionProcessorTest.java?rev=1099371&r1=1099370&r2=1099371&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/ConfigInjectionProcessorTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/ConfigInjectionProcessorTest.java Wed May 4 08:38:00 2011
@@ -32,6 +32,7 @@ import java.util.Map;
import org.apache.shindig.config.ContainerConfig;
import org.apache.shindig.gadgets.RenderingContext;
import org.apache.shindig.gadgets.config.ConfigContributor;
+import org.apache.shindig.gadgets.config.DefaultConfigProcessor;
import org.apache.shindig.gadgets.features.FeatureRegistry;
import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
import org.easymock.Capture;
@@ -63,7 +64,8 @@ public class ConfigInjectionProcessorTes
registry = control.createMock(FeatureRegistry.class);
containerConfig = control.createMock(ContainerConfig.class);
configContributors = Maps.newHashMap();
- processor = new ConfigInjectionProcessor(registry, containerConfig, configContributors);
+ processor = new ConfigInjectionProcessor(registry,
+ new DefaultConfigProcessor(configContributors, containerConfig));
}
@Test
@@ -89,6 +91,10 @@ public class ConfigInjectionProcessorTes
JsResponseBuilder builder = prepareRequestReturnBuilder(ctx);
expect(containerConfig.getMap(CONTAINER, ConfigInjectionProcessor.GADGETS_FEATURES_KEY))
.andReturn(null);
+ List<String> libs = ImmutableList.of();
+ expect(jsUri.getLibs()).andReturn(libs);
+ expect(registry.getFeatures(libs)).andReturn(libs);
+ expect(request.getHost()).andReturn("host");
control.replay();
assertTrue(processor.process(request, builder));
control.verify();
@@ -118,6 +124,7 @@ public class ConfigInjectionProcessorTes
List<String> libs = ImmutableList.of("lib1", "lib2");
expect(jsUri.getLibs()).andReturn(libs);
expect(registry.getFeatures(libs)).andReturn(libs);
+ expect(request.getHost()).andReturn("host");
control.replay();
assertTrue(processor.process(request, builder));
control.verify();
@@ -164,12 +171,12 @@ public class ConfigInjectionProcessorTes
baseConfig.put("feature4", "unused");
expect(containerConfig.getMap(CONTAINER, ConfigInjectionProcessor.GADGETS_FEATURES_KEY))
.andReturn(baseConfig);
+ String host = "myHost";
+ expect(request.getHost()).andReturn(host).anyTimes();
ImmutableList.Builder<String> libsBuilder =
ImmutableList.<String>builder().add("feature1", "feature2");
if (extraContrib) {
libsBuilder.add("feature3");
- String host = "myHost";
- expect(request.getHost()).andReturn(host);
ConfigContributor cc = control.createMock(ConfigContributor.class);
Capture<Map<String, Object>> captureConfig = new Capture<Map<String, Object>>();
cc.contribute(capture(captureConfig), eq(CONTAINER), eq(host));
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java?rev=1099371&r1=1099370&r2=1099371&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingGadgetRewriterTest.java Wed May 4 08:38:00 2011
@@ -43,6 +43,7 @@ import org.apache.shindig.gadgets.Gadget
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.config.ConfigContributor;
import org.apache.shindig.gadgets.config.CoreUtilConfigContributor;
+import org.apache.shindig.gadgets.config.DefaultConfigProcessor;
import org.apache.shindig.gadgets.config.XhrwrapperConfigContributor;
import org.apache.shindig.gadgets.features.FeatureRegistry;
import org.apache.shindig.gadgets.features.FeatureResource;
@@ -117,7 +118,8 @@ public class RenderingGadgetRewriterTest
"shindig.xhrwrapper", new XhrwrapperConfigContributor()
);
rewriter
- = new RenderingGadgetRewriter(messageBundleFactory, config, featureRegistry, jsUriManager, configContributors);
+ = new RenderingGadgetRewriter(messageBundleFactory, config, featureRegistry, jsUriManager,
+ new DefaultConfigProcessor(configContributors, config));
Injector injector = Guice.createInjector(new ParseModule(), new PropertiesModule());
parser = injector.getInstance(GadgetHtmlParser.class);
}