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