Author: doll
Date: Mon Jun 16 12:15:26 2008
New Revision: 668265

URL: http://svn.apache.org/viewvc?rev=668265&view=rev
Log:
The java restful apis now return error responses correctly and the javascript 
is now able to interpet them into opensocial response errors. 


Modified:
    incubator/shindig/trunk/features/opensocial-current/restfulcontainer.js
    
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/ResponseError.java
    
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java

Modified: 
incubator/shindig/trunk/features/opensocial-current/restfulcontainer.js
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/opensocial-current/restfulcontainer.js?rev=668265&r1=668264&r2=668265&view=diff
==============================================================================
--- incubator/shindig/trunk/features/opensocial-current/restfulcontainer.js 
(original)
+++ incubator/shindig/trunk/features/opensocial-current/restfulcontainer.js Mon 
Jun 16 12:15:26 2008
@@ -98,11 +98,14 @@
     gadgets.io.makeNonProxiedRequest(
         baseUrl + url + separator + "st=" + st,
         function(result) {
-          result = result.data;
+          var error;
+          if (result.errors) {
+            error = RestfulContainer.translateHttpError(result.errors[0]);
+          }
 
-          // TODO: handle errors
+          // TODO: get error messages
           var processedData = requestObject.request.processResponse(
-              requestObject.request, result, null, null);
+              requestObject.request, result.data, error, null);
           globalError = globalError || processedData.hadError();
           responseMap[requestObject.key] = processedData;
 
@@ -118,6 +121,25 @@
 
 };
 
+RestfulContainer.translateHttpError = function(httpError) {
+  if (httpError == "Error 501") {
+    return opensocial.ResponseItem.Error.NOT_IMPLEMENTED;
+  } else if (httpError == "Error 401") {
+    return opensocial.ResponseItem.Error.UNAUTHORIZED;
+  } else if (httpError == "Error 403") {
+    return opensocial.ResponseItem.Error.FORBIDDEN;
+  } else if (httpError == "Error 400") {
+    return opensocial.ResponseItem.Error.BAD_REQUEST;
+  } else if (httpError == "Error 500") {
+    return opensocial.ResponseItem.Error.INTERNAL_ERROR;
+  } else if (httpError == "Error 404") {
+    return opensocial.ResponseItem.Error.BAD_REQUEST;
+  // TODO: Which one should the limit exceeded error be?
+  // } else if (httpError == "Error ???") {
+  //   return opensocial.ResponseItem.Error.LIMIT_EXCEEDED;
+  }
+}
+
 RestfulContainer.prototype.makeIdSpec = function(id) {
   return new opensocial.IdSpec({'userId' : id});
 }

Modified: 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/ResponseError.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/ResponseError.java?rev=668265&r1=668264&r2=668265&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/ResponseError.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/ResponseError.java
 Mon Jun 16 12:15:26 2008
@@ -17,21 +17,29 @@
  */
 package org.apache.shindig.social;
 
+import javax.servlet.http.HttpServletResponse;
+
 public enum ResponseError {
-  NOT_IMPLEMENTED("notImplemented"),
-  UNAUTHORIZED("unauthorized"),
-  FORBIDDEN("forbidden"),
-  BAD_REQUEST("badRequest"),
-  INTERNAL_ERROR("internalError");
+  NOT_IMPLEMENTED("notImplemented", HttpServletResponse.SC_NOT_IMPLEMENTED),
+  UNAUTHORIZED("unauthorized", HttpServletResponse.SC_UNAUTHORIZED),
+  FORBIDDEN("forbidden", HttpServletResponse.SC_FORBIDDEN),
+  BAD_REQUEST("badRequest", HttpServletResponse.SC_BAD_REQUEST),
+  INTERNAL_ERROR("internalError", 
HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
 
   private final String jsonValue;
+  private int httpErrorCode;
 
-  ResponseError(String jsonValue) {
+  ResponseError(String jsonValue, int httpErrorCode) {
     this.jsonValue = jsonValue;
+    this.httpErrorCode = httpErrorCode;
   }
 
   @Override
   public String toString() {
     return jsonValue;
   }
+
+  public int getHttpErrorCode() {
+    return httpErrorCode;
+  }
 }

Modified: 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java?rev=668265&r1=668264&r2=668265&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java
 Mon Jun 16 12:15:26 2008
@@ -19,6 +19,7 @@
 
 import org.apache.shindig.common.SecurityToken;
 import org.apache.shindig.social.ResponseItem;
+import org.apache.shindig.social.ResponseError;
 import org.apache.shindig.social.opensocial.util.BeanConverter;
 
 import com.google.common.collect.Lists;
@@ -60,7 +61,8 @@
       PrintWriter writer = servletResponse.getWriter();
       writer.write(converter.convertToString(responseItem.getResponse()));
     } else {
-      // throw an error
+      servletResponse.sendError(responseItem.getError().getHttpErrorCode(),
+          responseItem.getErrorMessage());
     }
   }
 

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java?rev=668265&r1=668264&r2=668265&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java
 Mon Jun 16 12:15:26 2008
@@ -109,6 +109,12 @@
   }
 
   public void testHandleMethodFailure() throws Exception {
+    for (ResponseError error : ResponseError.values()) {
+      assertMethodFailure(error);
+    }
+  }
+
+  private void assertMethodFailure(final ResponseError error) throws 
IOException {
     drh = new DataRequestHandler() {
       ResponseItem handleDelete(HttpServletRequest servletRequest,
           SecurityToken token) {
@@ -127,14 +133,15 @@
 
       ResponseItem handleGet(HttpServletRequest servletRequest,
           SecurityToken token) {
-        return new ResponseItem<String>(ResponseError.INTERNAL_ERROR, "", "");
+        return new ResponseItem<String>(error, "", "");
       }
     };
 
+    resp.sendError(error.getHttpErrorCode(), "");
     EasyMock.replay(req, resp);
     drh.handleMethod("GET", req, resp, null);
-    // TODO: Assert the right actions occur based on the error type
     EasyMock.verify(req, resp);
+    EasyMock.reset(req, resp);
   }
 
   public void testGetParamsFromRequest() throws Exception {


Reply via email to