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