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