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