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