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