Author: evan
Date: Wed Sep 24 14:45:11 2008
New Revision: 698751

URL: http://svn.apache.org/viewvc?rev=698751&view=rev
Log:
Changed HandlerProvider base class so that:
-.Doesn't require creating instances of PersonHandler, ActivityHandler and 
AppDataHandler - instead it just references the classes directly, and
- Has a base class that doesn't require installing the default handlers

This supports
- Using RequestScoped versions of Handlers as you don't have to create an 
instance of the objects at startup (when there isn't a request scope) and
- More easy additions or changes to supported HandlerProviders

Client code changes you need because of this CL:
- If you don't use SocialApiGuiceModule, you need to call 
bind(HandlerProvider.class).toInstance(HandlerProvider.defaultHandlers()) in 
your Guice module
- If you extend HandlerProvider, you need to call super(true) and then 
addHandler() to add new handlers (see change in 
SampleContainerProviderHandler.java)

Modified:
    
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
    
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/HandlerProvider.java
    
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/service/SampleContainerHandlerProvider.java
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java

Modified: 
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java?rev=698751&r1=698750&r2=698751&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
 (original)
+++ 
incubator/shindig/trunk/java/server/src/test/java/org/apache/shindig/server/endtoend/EndToEndModule.java
 Wed Sep 24 14:45:11 2008
@@ -26,6 +26,7 @@
 import org.apache.shindig.social.core.util.BeanAtomConverter;
 import org.apache.shindig.social.opensocial.service.BeanConverter;
 import org.apache.shindig.social.opensocial.service.DataServiceServletFetcher;
+import org.apache.shindig.social.opensocial.service.HandlerProvider;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.TypeLiteral;
@@ -58,5 +59,7 @@
 
     bind(new TypeLiteral<List<AuthenticationHandler>>(){}).toProvider(
         AuthenticationHandlerProvider.class);
+
+    bind(HandlerProvider.class).toInstance(HandlerProvider.defaultProviders());
   }
 }

Modified: 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/HandlerProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/HandlerProvider.java?rev=698751&r1=698750&r2=698751&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/HandlerProvider.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/HandlerProvider.java
 Wed Sep 24 14:45:11 2008
@@ -18,32 +18,49 @@
 
 package org.apache.shindig.social.opensocial.service;
 
-
-import com.google.inject.Inject;
+import com.google.inject.Provider;
 import com.google.common.collect.Maps;
 
 import java.util.Map;
 
-// TODO: We may want to extract an interface here for easier overriding
-// For now you can subclass it and inject with guice
-public class HandlerProvider {
-  protected Map<String, Class<? extends DataRequestHandler>> handlers;
-
-  // Used by tests
-  public HandlerProvider(Map<String, Class<? extends DataRequestHandler>> 
handlers) {
-    this.handlers = handlers;
+/**
+ * Class to inject handlers for data requests.
+ * 
+ * You should add your own binding for HandlerProvider if you are customizing
+ * request handling.
+ * 
+ * This is a convenience shell on top of
+ * Provider<Map<String, Class<? extends DataRequestHandler>>> along
+ * with a default set of handlers.
+ */
+public class HandlerProvider implements Provider<Map<String,
+    Class<? extends DataRequestHandler>>> {
+  
+  private Map<String, Class<? extends DataRequestHandler>> handlers;
+  
+  private static Map<String, Class<? extends DataRequestHandler>> 
DEFAULT_HANDLERS =
+      Maps.immutableMap(
+          DataServiceServlet.PEOPLE_ROUTE, PersonHandler.class,
+          DataServiceServlet.ACTIVITY_ROUTE, ActivityHandler.class,
+          DataServiceServlet.APPDATA_ROUTE, AppDataHandler.class);
+  
+  protected HandlerProvider(boolean useDefaultProviders) {
+    handlers = Maps.newHashMap(useDefaultProviders ? DEFAULT_HANDLERS : null);
   }
-
-  @Inject
-  public HandlerProvider(PersonHandler peopleHandler, ActivityHandler 
activityHandler,
-      AppDataHandler appDataHandler) {
-    handlers = Maps.newHashMap();
-    handlers.put(DataServiceServlet.PEOPLE_ROUTE, peopleHandler.getClass());
-    handlers.put(DataServiceServlet.ACTIVITY_ROUTE, 
activityHandler.getClass());
-    handlers.put(DataServiceServlet.APPDATA_ROUTE, appDataHandler.getClass());
+  
+  public void addHandler(String path, Class<? extends DataRequestHandler> 
handler) {
+    handlers.put(path, handler);
   }
-
+  
+  public HandlerProvider(Map<String,Class<? extends DataRequestHandler>> 
handlers) {
+    this.handlers = Maps.newHashMap(handlers);
+  }
+  
   public Map<String, Class<? extends DataRequestHandler>> get() {
     return handlers;
   }
+  
+  public static HandlerProvider defaultProviders() {
+    return new HandlerProvider(DEFAULT_HANDLERS);
+  }
 }

Modified: 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/service/SampleContainerHandlerProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/service/SampleContainerHandlerProvider.java?rev=698751&r1=698750&r2=698751&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/service/SampleContainerHandlerProvider.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/sample/service/SampleContainerHandlerProvider.java
 Wed Sep 24 14:45:11 2008
@@ -17,25 +17,12 @@
  */
 package org.apache.shindig.social.sample.service;
 
-import org.apache.shindig.social.opensocial.service.ActivityHandler;
-import org.apache.shindig.social.opensocial.service.AppDataHandler;
-import org.apache.shindig.social.opensocial.service.DataRequestHandler;
 import org.apache.shindig.social.opensocial.service.HandlerProvider;
-import org.apache.shindig.social.opensocial.service.PersonHandler;
-
-import com.google.inject.Inject;
-
-import java.util.Map;
 
 public class SampleContainerHandlerProvider extends HandlerProvider {
-  @Inject
-  public SampleContainerHandlerProvider(PersonHandler peopleHandler,
-      ActivityHandler activityHandler, AppDataHandler appDataHandler) {
-    super(peopleHandler, activityHandler, appDataHandler);
-    handlers.put("samplecontainer", SampleContainerHandler.class);
-  }
 
-  public Map<String, Class<? extends DataRequestHandler>> get() {
-    return handlers;
+  public SampleContainerHandlerProvider() {
+    super(true);
+    addHandler("samplecontainer", SampleContainerHandler.class);
   }
 }

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java?rev=698751&r1=698750&r2=698751&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
 Wed Sep 24 14:45:11 2008
@@ -64,12 +64,9 @@
   @Override
   protected void setUp() throws Exception {
     Map<String, Class<? extends DataRequestHandler>> handlers = 
Maps.newHashMap();
-    handlers.put(DataServiceServlet.PEOPLE_ROUTE, PersonHandler.class);
-    handlers.put(DataServiceServlet.ACTIVITY_ROUTE, ActivityHandler.class);
-    handlers.put(DataServiceServlet.APPDATA_ROUTE, AppDataHandler.class);
-
+    
     servlet = new DataServiceServlet();
-    servlet.setHandlers(new HandlerProvider(handlers));
+    servlet.setHandlers(HandlerProvider.defaultProviders());
     servlet.setInjector(Guice.createInjector(new SocialApiTestsGuiceModule()));
     servlet.setBeanConverters(new BeanJsonConverter(
         Guice.createInjector(new SocialApiTestsGuiceModule())), new 
BeanXmlConverter(),

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java?rev=698751&r1=698750&r2=698751&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
 Wed Sep 24 14:45:11 2008
@@ -75,8 +75,7 @@
     injector = EasyMock.createMock(Injector.class);
     servlet.setInjector(injector);
 
-    servlet.setHandlers(new HandlerProvider(new PersonHandler(null), new 
ActivityHandler(null),
-        new AppDataHandler(null)));
+    servlet.setHandlers(HandlerProvider.defaultProviders());
 
     servlet.setBeanConverters(jsonConverter, xmlConverter, atomConverter);
   }

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java?rev=698751&r1=698750&r2=698751&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java
 Wed Sep 24 14:45:11 2008
@@ -75,8 +75,7 @@
     injector = EasyMock.createMock(Injector.class);
     servlet.setInjector(injector);
 
-    servlet.setHandlers(new HandlerProvider(new PersonHandler(null), new 
ActivityHandler(null),
-        new AppDataHandler(null)));
+    servlet.setHandlers(HandlerProvider.defaultProviders());
 
     servlet.setBeanConverters(jsonConverter, xmlConverter, atomConverter);
   }


Reply via email to