You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by li...@apache.org on 2010/05/14 01:01:48 UTC

svn commit: r944048 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/features/ test/java/org/apache/shindig/gadgets/features/ test/java/org/apache/shindig/gadgets/templates/tags/

Author: lindner
Date: Thu May 13 23:01:47 2010
New Revision: 944048

URL: http://svn.apache.org/viewvc?rev=944048&view=rev
Log:
allow injection of extended values for feature dirs/resources

Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/features/FeatureRegistry.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureRegistryTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandlerTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java?rev=944048&r1=944047&r2=944048&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGuiceModule.java Thu May 13 23:01:47 2010
@@ -18,14 +18,19 @@
  */
 package org.apache.shindig.gadgets;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
+import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 import com.google.inject.name.Named;
 import com.google.inject.name.Names;
+import com.google.inject.Inject;
+
+import org.apache.commons.lang.StringUtils;
 
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.InvalidationHandler;
@@ -39,6 +44,7 @@ import org.apache.shindig.gadgets.uri.Ur
 
 import org.apache.shindig.gadgets.variables.SubstituterModule;
 
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
@@ -47,6 +53,9 @@ import java.util.concurrent.ThreadFactor
 
 /**
  * Creates a module to supply all of the core gadget classes.
+ *
+ * Instead of subclassing this consider adding features to the
+ * multibindings for features and rpc handlers.
  */
 public class DefaultGuiceModule extends AbstractModule {
 
@@ -77,14 +86,39 @@ public class DefaultGuiceModule extends 
     requestStaticInjection(HttpResponse.class);
 
     registerGadgetHandlers();
+    registerFeatureHandlers();
   }
 
+  /**
+   * Sets up multibinding for rpc handlers
+   */
   protected void registerGadgetHandlers() {
     Multibinder<Object> handlerBinder = Multibinder.newSetBinder(binder(), Object.class, Names.named("org.apache.shindig.handlers"));
     handlerBinder.addBinding().to(InvalidationHandler.class);
     handlerBinder.addBinding().to(HttpRequestHandler.class);
   }
 
+  /**
+   * Sets up the multibinding for extended feature resources
+   */
+  protected void registerFeatureHandlers() {
+    Multibinder<String> featureBinder = Multibinder.newSetBinder(binder(), String.class, Names.named("org.apache.shindig.features-extended"));
+  }
+
+  /**
+   * Merges the features provided in shindig.properties with the extended features from multibinding
+   * @param features Comma separated string from shindig.properties key 'shindig.features.default'
+   * @param extended Set of paths/resources from plugins
+   * @return the merged, list of all features to load.
+   */
+  @Provides
+  @Singleton
+  @Named("org.apache.shindig.features")
+  protected List<String> defaultFeatures(@Named("shindig.features.default")String features,
+                                         @Named("org.apache.shindig.features-extended")Set<String> extended) {
+    return ImmutableList.<String>builder().addAll(extended).add(StringUtils.split(features, ',')).build();
+  }
+
   public static final ThreadFactory DAEMON_THREAD_FACTORY =
     new ThreadFactory() {
         public Thread newThread(Runnable r) {

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/features/FeatureRegistry.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/features/FeatureRegistry.java?rev=944048&r1=944047&r2=944048&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/features/FeatureRegistry.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/features/FeatureRegistry.java Thu May 13 23:01:47 2010
@@ -19,6 +19,7 @@ package org.apache.shindig.gadgets.featu
 
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.MapMaker;
@@ -58,7 +59,6 @@ import java.util.logging.Level;
  */
 @Singleton
 public class FeatureRegistry {
-  public static final char FILE_SEPARATOR = ',';
   public static final String RESOURCE_SCHEME = "res";
   public static final String FILE_SCHEME = "file";
   
@@ -72,19 +72,19 @@ public class FeatureRegistry {
   private final FeatureResourceLoader resourceLoader;
   private final ImmutableMap<String, FeatureNode> featureMap;
   
-  @Inject
 
 /**
  *
  * @param featureFiles
  * @throws GadgetException
  */
+  @Inject
   public FeatureRegistry(FeatureResourceLoader resourceLoader,
-                         @Named("shindig.features.default") String featureFiles) throws GadgetException {
+                         @Named("org.apache.shindig.features") List<String> features) throws GadgetException {
     this.parser = new FeatureParser();
     this.resourceLoader = resourceLoader;
 
-    featureMap = register(featureFiles);
+    featureMap = register(features);
 
     // Connect the dependency graph made up of all features and validate there
     // are no circular deps.
@@ -115,11 +115,11 @@ public class FeatureRegistry {
    *    them with a comma.
    * @throws GadgetException If any of the files can't be read, are malformed, or invalid.
    */
-  protected ImmutableMap<String,FeatureNode> register(String resourceKey) throws GadgetException {
+  protected ImmutableMap<String,FeatureNode> register(List<String> resourceList) throws GadgetException {
     Map<String,FeatureNode> featureMapBuilder = Maps.newHashMap();
 
     try {
-      for (String location : StringUtils.split(resourceKey, FILE_SEPARATOR)) {
+      for (String location : resourceList) {
         Uri uriLoc = getComponentUri(location);
         
         if (uriLoc.getScheme() != null && uriLoc.getScheme().equals(RESOURCE_SCHEME)) {

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureRegistryTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureRegistryTest.java?rev=944048&r1=944047&r2=944048&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureRegistryTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/features/FeatureRegistryTest.java Thu May 13 23:01:47 2010
@@ -17,9 +17,11 @@
  */
 package org.apache.shindig.gadgets.features;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.inject.internal.ImmutableMap;
+import com.google.inject.internal.ImmutableSet;
 
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.uri.UriBuilder;
@@ -92,7 +94,7 @@ public class FeatureRegistryTest {
 
   private class TestFeatureRegistry extends FeatureRegistry {
     TestFeatureRegistry(String featureFiles) throws GadgetException {
-      super(resourceLoader, featureFiles);
+      super(resourceLoader, ImmutableList.<String>of(featureFiles));
     }
     @Override
     String getResourceContent(String resource) throws IOException {
@@ -769,4 +771,4 @@ public class FeatureRegistryTest {
       return key.startsWith("/") ? key.substring(1) : key;
     }
   }
-}
\ No newline at end of file
+}

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandlerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandlerTest.java?rev=944048&r1=944047&r2=944048&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandlerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/templates/tags/TemplateBasedTagHandlerTest.java Thu May 13 23:01:47 2010
@@ -22,6 +22,7 @@ import org.apache.shindig.common.Propert
 import org.apache.shindig.expressions.RootELResolver;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.oauth.OAuthModule;
 import org.apache.shindig.gadgets.parse.DefaultHtmlSerializer;
 import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
 import org.apache.shindig.gadgets.parse.ParseModule;
@@ -29,6 +30,7 @@ import org.apache.shindig.gadgets.templa
 import org.apache.shindig.gadgets.templates.TemplateContext;
 import org.apache.shindig.gadgets.templates.TemplateModule;
 import org.apache.shindig.gadgets.templates.TemplateProcessor;
+import org.apache.shindig.gadgets.DefaultGuiceModule;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.inject.Guice;
@@ -60,8 +62,7 @@ public class TemplateBasedTagHandlerTest
   
   @Before
   public void setUp() throws Exception {
-    Injector injector = Guice.createInjector(new ParseModule(), new TemplateModule(),
-        new PropertiesModule());
+    Injector injector = Guice.createInjector(new DefaultGuiceModule(), new OAuthModule(), new PropertiesModule());
     parser = injector.getInstance(GadgetHtmlParser.class);
     processor = injector.getInstance(TemplateProcessor.class);
     context = new TemplateContext(new Gadget(), null);