You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by do...@apache.org on 2008/05/05 21:11:16 UTC
svn commit: r653560 - in /incubator/shindig/trunk/java:
server/src/main/webapp/WEB-INF/
social-api/src/main/java/org/apache/shindig/social/
social-api/src/main/java/org/apache/shindig/social/abdera/
social-api/src/main/java/org/apache/shindig/social/op...
Author: doll
Date: Mon May 5 12:11:16 2008
New Revision: 653560
URL: http://svn.apache.org/viewvc?rev=653560&view=rev
Log:
SHINDIG-210 - Patch from Vasu Nori. This change cleans up the guice usage within the restul code and the urls now work.
Added:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/RestServerServlet.java
Modified:
incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiProvider.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/ActivitiesServiceAdapter.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/PeopleServiceAdapter.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/RestGuiceModule.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/RestServerCollectionAdapter.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/BeanXmlConverter.java
Modified: incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml?rev=653560&r1=653559&r2=653560&view=diff
==============================================================================
--- incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml (original)
+++ incubator/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml Mon May 5 12:11:16 2008
@@ -75,7 +75,7 @@
<servlet>
<servlet-name>restapiServlet</servlet-name>
<servlet-class>
- org.apache.abdera.protocol.server.servlet.AbderaServlet
+ org.apache.shindig.social.RestServerServlet
</servlet-class>
<init-param>
<param-name>org.apache.abdera.protocol.server.Provider</param-name>
Added: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/RestServerServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/RestServerServlet.java?rev=653560&view=auto
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/RestServerServlet.java (added)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/RestServerServlet.java Mon May 5 12:11:16 2008
@@ -0,0 +1,101 @@
+/*
+ * 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.social;
+
+import com.google.inject.Injector;
+
+import org.apache.abdera.protocol.server.Provider;
+import org.apache.abdera.protocol.server.servlet.AbderaServlet;
+import org.apache.shindig.gadgets.http.GuiceServletContextListener;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.logging.Logger;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.UnavailableException;
+
+/**
+ * Superclass for all servlets related to processing of REST api.
+ * The reason for its existence is to init Guice Injection.
+ * Since this has AbderaServlet to extend Abdera Servlet,
+ * it cannot extend InjectedServlet like GadgetDataServlet does.
+ *
+ * Injection is also a little different because of Abdera is in the middle.
+ * instead of injecting (this) as the GadgetServlet does,
+ * here the Provider is injected.
+ */
+public class RestServerServlet extends AbderaServlet {
+ private static Logger logger =
+ Logger.getLogger(RestServerServlet.class.getName());
+
+ @Override public void init() {
+ // Abdera provider stuff
+ manager = createServiceManager();
+ provider = createProvider();
+ }
+
+ @Override
+ protected Provider createProvider() {
+ Provider provider = manager.newProvider(getProperties(getServletConfig()));
+ try {
+ initGuice(getServletConfig(), provider);
+ } catch (ServletException e) {
+ logger.severe(e.getMessage());
+ e.printStackTrace();
+ return null;
+ }
+ return provider;
+ }
+
+ protected void initGuice(ServletConfig config, Provider provider)
+ throws ServletException {
+ ServletContext context = config.getServletContext();
+ Injector injector = (Injector)
+ context.getAttribute(GuiceServletContextListener.INJECTOR_ATTRIBUTE);
+ if (injector == null) {
+ throw new UnavailableException(
+ "Guice Injector not found! Make sure you registered " +
+ GuiceServletContextListener.class.getName() + " as a listener");
+ }
+ injector.injectMembers(provider);
+ // all providers should implement initialize() so injection could happen
+ try {
+ Method m = provider.getClass().getMethod("initialize", new Class<?>[0]);
+ m.invoke(provider, new Object[0]);
+ } catch (IllegalArgumentException e) {
+ logger.severe(e.getMessage());
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ logger.severe(e.getMessage());
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ logger.severe(e.getMessage());
+ e.printStackTrace();
+ } catch (SecurityException e) {
+ logger.severe(e.getMessage());
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ logger.severe(e.getMessage());
+ e.printStackTrace();
+ }
+ }
+}
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java?rev=653560&r1=653559&r2=653560&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiGuiceModule.java Mon May 5 12:11:16 2008
@@ -22,10 +22,14 @@
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.TypeLiteral;
+
+import org.apache.shindig.social.abdera.ActivitiesServiceAdapter;
+import org.apache.shindig.social.abdera.PeopleServiceAdapter;
import org.apache.shindig.social.opensocial.ActivitiesService;
import org.apache.shindig.social.opensocial.DataService;
import org.apache.shindig.social.opensocial.OpenSocialDataHandler;
import org.apache.shindig.social.opensocial.PeopleService;
+import org.apache.shindig.social.opensocial.util.BeanXmlConverter;
import org.apache.shindig.social.samplecontainer.BasicActivitiesService;
import org.apache.shindig.social.samplecontainer.BasicDataService;
import org.apache.shindig.social.samplecontainer.BasicPeopleService;
@@ -48,6 +52,10 @@
bind(new TypeLiteral<List<GadgetDataHandler>>() {})
.toProvider(GadgetDataHandlersProvider.class);
+
+ bind(BeanXmlConverter.class);
+ bind(PeopleServiceAdapter.class);
+ bind(ActivitiesServiceAdapter.class);
}
public static class GadgetDataHandlersProvider
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiProvider.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiProvider.java?rev=653560&r1=653559&r2=653560&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiProvider.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/SocialApiProvider.java Mon May 5 12:11:16 2008
@@ -1,78 +1,96 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. 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. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-package org.apache.shindig.social;
-
-import org.apache.shindig.social.abdera.ActivitiesServiceAdapter;
-import org.apache.shindig.social.abdera.PeopleServiceAdapter;
-
-import org.apache.abdera.protocol.server.TargetType;
-import org.apache.abdera.protocol.server.impl.DefaultProvider;
-import org.apache.abdera.protocol.server.impl.RouteManager;
-
-public class SocialApiProvider extends DefaultProvider {
- private static final String BASE = "/rest/";
- private static final String ROUTENAME_NOT_USED = "not_used_right_now";
-
- public SocialApiProvider() {
-
- // Create the adapters to handle requests.
- // TODO @Inject
- PeopleServiceAdapter peopleAdapter = new PeopleServiceAdapter();
- ActivitiesServiceAdapter activitiesAdapter = new ActivitiesServiceAdapter();
-
- // Add the RouteManager that parses incoming and builds outgoing URLs
- routeManager = new RouteManager()
-
- // Collection of all people connected to user {uid}
- // /people/{uid}/@all
- .addRoute(ROUTENAME_NOT_USED,
- BASE + "people/:uid/@all",
- TargetType.TYPE_COLLECTION,
- peopleAdapter)
-
- // Individual person record. /people/{uid}/@all/{pid}
- .addRoute(ROUTENAME_NOT_USED,
- BASE + "people/:uid/@all/:pid",
- TargetType.TYPE_ENTRY,
- peopleAdapter)
-
- // Self Profile record for user {uid} /people/{uid}/@self
- .addRoute(ROUTENAME_NOT_USED,
- BASE + "people/:uid/@self",
- TargetType.TYPE_ENTRY,
- peopleAdapter)
-
- // Activities
- // Collection of activities for given user /activities/{uid}/@self
- .addRoute(ROUTENAME_NOT_USED,
- BASE + "activities/:uid/@self",
- TargetType.TYPE_COLLECTION,
- activitiesAdapter)
-
- // Individual activity resource; usually discovered from collection
- // /activities/{uid}/@self/{aid}
- .addRoute(ROUTENAME_NOT_USED,
- BASE + "activities/:uid/@self/:aid",
- TargetType.TYPE_ENTRY,
- activitiesAdapter)
- ;
-
- targetBuilder = routeManager;
- targetResolver = routeManager;
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. 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. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.shindig.social;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+import org.apache.abdera.protocol.server.TargetType;
+import org.apache.abdera.protocol.server.impl.DefaultProvider;
+import org.apache.abdera.protocol.server.impl.RouteManager;
+import org.apache.shindig.social.abdera.ActivitiesServiceAdapter;
+import org.apache.shindig.social.abdera.PeopleServiceAdapter;
+
+public class SocialApiProvider extends DefaultProvider {
+ //TODO why is this hardcoded here. can't this be from servletContext?
+ private static final String BASE = "/social/rest/";
+ private static final String ROUTENAME_NOT_USED = "not_used_right_now";
+ private PeopleServiceAdapter peopleAdapter;
+ private ActivitiesServiceAdapter activitiesAdapter;
+
+ private Provider<PeopleServiceAdapter> peopleAdapterProvider;
+ @Inject
+ public void setPeopleAdapter(
+ Provider<PeopleServiceAdapter> peopleAdapterProvider) {
+ this.peopleAdapterProvider = peopleAdapterProvider;
+ }
+ private Provider<ActivitiesServiceAdapter> activitiesAdapterProvider;
+ @Inject
+ public void setActivitiesAdapter(
+ Provider<ActivitiesServiceAdapter> activitiesAdapterProvider) {
+ this.activitiesAdapterProvider = activitiesAdapterProvider;
+ }
+
+ public SocialApiProvider() {
+ }
+
+ public void initialize() {
+ peopleAdapter = peopleAdapterProvider.get();
+ activitiesAdapter = activitiesAdapterProvider.get();
+
+ // Add the RouteManager that parses incoming and builds outgoing URLs
+ routeManager = new RouteManager()
+
+ //Collection of all people connected to user {uid}
+ // /people/{uid}/@all
+ .addRoute(ROUTENAME_NOT_USED,
+ BASE + "people/:uid/@all",
+ TargetType.TYPE_COLLECTION,
+ peopleAdapter)
+
+ //Individual person record. /people/{uid}/@all/{pid}
+ .addRoute(ROUTENAME_NOT_USED,
+ BASE + "people/:uid/@all/:pid",
+ TargetType.TYPE_ENTRY,
+ peopleAdapter)
+
+ //Self Profile record for user {uid} /people/{uid}/@self
+ .addRoute(ROUTENAME_NOT_USED,
+ BASE + "people/:uid/@self",
+ TargetType.TYPE_ENTRY,
+ peopleAdapter)
+
+ //Activities
+ //Collection of activities for given user /activities/{uid}/@self
+ .addRoute(ROUTENAME_NOT_USED,
+ BASE + "activities/:uid/@self",
+ TargetType.TYPE_COLLECTION,
+ activitiesAdapter)
+
+ //Individual activity resource; usually discovered from collection
+ // /activities/{uid}/@self/{aid}
+ .addRoute(ROUTENAME_NOT_USED,
+ BASE + "activities/:uid/@self/:aid",
+ TargetType.TYPE_ENTRY,
+ activitiesAdapter)
+ ;
+
+ targetBuilder = routeManager;
+ targetResolver = routeManager;
+ }
+}
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/ActivitiesServiceAdapter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/ActivitiesServiceAdapter.java?rev=653560&r1=653559&r2=653560&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/ActivitiesServiceAdapter.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/ActivitiesServiceAdapter.java Mon May 5 12:11:16 2008
@@ -17,46 +17,38 @@
*/
package org.apache.shindig.social.abdera;
-import org.apache.shindig.social.opensocial.ActivitiesService;
-import org.apache.shindig.social.opensocial.model.Activity;
+import com.google.inject.Inject;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
import org.apache.abdera.protocol.server.RequestContext;
import org.apache.abdera.protocol.server.ResponseContext;
+import org.apache.shindig.social.opensocial.ActivitiesService;
+import org.apache.shindig.social.opensocial.model.Activity;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-import java.util.ArrayList;
-import java.util.logging.Logger;
/**
* All "activity" requests are processed here.
*
- * @author vnori@google.com (Vasu Nori)
- *
*/
@SuppressWarnings("unchecked")
public class ActivitiesServiceAdapter extends RestServerCollectionAdapter {
- private static Logger logger =
- Logger.getLogger(ActivitiesServiceAdapter.class.getName());
private ActivitiesService handler;
-
+
// TODO get these from the config files like in feedserver
private static final String TITLE = "Acitivity Collection title";
private static final String AUTHOR = "TODO";
-
- public ActivitiesServiceAdapter() {
- // TODO needs cleanup once injection from AbderaServlet works..
- Injector injector = null;
- try {
- injector = Guice.createInjector(new RestGuiceModule());
- } catch (Exception e) {
- logger.severe("injector exception: " + e.getMessage());
- }
- handler = injector.getInstance(ActivitiesService.class);
+
+ @Inject
+ public ActivitiesServiceAdapter(ActivitiesService handler) {
+ this.handler = handler;
}
-
+
+ /**
+ * Handles the following URL
+ * /activities/{uid}/@self
+ */
@Override
public ResponseContext getFeed(RequestContext request) {
// get the params from the request
@@ -70,6 +62,10 @@
return returnFeed(request, TITLE, AUTHOR, (List)listOfObj);
}
+ /**
+ * Handles the following URL
+ * /activities/{uid}/@self/{activityId}
+ */
@Override
public ResponseContext getEntry(RequestContext request) {
// get the params from the request
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/PeopleServiceAdapter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/PeopleServiceAdapter.java?rev=653560&r1=653559&r2=653560&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/PeopleServiceAdapter.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/PeopleServiceAdapter.java Mon May 5 12:11:16 2008
@@ -21,9 +21,8 @@
import org.apache.shindig.social.opensocial.model.Person;
import org.apache.shindig.gadgets.GadgetToken;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import org.apache.abdera.protocol.server.ProviderHelper;
+import com.google.inject.Inject;
+
import org.apache.abdera.protocol.server.RequestContext;
import org.apache.abdera.protocol.server.ResponseContext;
@@ -34,41 +33,45 @@
/**
* All "people" requests are processed here.
*
- * @author vnori@google.com (Vasu Nori)
- *
*/
@SuppressWarnings("unchecked")
public class PeopleServiceAdapter extends RestServerCollectionAdapter {
private static Logger logger =
Logger.getLogger(PeopleServiceAdapter.class.getName());
private PeopleService handler;
-
+
// TODO get these from the config files like in feedserver
private static final String TITLE = "People Collection title";
private static final String AUTHOR = "TODO";
-
- public PeopleServiceAdapter() {
- // TODO needs cleanup once injection from AbderaServlet works..
- Injector injector = null;
- try {
- injector = Guice.createInjector(new RestGuiceModule());
- } catch (Exception e) {
- logger.severe("injector exception: " + e.getMessage());
- }
- handler = injector.getInstance(PeopleService.class);
+
+ @Inject
+ public PeopleServiceAdapter(PeopleService handler) {
+ this.handler = handler;
}
-
+
+ /**
+ * Handles the following URLs
+ * /people/{uid}/@all
+ */
@Override
public ResponseContext getFeed(RequestContext request) {
// get the params from the request
String[] paramNames = request.getTarget().getParameterNames();
String uid = request.getTarget().getParameter(paramNames[0]);
+
// TODO(doll): Fix the service apis to add a concept of arbitrary friends
// Consider whether @all really makes sense...
List<Person> listOfObj = null;
+
return returnFeed(request, TITLE, AUTHOR, (List)listOfObj);
}
+
+ /**
+ * Handles the following URLs
+ * /people/{uid}/@all/{pid}
+ * /people/{uid}/@self
+ */
@Override
public ResponseContext getEntry(RequestContext request) {
@@ -105,31 +108,24 @@
// get the params from the request
String[] paramNames = request.getTarget().getParameterNames();
+
+ /* figure out which URL is passed in
+ * /people/{uid}/@all/{pid}
+ * /people/{uid}/@self
+ * To do that, see if we have both uid, pid params passed in
+ * OR just uid param.
+ * TODO better way is to have different methods to be called by abdera
+ */
+ String uid = request.getTarget().getParameter("uid");
+ String pid = request.getTarget().getParameter("pid");
+ Person person = (null == pid)
+ ? handler.getPerson(uid, dummyToken).getResponse()
+ : handler.getPerson(pid, dummyToken).getResponse();
- // this method is called with 2 params for /people/{uid}/@all/{pid}
- // and with 1 param for /people/{uid}/@self
- // TODO have 2 different Abdera Handlers for the 2 different urls.
- Person person;
- switch (paramNames.length) {
- case 1:
- String uid = request.getTarget().getParameter(paramNames[0]);
- person = handler.getPerson(uid, dummyToken).getResponse();
- break;
- case 2:
- uid = request.getTarget().getParameter(paramNames[0]);
- String pid = request.getTarget().getParameter(paramNames[1]);
- // TODO: pass in the gadget token with the uid parameter set. We don't
- // have different views of people from an aribtrary ids point of view.
- // Rather, the token is how permissions are done.
- person = handler.getPerson(pid, dummyToken).getResponse();
- break;
- default:
- return ProviderHelper.notsupported(request, "more than 2 params?");
- }
// TODO: how is entry id determined. check.
String entryId = request.getUri().toString();
Date updated = (person != null) ? person.getUpdated() : null;
- logger.info("updated = " + updated);
+ logger.fine("updated = " + updated);
return returnEntry(request, person, entryId, updated);
}
}
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/RestGuiceModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/RestGuiceModule.java?rev=653560&r1=653559&r2=653560&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/RestGuiceModule.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/RestGuiceModule.java Mon May 5 12:11:16 2008
@@ -1,124 +0,0 @@
-/*
- * 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.social.abdera;
-
-import org.apache.shindig.gadgets.BasicContentCache;
-import org.apache.shindig.gadgets.BasicGadgetBlacklist;
-import org.apache.shindig.gadgets.BasicGadgetTokenDecoder;
-import org.apache.shindig.gadgets.BasicRemoteContentFetcher;
-import org.apache.shindig.gadgets.ContainerConfig;
-import org.apache.shindig.gadgets.ContentCache;
-import org.apache.shindig.gadgets.ContentFetcher;
-import org.apache.shindig.gadgets.ContentFetcherFactory;
-import org.apache.shindig.gadgets.GadgetBlacklist;
-import org.apache.shindig.gadgets.GadgetFeatureRegistry;
-import org.apache.shindig.gadgets.GadgetServer;
-import org.apache.shindig.gadgets.GadgetSpecFetcher;
-import org.apache.shindig.gadgets.GadgetTokenDecoder;
-import org.apache.shindig.gadgets.MessageBundleFetcher;
-import org.apache.shindig.gadgets.RemoteContentFetcherFactory;
-import org.apache.shindig.gadgets.SigningFetcherFactory;
-import org.apache.shindig.gadgets.oauth.OAuthFetcherFactory;
-import org.apache.shindig.social.opensocial.ActivitiesService;
-import org.apache.shindig.social.opensocial.DataService;
-import org.apache.shindig.social.opensocial.PeopleService;
-import org.apache.shindig.social.samplecontainer.BasicActivitiesService;
-import org.apache.shindig.social.samplecontainer.BasicDataService;
-import org.apache.shindig.social.samplecontainer.BasicPeopleService;
-import org.apache.shindig.util.ResourceLoader;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.CreationException;
-import com.google.inject.Scopes;
-import com.google.inject.name.Names;
-import com.google.inject.spi.Message;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-import java.util.Properties;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-
-/**
- * TODO this is to be removed once I figure out how to get AbderaServlet
- * to play with Guice.
- *
- * TODO: Also, these extra bindings should really be moved into the
- * SocialApiGuiceModule if they are needed.
- */
-public class RestGuiceModule extends AbstractModule {
- private Properties properties = null;
- private final String DEFAULT_PROPERTIES = "gadgets.properties";
-
- /** {@inheritDoc} */
- @Override
- protected void configure() {
-
- Names.bindProperties(this.binder(), properties);
-
- bind(RemoteContentFetcherFactory.class);
- bind(SigningFetcherFactory.class);
- // Needed becuase OAuth fetcher factory fetches its config
- bind(ContentFetcher.class)
- .annotatedWith(OAuthFetcherFactory.OAuthConfigFetcher.class)
- .to(BasicRemoteContentFetcher.class);
- bind(OAuthFetcherFactory.class);
- bind(ContentFetcherFactory.class);
-
- bind(ContentFetcher.class)
- .annotatedWith(GadgetSpecFetcher.class)
- .toProvider(ContentFetcherFactory.class);
- bind(ContentFetcher.class)
- .annotatedWith(MessageBundleFetcher.class)
- .toProvider(ContentFetcherFactory.class);
-
- bind(GadgetBlacklist.class).to(BasicGadgetBlacklist.class);
- bind(Executor.class).toInstance(Executors.newCachedThreadPool());
-
- bind(ContainerConfig.class).in(Scopes.SINGLETON);
- bind(GadgetFeatureRegistry.class).in(Scopes.SINGLETON);
- bind(GadgetServer.class).in(Scopes.SINGLETON);
-
- bind(PeopleService.class).to(BasicPeopleService.class);
- bind(DataService.class).to(BasicDataService.class);
- bind(ActivitiesService.class).to(BasicActivitiesService.class);
-
- bind(ContentFetcher.class).to(BasicRemoteContentFetcher.class);
- bind(GadgetTokenDecoder.class).to(BasicGadgetTokenDecoder.class);
- bind(ContentCache.class).to(BasicContentCache.class);
- }
-
- /**
- * Creates module with standard properties.
- */
- public RestGuiceModule() {
- Properties properties = null;
- try {
- InputStream is = ResourceLoader.openResource(DEFAULT_PROPERTIES);
- properties = new Properties();
- properties.load(is);
- } catch (IOException e) {
- throw new CreationException(Arrays.asList(
- new Message("Unable to load properties: " + DEFAULT_PROPERTIES)));
- }
- this.properties = properties;
- }
-
-}
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/RestServerCollectionAdapter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/RestServerCollectionAdapter.java?rev=653560&r1=653559&r2=653560&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/RestServerCollectionAdapter.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/abdera/RestServerCollectionAdapter.java Mon May 5 12:11:16 2008
@@ -17,9 +17,7 @@
*/
package org.apache.shindig.social.abdera;
-import org.apache.shindig.social.opensocial.model.Activity;
-import org.apache.shindig.social.opensocial.model.Person;
-import org.apache.shindig.social.opensocial.util.BeanXmlConverter;
+import com.google.inject.Inject;
import org.apache.abdera.model.Entry;
import org.apache.abdera.model.Feed;
@@ -28,6 +26,9 @@
import org.apache.abdera.protocol.server.ResponseContext;
import org.apache.abdera.protocol.server.context.ResponseContextException;
import org.apache.abdera.protocol.server.impl.AbstractCollectionAdapter;
+import org.apache.shindig.social.opensocial.model.Activity;
+import org.apache.shindig.social.opensocial.model.Person;
+import org.apache.shindig.social.opensocial.util.BeanXmlConverter;
import java.util.Date;
import java.util.List;
@@ -36,15 +37,15 @@
/**
* handles logic to create feeds, entries etc.
*
- * @author vnori@google.com (Vasu Nori)
- *
*/
@SuppressWarnings("unchecked")
-public class RestServerCollectionAdapter extends AbstractCollectionAdapter {
+public abstract class RestServerCollectionAdapter
+ extends AbstractCollectionAdapter {
private static Logger logger =
Logger.getLogger(RestServerCollectionAdapter.class.getName());
+ @Inject BeanXmlConverter beanXmlConverter;
- protected ResponseContext returnFeed(RequestContext request, String title,
+ protected ResponseContext returnFeed(RequestContext request, String title,
String author, List<Object> listOfObj) {
Feed feed;
try {
@@ -54,13 +55,13 @@
return null;
}
feed.setBaseUri(request.getUri());
- // TODO set these some other way?
+ //TODO set these some other way?
feed.addAuthor(author);
feed.setTitle(title);
// TODO updated should be set to the MAX(updated) of all entries
feed.setUpdated(new Date());
feed.setId(request.getUri().toString());
-
+
if (listOfObj != null) {
// make Entries out of the list of objects returned above
for (Object obj : listOfObj) {
@@ -83,38 +84,38 @@
.setEntityTag(ProviderHelper.calculateEntityTag(feed));
}
- private Entry fillEntry(RequestContext request, Object obj,
+ private Entry fillEntry(RequestContext request, Object obj,
String id, Date updated) {
// create entry
Entry entry = request.getAbdera().newEntry();
entry.setId(id);
- entry.setContent(BeanXmlConverter.convertToXml(obj), "text/xml");
+ entry.setContent(beanXmlConverter.convertToXml(obj), "text/xml");
entry.setUpdated(updated);
// TODO what should this be?
entry.addAuthor("Author TODO");
// TODO what should this be?
if (obj instanceof Person) {
- entry.setTitle((((Person)obj).getName().getUnstructured() != null) ?
+ entry.setTitle((((Person)obj).getName().getUnstructured() != null) ?
((Person)obj).getName().getUnstructured() : "title TODO");
} else if (obj instanceof Activity) {
entry.setTitle(((Activity)obj).getTitle());
} else {
entry.setTitle("title TODO");
- }
+ }
// TODO what is this
//entry.setSource(feed.getAsSource());
return entry;
}
-
- protected ResponseContext returnEntry(RequestContext request, Object obj,
+
+ protected ResponseContext returnEntry(RequestContext request, Object obj,
String entryId, Date updated) {
if (null == obj) {
return ProviderHelper.notfound(request);
}
-
+
Entry entry = fillEntry(request, obj, entryId, updated);
- return ProviderHelper.returnBase(entry.getDocument(), 200,
+ return ProviderHelper.returnBase(entry.getDocument(), 200,
entry.getEdited())
.setEntityTag(ProviderHelper.calculateEntityTag(entry));
}
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/BeanXmlConverter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/BeanXmlConverter.java?rev=653560&r1=653559&r2=653560&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/BeanXmlConverter.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/util/BeanXmlConverter.java Mon May 5 12:11:16 2008
@@ -25,10 +25,10 @@
import org.xml.sax.SAXException;
public class BeanXmlConverter {
- public static Logger logger =
+ private static Logger logger =
Logger.getLogger(BeanXmlConverter.class.getName());
- public static String convertToXml(Object obj) {
+ public String convertToXml(Object obj) {
StringWriter outputWriter = new StringWriter();
BeanWriter writer = new BeanWriter(outputWriter);
writer.getXMLIntrospector()