You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by li...@apache.org on 2010/01/11 20:33:59 UTC

svn commit: r898023 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/servlet/JsonRpcHandler.java test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java

Author: lindner
Date: Mon Jan 11 19:33:59 2010
New Revision: 898023

URL: http://svn.apache.org/viewvc?rev=898023&view=rev
Log:
SHINDIG-1257 | Patch from Jon Weygandt | Allow extensions to JsonRpcHandler, plus bug fixes

Modified:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsonRpcHandler.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsonRpcHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsonRpcHandler.java?rev=898023&r1=898022&r2=898023&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsonRpcHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsonRpcHandler.java Mon Jan 11 19:33:59 2010
@@ -21,7 +21,6 @@
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.UrlGenerator;
-import org.apache.shindig.gadgets.process.ProcessingException;
 import org.apache.shindig.gadgets.process.Processor;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.LinkSpec;
@@ -37,6 +36,7 @@
 import org.json.JSONObject;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CompletionService;
@@ -49,9 +49,9 @@
  * a single output JSON construct.
  */
 public class JsonRpcHandler {
-  private final ExecutorService executor;
-  private final Processor processor;
-  private final UrlGenerator urlGenerator;
+  protected final ExecutorService executor;
+  protected final Processor processor;
+  protected final UrlGenerator urlGenerator;
 
   @Inject
   public JsonRpcHandler(ExecutorService executor, Processor processor, UrlGenerator urlGenerator) {
@@ -88,13 +88,13 @@
     CompletionService<JSONObject> processor =  new ExecutorCompletionService<JSONObject>(executor);
 
     for (GadgetContext context : gadgets) {
-      processor.submit(new Job(context));
+      processor.submit(createNewJob(context));
     }
 
     JSONObject response = new JSONObject();
 
     int numJobs = gadgets.size();
-    do {
+    while (numJobs > 0) {
       try {
         JSONObject gadget = processor.take().get();
         response.append("gadgets", gadget);
@@ -121,12 +121,16 @@
       } finally {
         numJobs--;
       }
-    } while (numJobs > 0);
+    } 
     return response;
   }
 
-  private class Job implements Callable<JSONObject> {
-    private final GadgetContext context;
+  protected Job createNewJob(GadgetContext context) {
+    return new Job(context);
+  }
+
+  protected class Job implements Callable<JSONObject> {
+    protected final GadgetContext context;
 
     public Job(GadgetContext context) {
       this.context = context;
@@ -136,7 +140,14 @@
       try {
         Gadget gadget = processor.process(context);
         GadgetSpec spec = gadget.getSpec();
-
+        return getGadgetJson(gadget,spec);
+      } catch (Exception e) {
+        throw new RpcException(context, e);
+      }
+    }
+    
+    protected JSONObject getGadgetJson(Gadget gadget, GadgetSpec spec)
+        throws JSONException {
         JSONObject gadgetJson = new JSONObject();
 
         ModulePrefs prefs = spec.getModulePrefs();
@@ -144,12 +155,18 @@
         // TODO: modularize response fields based on requested items.
         JSONObject views = new JSONObject();
         for (View view : spec.getViews().values()) {
-          views.put(view.getName(), new JSONObject()
+          JSONObject jv = new JSONObject()
                // .put("content", view.getContent())
                .put("type", view.getType().toString())
                .put("quirks", view.getQuirks())
                .put("preferredHeight", view.getPreferredHeight())
-               .put("preferredWidth", view.getPreferredWidth()));
+               .put("preferredWidth", view.getPreferredWidth());
+          Map<String, String> vattrs = view.getAttributes();
+          if(vattrs.size()>0){
+            JSONObject ja = new JSONObject(vattrs);
+            jv.put("attributes", ja);
+          }
+          views.put(view.getName(), jv);
         }
 
         // Features.
@@ -210,12 +227,6 @@
                   .put("scaling", prefs.getScaling())
                   .put("scrolling", prefs.getScrolling());
         return gadgetJson;
-      } catch (ProcessingException e) {
-        throw new RpcException(context, e);
-      } catch (JSONException e) {
-        // Shouldn't be possible
-        throw new RpcException(context, e);
-      }
     }
 
     private List<JSONObject> getOrderedEnums(UserPref pref) throws JSONException {

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java?rev=898023&r1=898022&r2=898023&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java Mon Jan 11 19:33:59 2010
@@ -146,7 +146,7 @@
     assertEquals("foo", orderedEnums.getJSONObject(3).getString("value"));
   }
 
-  @Test(expected = RpcException.class)
+  @Test
   public void testUnexpectedError() throws Exception {
     JSONArray gadgets = new JSONArray()
         .put(createGadget(SPEC_URL.toString(), 0, null));
@@ -155,7 +155,9 @@
         .put("gadgets", gadgets);
 
     urlGenerator.throwRandomFault = true;
-    jsonRpcHandler.process(input);
+    JSONObject resp = jsonRpcHandler.process(input);
+    String actual = resp.getJSONArray("gadgets").getJSONObject(0).getJSONArray("errors").getString(0);
+    assertEquals("BROKEN", actual);
   }
 
   // TODO: Verify that user pref specs are returned correctly.