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