Author: doll
Date: Tue May  6 08:13:40 2008
New Revision: 653802

URL: http://svn.apache.org/viewvc?rev=653802&view=rev
Log:
SHINDIG-233
Patch from Vasu Nori with some additional small cleanups. Restful now supports 
emitting json data.


Modified:
    
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/RestServerCollectionAdapter.java

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=653802&r1=653801&r2=653802&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
 Tue May  6 08:13:40 2008
@@ -17,12 +17,12 @@
 */
 package org.apache.shindig.social.abdera;
 
-import com.google.inject.Inject;
+import org.apache.shindig.social.opensocial.ActivitiesService;
+import org.apache.shindig.social.opensocial.model.Activity;
 
+import com.google.inject.Inject;
 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;
@@ -35,25 +35,22 @@
 @SuppressWarnings("unchecked")
 public class ActivitiesServiceAdapter extends RestServerCollectionAdapter {
   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";
-  
+
   @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
-    String[] paramNames = request.getTarget().getParameterNames();
-    String uid = request.getTarget().getParameter(paramNames[0]);
+    String uid = request.getTarget().getParameter("uid");
 
     List<String> ids = new ArrayList<String>();
     ids.add(uid);
@@ -66,12 +63,10 @@
    *  Handles the following URL
    *    /activities/{uid}/@self/{activityId}
    */
-  @Override
   public ResponseContext getEntry(RequestContext request) {
-    // get the params from the request
-    String[] paramNames = request.getTarget().getParameterNames();
-    String uid = request.getTarget().getParameter(paramNames[0]);
-    String aid = request.getTarget().getParameter(paramNames[1]);
+    String uid = request.getTarget().getParameter("uid");
+    String aid = request.getTarget().getParameter("aid");
+
     // TODO: Use a real gadget token
     Activity obj = handler.getActivity(uid, aid, null).getResponse();
 

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=653802&r1=653801&r2=653802&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
 Tue May  6 08:13:40 2008
@@ -39,25 +39,22 @@
   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";
-  
+
   @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]);
+    String uid = request.getTarget().getParameter("uid");
 
     // TODO(doll): Fix the service apis to add a concept of arbitrary friends
     // Consider whether @all really makes sense...
@@ -66,13 +63,12 @@
     return returnFeed(request, TITLE, AUTHOR, (List)listOfObj);
   }
 
-  
+
   /**
    * Handles the following URLs
    *       /people/{uid}/@all/{pid}
    *       /people/{uid}/@self
    */
-  @Override
   public ResponseContext getEntry(RequestContext request) {
 
       // TODO: Replace this with the real thing
@@ -106,9 +102,6 @@
       }
     };
 
-    // 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

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=653802&r1=653801&r2=653802&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
 Tue May  6 08:13:40 2008
@@ -17,8 +17,12 @@
 */
 package org.apache.shindig.social.abdera;
 
-import com.google.inject.Inject;
+import org.apache.shindig.social.AbstractGadgetData;
+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;
 import org.apache.abdera.protocol.server.ProviderHelper;
@@ -26,9 +30,6 @@
 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;
@@ -39,14 +40,36 @@
  *
  */
 @SuppressWarnings("unchecked")
-public abstract class RestServerCollectionAdapter 
+public abstract class RestServerCollectionAdapter
     extends AbstractCollectionAdapter {
   private static Logger logger =
     Logger.getLogger(RestServerCollectionAdapter.class.getName());
   @Inject BeanXmlConverter beanXmlConverter;
+  private static final String INVALID_FORMAT =
+    "Invalid format. only atom/json-c are supported";
+
+  private enum Format {
+    JSON("json-c"),
+    ATOM("atom");
 
-  protected ResponseContext returnFeed(RequestContext request, String title, 
+    private final String displayValue;
+
+    private Format(String displayValue) {
+      this.displayValue = displayValue;
+    }
+
+    public String getDisplayValue() {
+      return displayValue;
+    }
+  }
+
+  protected ResponseContext returnFeed(RequestContext request, String title,
       String author, List<Object> listOfObj) {
+    Format format = getFormatTypeFromRequest(request);
+    if (format == null) {
+      return ProviderHelper.badrequest(request, INVALID_FORMAT);
+    }
+
     Feed feed;
     try {
       feed = createFeedBase(request);
@@ -61,7 +84,7 @@
     // 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) {
@@ -75,7 +98,7 @@
           entryId = request.getUri().toString() + "/" + 
((Activity)obj).getId();
           updated = ((Activity)obj).getUpdated();
         }
-        Entry entry = fillEntry(request, obj, entryId, updated);
+        Entry entry = fillEntry(request, obj, entryId, updated, format);
         feed.insertEntry(entry);
       }
     }
@@ -84,42 +107,78 @@
           .setEntityTag(ProviderHelper.calculateEntityTag(feed));
   }
 
-  private Entry fillEntry(RequestContext request, Object obj, 
-      String id, Date updated) {
+  private Entry fillEntry(RequestContext request, Object obj,
+      String id, Date updated, Format format) {
     // create entry
     Entry entry = request.getAbdera().newEntry();
     entry.setId(id);
-    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");
-    } 
+    }
+
+    switch (format) {
+      case ATOM:
+        entry.setContent(beanXmlConverter.convertToXml(obj),
+            "application/xml");
+        break;
+      case JSON:
+        entry.setContent(((AbstractGadgetData)obj).toJson().toString(),
+            "application/json");
+        break;
+    }
 
     // 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) {
+    if (obj == null) {
       return ProviderHelper.notfound(request);
     }
-    
-    Entry entry = fillEntry(request, obj, entryId, updated);
-    return ProviderHelper.returnBase(entry.getDocument(), 200, 
+
+    Format format = getFormatTypeFromRequest(request);
+    if (format == null) {
+      return ProviderHelper.badrequest(request, INVALID_FORMAT);
+    }
+
+    Entry entry = fillEntry(request, obj, entryId, updated, format);
+    return ProviderHelper.returnBase(entry.getDocument(), 200,
         entry.getEdited())
         .setEntityTag(ProviderHelper.calculateEntityTag(entry));
   }
 
+  /**
+   * returns the format (jsoc-c or atom) from the RequestContext obj
+   * created by Abdera from the URL request.
+   *
+   * @param request the RequestContext obj from Abdera
+   * @return the format
+   */
+  private Format getFormatTypeFromRequest(RequestContext request) {
+    String format = request.getTarget().getParameter("format");
+    logger.fine("format = " + format);
+
+    if (format == null ||
+        format.equals(Format.JSON.getDisplayValue())) {
+      return Format.JSON;
+    } else if (format.equals(Format.ATOM.getDisplayValue())) {
+      return Format.ATOM;
+    } else {
+      return null;
+    }
+  }
+
   @Override
   public String getAuthor(RequestContext arg0) {
     //  Auto-generated method stub
@@ -137,7 +196,6 @@
     return null;
   }
 
-
   public ResponseContext postEntry(RequestContext arg0) {
     //  Auto-generated method stub
     return null;
@@ -153,13 +211,4 @@
     return null;
   }
 
-  public ResponseContext getEntry(RequestContext request) {
-    // Auto-generated method stub
-    return null;
-  }
-
-  public ResponseContext getFeed(RequestContext request) {
-    // Auto-generated method stub
-    return null;
-  }
 }


Reply via email to