You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jt...@apache.org on 2011/03/02 01:10:37 UTC

svn commit: r1076060 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/servlet/ main/java/org/apache/shindig/gadgets/uri/ test/java/org/apache/shindig/gadgets/servlet/ test/java/org/apache/shindig/gadgets/uri/

Author: jtarrio
Date: Wed Mar  2 00:10:36 2011
New Revision: 1076060

URL: http://svn.apache.org/viewvc?rev=1076060&view=rev
Log:
Support for the loadedFeatures parameter in the API, which specifies a list of
already-present features in JS requests.

Review: http://codereview.appspot.com/4160052/


Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandler.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriCommon.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandler.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandler.java?rev=1076060&r1=1076059&r2=1076060&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandler.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandler.java Wed Mar  2 00:10:36 2011
@@ -110,6 +110,7 @@ public class GadgetsHandler {
     RESIZE_WIDTH(UriCommon.Param.RESIZE_WIDTH),
     RESIZE_QUALITY(UriCommon.Param.RESIZE_QUALITY),
     FEATURES("features"),
+    LOADED_FEATURES("loadedFeatures"),
     CONTAINER_MODE(UriCommon.Param.CONTAINER_MODE),
     ONLOAD(UriCommon.Param.ONLOAD),
     MIME_TYPE("mime_type");
@@ -441,6 +442,7 @@ public class GadgetsHandler {
     private final boolean debug;
     private final boolean ignoreCache;
     private final List<String> features;
+    private final List<String> loadedFeatures;
     private final RenderingContext context;
     private final String onload;
     private final String gadget;
@@ -451,6 +453,7 @@ public class GadgetsHandler {
       this.debug = getBooleanParam(request, Param.DEBUG);
       this.refresh = getIntegerParam(request, Param.REFRESH);
       this.features = getListParam(request, Param.FEATURES);
+      this.loadedFeatures = getListParam(request, Param.LOADED_FEATURES);
       this.context = getRenderingContext(getParam(request, Param.CONTAINER_MODE));
       this.onload = getParam(request, Param.ONLOAD);
       this.gadget = getParam(request, Param.GADGET);
@@ -459,6 +462,7 @@ public class GadgetsHandler {
     public RenderingContext getContext() { return context; }
     public boolean getDebug() { return debug; }
     public List<String> getFeatures() { return features; }
+    public List<String> getLoadedFeatures() { return loadedFeatures; }
     public boolean getIgnoreCache() { return ignoreCache; }
     public String getOnload() { return onload; }
     public Integer getRefresh() { return refresh; }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java?rev=1076060&r1=1076059&r2=1076060&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerApi.java Wed Mar  2 00:10:36 2011
@@ -260,6 +260,7 @@ public class GadgetsHandlerApi {
     public boolean getDebug();
     public boolean getIgnoreCache();
     public List<String> getFeatures();
+    public List<String> getLoadedFeatures();
     public String getOnload();
     public RenderingContext getContext();
   }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java?rev=1076060&r1=1076059&r2=1076060&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java Wed Mar  2 00:10:36 2011
@@ -473,8 +473,8 @@ public class GadgetsHandlerService {
         : RenderingContext.GADGET);
 
     return new JsUri(request.getRefresh(), request.getDebug(), request.getIgnoreCache(),
-        request.getContainer(), request.getGadget(), request.getFeatures(), request.getOnload(),
-        false, false, context, request.getUrl());
+        request.getContainer(), request.getGadget(), request.getFeatures(),
+        request.getLoadedFeatures(), request.getOnload(), false, false, context, request.getUrl());
   }
 
   @VisibleForTesting

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java?rev=1076060&r1=1076059&r2=1076060&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java Wed Mar  2 00:10:36 2011
@@ -69,6 +69,11 @@ public class DefaultJsUriManager impleme
     jsPath.append(JS_SUFFIX);
     uri.setPath(jsPath.toString());
 
+    // Add the list of already-loaded libs
+    if (!ctx.getLoadedLibs().isEmpty()) {
+      uri.addQueryParameter(Param.LOADED_LIBS.getKey(), addJsLibs(ctx.getLoadedLibs()));
+    }
+    
     // Standard container param, as JS may be container-specific.
     uri.addQueryParameter(Param.CONTAINER.getKey(), container);
 
@@ -155,7 +160,7 @@ public class DefaultJsUriManager impleme
     }
 
     Collection<String> libs = getJsLibs(path);
-    String haveParam = uri.getQueryParameter(Param.ALREADY_HAVE.getKey());
+    String haveParam = uri.getQueryParameter(Param.LOADED_LIBS.getKey());
     if (haveParam == null) {
       haveParam = "";
     }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java?rev=1076060&r1=1076059&r2=1076060&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java Wed Mar  2 00:10:36 2011
@@ -29,7 +29,7 @@ import org.apache.shindig.gadgets.Render
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
 
 import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 
 /**
  * Interface defining methods used to generate Uris for the /js servlet.
@@ -51,7 +51,7 @@ public interface JsUriManager {
   JsUri processExternJsUri(Uri uri) throws GadgetException;
 
   public static class JsUri extends ProxyUriBase {
-    private final static Collection<String> EMPTY_COLL = ImmutableList.of();
+    private final static Collection<String> EMPTY_COLL = Collections.emptyList();
     private final Collection<String> libs;
     private final Collection<String> loadedLibs;
     private final String onload;
@@ -95,7 +95,7 @@ public interface JsUriManager {
       this.jsload = jsload;
       this.nohint = nohint;
       this.context = context;
-      this.libs = libs;
+      this.libs = nonNullLibs(libs);
       this.loadedLibs = EMPTY_COLL;
       this.origUri = null;
     }
@@ -107,21 +107,21 @@ public interface JsUriManager {
       this.jsload = false;
       this.nohint = false;
       this.context = RenderingContext.GADGET;
-      this.libs = libs;
+      this.libs = nonNullLibs(libs);
       this.loadedLibs = EMPTY_COLL;
       this.origUri = null;
     }
 
     public JsUri(Integer refresh, boolean debug, boolean noCache, String container, String gadget,
-        Collection<String> libs, String onload, boolean jsload, boolean nohint, RenderingContext context, Uri origUri) {
+        Collection<String> libs, Collection<String> loadedLibs, String onload, boolean jsload, boolean nohint, RenderingContext context, Uri origUri) {
       super(null, refresh, debug, noCache, container, gadget);
       this.compileMode = JsCompileMode.BUILD_TIME;
       this.onload = onload;
       this.jsload = jsload;
       this.nohint = nohint;
       this.context = context;
-      this.libs = libs;
-      this.loadedLibs = EMPTY_COLL;
+      this.libs = nonNullLibs(libs);
+      this.loadedLibs = nonNullLibs(loadedLibs);
       this.origUri = origUri;
     }
 
@@ -150,8 +150,7 @@ public interface JsUriManager {
     }
 
     private Collection<String> nonNullLibs(Collection<String> in) {
-      in = in != null ? in : EMPTY_COLL;
-      return Collections.unmodifiableCollection(in);
+      return in != null ? Collections.unmodifiableList(Lists.newArrayList(in)) : EMPTY_COLL;
     }
 
     public RenderingContext getContext() {

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriCommon.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriCommon.java?rev=1076060&r1=1076059&r2=1076060&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriCommon.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/UriCommon.java Wed Mar  2 00:10:36 2011
@@ -50,7 +50,7 @@ public interface UriCommon {
     COMPILE_MODE("compile"),
     JSLOAD("jsload"),
     ONLOAD("onload"),
-    ALREADY_HAVE("loaded"),
+    LOADED_LIBS("loaded"),
     NO_HINT("nohint"),
 
     // Proxy resize params:

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java?rev=1076060&r1=1076059&r2=1076060&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java Wed Mar  2 00:10:36 2011
@@ -284,7 +284,7 @@ public class GadgetsHandlerServiceTest e
 
     GadgetsHandlerApi.JsResponse response = gadgetHandler.getJs(request);
     JsUri expectedUri = new JsUri(null, false, false, CONTAINER, null,
-        features, null, false, false, RenderingContext.GADGET, null);
+        features, null, null, false, false, RenderingContext.GADGET, null);
     assertEquals(expectedUri, uriCapture.getValue());
     assertEquals(resUri, response.getJsUrl());
     assertNull(response.getJsContent());
@@ -319,7 +319,7 @@ public class GadgetsHandlerServiceTest e
 
     GadgetsHandlerApi.JsResponse response = gadgetHandler.getJs(request);
     JsUri expectedUri = new JsUri(null, false, false, CONTAINER, FakeProcessor.SPEC_URL.toString(),
-        features, onload, false, false, RenderingContext.CONTAINER, null);
+        features, null, onload, false, false, RenderingContext.CONTAINER, null);
     assertEquals(expectedUri, uriCapture.getValue());
     assertNull(response.getJsUrl());
     assertEquals(jsContent, response.getJsContent());

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerTest.java?rev=1076060&r1=1076059&r2=1076060&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerTest.java Wed Mar  2 00:10:36 2011
@@ -565,20 +565,19 @@ public class GadgetsHandlerTest extends 
     JSONObject results = new JSONObject(converter.convertToString(responseObj));
     assertEquals(jsUri.toString(), results.getString("jsUrl"));
     JsUri expectedUri = new JsUri(null, false, false, CONTAINER, GADGET1_URL,
-        features, null, false, false, RenderingContext.GADGET, null);
+        features, null, null, false, false, RenderingContext.GADGET, null);
     assertEquals(expectedUri, captureUri.getValue());
     assertFalse(results.has("error"));
     assertFalse(results.has("jsContent"));
     verify();
   }
 
-  private JSONObject makeComplexJsRequest(List<String> features, String onload)
-      throws JSONException {
+  private JSONObject makeComplexJsRequest(List<String> features, List<String> loadedFeatures,
+      String onload) throws JSONException {
     JSONObject params = new JSONObject().put("gadget", GADGET1_URL)
         .put("container", CONTAINER).put("features", features)
-        .put("fields", "*").put("refresh", "123").put("debug", "1")
-        .put("nocache", "1").put("onload",onload)
-        .put("c", "1");
+        .put("loadedFeatures", loadedFeatures).put("fields", "*").put("refresh", "123")
+        .put("debug", "1").put("nocache", "1").put("onload", onload).put("c", "1");
     JSONObject request =
         new JSONObject().put("method", "gadgets.js").put("id", "req1").put("params", params);
     return request;
@@ -588,10 +587,11 @@ public class GadgetsHandlerTest extends 
   public void testJsData() throws Exception {
     registerGadgetsHandler(null);
     List<String> features = ImmutableList.of("rpc","io");
+    List<String> loadedFeatures = ImmutableList.of("rpc");
     Uri jsUri = Uri.parse("http://shindig.com/gadgets/js/rpc:io");
     String onload = "do \"this\";";
 
-    JSONObject request = makeComplexJsRequest(features, onload);
+    JSONObject request = makeComplexJsRequest(features, loadedFeatures, onload);
 
     Capture<JsUri> captureUri = new Capture<JsUri>();
     EasyMock.expect(jsUriManager.makeExternJsUri(EasyMock.capture(captureUri)))
@@ -607,7 +607,7 @@ public class GadgetsHandlerTest extends 
     JSONObject results = new JSONObject(converter.convertToString(responseObj));
     assertEquals(jsUri.toString(), results.getString("jsUrl"));
     JsUri expectedUri = new JsUri(123, true, true, CONTAINER, GADGET1_URL,
-        features, onload, false, false, RenderingContext.CONTAINER, null);
+        features, loadedFeatures, onload, false, false, RenderingContext.CONTAINER, null);
     assertEquals(expectedUri, captureUri.getValue());
     assertFalse(results.has("error"));
     assertEquals(jsContent, results.getString("jsContent"));
@@ -618,10 +618,11 @@ public class GadgetsHandlerTest extends 
   public void testJsFailure() throws Exception {
     registerGadgetsHandler(null);
     List<String> features = ImmutableList.of("rpc2");
+    List<String> loadedFeatures = ImmutableList.of();
     Uri jsUri = Uri.parse("http://shindig.com/gadgets/js/rpc:io");
     String onload = "do \"this\";";
 
-    JSONObject request = makeComplexJsRequest(features, onload);
+    JSONObject request = makeComplexJsRequest(features, loadedFeatures, onload);
 
     Capture<JsUri> captureUri = new Capture<JsUri>();
     EasyMock.expect(jsUriManager.makeExternJsUri(EasyMock.capture(captureUri)))

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java?rev=1076060&r1=1076059&r2=1076060&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java Wed Mar  2 00:10:36 2011
@@ -23,11 +23,9 @@ import static org.apache.shindig.gadgets
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.replay;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 
@@ -88,7 +86,7 @@ public class DefaultJsUriManagerTest {
     ContainerConfig config = mockConfig("http://www.js.org", "/gadgets/js/");
     TestDefaultJsUriManager manager = makeManager(config, null);
     List<String> extern = Lists.newArrayList("feature");
-    JsUri ctx = mockGadgetContext(false, false, extern, false, ImmutableMap.of("test", "1"));
+    JsUri ctx = mockGadgetContext(false, false, extern, null, false, ImmutableMap.of("test", "1"));
     Uri jsUri = manager.makeExternJsUri(ctx);
     assertFalse(manager.hadError());
     assertEquals("http", jsUri.getScheme());
@@ -163,7 +161,7 @@ public class DefaultJsUriManagerTest {
     ContainerConfig config = mockConfig("http://www.js.org", "/gadgets/js/");
     TestDefaultJsUriManager manager = makeManager(config, null);
     List<String> extern = Lists.newArrayList("feature", "another");
-    JsUri ctx = mockGadgetContext(false, false, extern, true, null);
+    JsUri ctx = mockGadgetContext(false, false, extern, null, true, null);
     Uri jsUri = manager.makeExternJsUri(ctx);
     assertFalse(manager.hadError());
     assertEquals("http", jsUri.getScheme());
@@ -175,6 +173,26 @@ public class DefaultJsUriManagerTest {
     assertEquals(RenderingContext.CONTAINER.getParamValue(),
         jsUri.getQueryParameter(Param.CONTAINER_MODE.getKey()));
   }
+  
+  @Test
+  public void makeJsUriWithLoadedLibraries() throws Exception {
+    ContainerConfig config = mockConfig("http://www.js.org", "/gadgets/js/");
+    TestDefaultJsUriManager manager = makeManager(config, null);
+    List<String> extern = Lists.newArrayList("feature", "another");
+    List<String> loaded = Lists.newArrayList("another", "onemore");
+    JsUri ctx = mockGadgetContext(false, false, extern, loaded);
+    Uri jsUri = manager.makeExternJsUri(ctx);
+    assertFalse(manager.hadError());
+    assertEquals("http", jsUri.getScheme());
+    assertEquals("www.js.org", jsUri.getAuthority());
+    assertEquals("/gadgets/js/" + addJsLibs(extern) + JS_SUFFIX, jsUri.getPath());
+    assertEquals("another:onemore", jsUri.getQueryParameter(Param.LOADED_LIBS.getKey()));
+    assertEquals(CONTAINER, jsUri.getQueryParameter(Param.CONTAINER.getKey()));
+    assertEquals("0", jsUri.getQueryParameter(Param.NO_CACHE.getKey()));
+    assertEquals("0", jsUri.getQueryParameter(Param.DEBUG.getKey()));
+    assertEquals(RenderingContext.GADGET.getParamValue(),
+        jsUri.getQueryParameter(Param.CONTAINER_MODE.getKey()));
+  }
 
   // processJsUri tests
   @Test(expected = RuntimeException.class)
@@ -369,12 +387,18 @@ public class DefaultJsUriManagerTest {
   }
 
   private JsUri mockGadgetContext(boolean nocache, boolean debug, List<String> extern) {
-    return mockGadgetContext(nocache, debug, extern, false, null);
+    return mockGadgetContext(nocache, debug, extern, ImmutableList.<String>of(), false,
+    null);
+  }
+
+  private JsUri mockGadgetContext(
+      boolean nocache, boolean debug, List<String> extern, List<String> loaded) {
+    return mockGadgetContext(nocache, debug, extern, loaded, false, null);
   }
 
   private JsUri mockGadgetContext(boolean nocache, boolean debug,
-                                  List<String> extern, boolean isContainer,
-                                  Map<String, String> params) {
+                                  List<String> extern, List<String> loaded,
+                                  boolean isContainer, Map<String, String> params) {
     JsUri context = createMock(JsUri.class);
     expect(context.getContainer()).andStubReturn(CONTAINER);
     expect(context.isNoCache()).andStubReturn(nocache);
@@ -383,6 +407,8 @@ public class DefaultJsUriManagerTest {
     expect(context.getContext()).andStubReturn(
         isContainer ? RenderingContext.CONTAINER : RenderingContext.GADGET);
     expect(context.getLibs()).andStubReturn(extern);
+    expect(context.getLoadedLibs()).andStubReturn(
+        loaded == null ? ImmutableList.<String>of() : loaded);
     expect(context.getOnload()).andStubReturn(null);
     expect(context.isJsload()).andStubReturn(false);
     expect(context.isNohint()).andStubReturn(false);