You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by zh...@apache.org on 2011/06/28 17:52:53 UTC

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

Author: zhoresh
Date: Tue Jun 28 15:52:53 2011
New Revision: 1140692

URL: http://svn.apache.org/viewvc?rev=1140692&view=rev
Log:
Update JsVersioner to take the full request into account | https://reviews.apache.org/r/970/

Modified:
    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/DefaultJsVersioner.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsVersionerTest.java

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=1140692&r1=1140691&r2=1140692&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 Tue Jun 28 15:52:53 2011
@@ -136,8 +136,10 @@ public class DefaultJsUriManager impleme
 
     // Finally, version it, but only if !nocache.
     if (versioner != null && !ctx.isNoCache()) {
-      uri.addQueryParameter(Param.VERSION.getKey(),
-          versioner.version(ctx.getGadget(), container, ctx.getLibs()));
+      String version = versioner.version(ctx);
+      if (version != null && version.length() > 0) {
+        uri.addQueryParameter(Param.VERSION.getKey(), version);
+      }
     }
     if (ctx.getExtensionParams() != null) {
       uri.addQueryParameters(ctx.getExtensionParams());
@@ -204,12 +206,16 @@ public class DefaultJsUriManager impleme
 
     UriStatus status = UriStatus.VALID_UNVERSIONED;
     String version = uri.getQueryParameter(Param.VERSION.getKey());
+    JsUri jsUri = new JsUri(status, uri, libs, have);
     if (version != null && versioner != null) {
       String gadgetParam = uri.getQueryParameter(Param.URL.getKey());
-      status = versioner.validate(gadgetParam, container, libs, version);
+      status = versioner.validate(jsUri, version);
+      if (status != UriStatus.VALID_UNVERSIONED) {
+        jsUri = new JsUri(status, jsUri);
+      }
     }
 
-    return new JsUri(status, uri, libs, have);
+    return jsUri;
   }
 
   static String addJsLibs(Collection<String> extern) {

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsVersioner.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsVersioner.java?rev=1140692&r1=1140691&r2=1140692&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsVersioner.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsVersioner.java Tue Jun 28 15:52:53 2011
@@ -18,13 +18,12 @@
  */
 package org.apache.shindig.gadgets.uri;
 
-import java.util.Collection;
-
 import org.apache.shindig.common.util.HashUtil;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.RenderingContext;
 import org.apache.shindig.gadgets.features.FeatureRegistry;
 import org.apache.shindig.gadgets.features.FeatureResource;
+import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
 import org.apache.shindig.gadgets.uri.JsUriManager.Versioner;
 
 import com.google.common.collect.Maps;
@@ -48,22 +47,22 @@ public class DefaultJsVersioner implemen
     this.versionCache = Maps.newHashMap();
   }
 
-  public String version(String gadgetUri, final String container, Collection<String> extern) {
+  public String version(final JsUri jsUri) {
     GadgetContext ctx = new GadgetContext() {
       @Override
       public String getContainer() {
-        return container;
+        return jsUri.getContainer();
       }
 
       @Override
       public RenderingContext getRenderingContext() {
-        return RenderingContext.GADGET;
+        return jsUri.getContext();
       }
     };
 
     // Registry itself will cache these requests.
     List<FeatureResource> resources =
-        registry.getFeatureResources(ctx, extern, null).getResources();
+        registry.getFeatureResources(ctx, jsUri.getLibs(), null).getResources();
     if (versionCache.containsKey(resources)) {
       return versionCache.get(resources);
     }
@@ -78,14 +77,13 @@ public class DefaultJsVersioner implemen
     return checksum;
   }
 
-  public UriStatus validate(String gadgetUri, String container,
-      Collection<String> extern, String version) {
+  public UriStatus validate(JsUri jsUri, String version) {
     if (version == null || version.length() == 0) {
       return UriStatus.VALID_UNVERSIONED;
     }
 
     // Punt up to version(), utilizing its cache.
-    String expectedVersion = version(gadgetUri, container, extern);
+    String expectedVersion = version(jsUri);
     if (version.equals(expectedVersion)) {
       return UriStatus.VALID_VERSIONED;
     }

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=1140692&r1=1140691&r2=1140692&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 Tue Jun 28 15:52:53 2011
@@ -133,7 +133,11 @@ public interface JsUriManager {
     }
 
     public JsUri(JsUri origJsUri) {
-      super(origJsUri.getStatus(), origJsUri.getRefresh(),
+      this(origJsUri.getStatus(), origJsUri);
+    }
+
+    public JsUri(UriStatus status, JsUri origJsUri) {
+      super(status, origJsUri.getRefresh(),
           origJsUri.isDebug(),
           origJsUri.isNoCache(),
           origJsUri.getContainer(),
@@ -237,20 +241,16 @@ public interface JsUriManager {
 
   public interface Versioner {
     /**
-     * @param gadgetUri Gadget for which extern Uri was generated.
-     * @param container The container for this gadget.
-     * @param extern Collection of libs externed.
+     * @param jsUri js request to create version for
      * @return Version string for the Uri.
      */
-    String version(String gadgetUri, String container, Collection<String> extern);
+    String version(JsUri jsUri);
 
     /**
-     * @param gadgetUri Gadget for which extern Uri was generated.
-     * @param container corresponding container for this gadget.
-     * @param extern Collection of libs externed.
+     * @param jsUri js request to validate
      * @param version Version string generated by the Versioner.
      * @return Validation status of the version.
      */
-    UriStatus validate(String gadgetUri, String container, Collection<String> extern, String version);
+    UriStatus validate(JsUri jsUri, String version);
   }
 }

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=1140692&r1=1140691&r2=1140692&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 Tue Jun 28 15:52:53 2011
@@ -23,6 +23,8 @@ 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.easymock.EasyMock.isA;
+import static org.easymock.EasyMock.eq;
 import static org.junit.Assert.*;
 
 import com.google.common.collect.ImmutableList;
@@ -123,7 +125,7 @@ public class DefaultJsUriManagerTest {
     List<String> extern = Lists.newArrayList("feature");
     JsUri ctx = mockGadgetContext(false, false, extern);
     String version = "verstring";
-    Versioner versioner = this.mockVersioner(extern, version, version);
+    Versioner versioner = this.mockVersioner(ctx, version, version);
     TestDefaultJsUriManager manager = makeManager(config, versioner);
     Uri jsUri = manager.makeExternJsUri(ctx);
     assertFalse(manager.hadError());
@@ -144,7 +146,7 @@ public class DefaultJsUriManagerTest {
     List<String> extern = Lists.newArrayList("feature");
     JsUri ctx = mockGadgetContext(true, false, extern);  // no cache
     String version = "verstring";
-    Versioner versioner = this.mockVersioner(extern, version, version);
+    Versioner versioner = this.mockVersioner(ctx, version, version);
     TestDefaultJsUriManager manager = makeManager(config, versioner);
     Uri jsUri = manager.makeExternJsUri(ctx);
     assertFalse(manager.hadError());
@@ -290,7 +292,8 @@ public class DefaultJsUriManagerTest {
     List<String> extern = Lists.newArrayList("feature", "another");
     String version = "verstring";
     String badVersion = version + "-a";
-    Versioner versioner = mockVersioner(extern, version, badVersion);
+    JsUri ctx = mockGadgetContext(false, false, extern);
+    Versioner versioner = mockVersioner(ctx, version, badVersion);
     TestDefaultJsUriManager manager = makeManager(config, versioner);
     Uri testUri = Uri.parse("http://target-host.org/gadgets/js/" + addJsLibs(extern) +
         JS_SUFFIX + '?' + Param.CONTAINER.getKey() + '=' + CONTAINER + '&' +
@@ -307,7 +310,8 @@ public class DefaultJsUriManagerTest {
     ContainerConfig config = mockConfig("http://" + targetHost, "/gadgets/js");
     List<String> extern = Lists.newArrayList("feature", "another");
     String version = "verstring";
-    Versioner versioner = mockVersioner(extern, version, version);
+    JsUri ctx = mockGadgetContext(false, false, extern);
+    Versioner versioner = mockVersioner(ctx, version, version);
     TestDefaultJsUriManager manager = makeManager(config, versioner);
     Uri testUri = Uri.parse("http://target-host.org/gadgets/js/" + addJsLibs(extern) +
         JS_SUFFIX + '?' + Param.CONTAINER.getKey() + '=' + CONTAINER);
@@ -323,7 +327,8 @@ public class DefaultJsUriManagerTest {
     ContainerConfig config = mockConfig("http://" + targetHost, "/gadgets/js");
     List<String> extern = Lists.newArrayList("feature", "another");
     String version = "verstring";
-    Versioner versioner = mockVersioner(extern, version, version);
+    JsUri ctx = mockGadgetContext(false, false, extern);
+    Versioner versioner = mockVersioner(ctx, version, version);
     TestDefaultJsUriManager manager = makeManager(config, versioner);
     Uri testUri = Uri.parse("http://target-host.org/gadgets/js/" + addJsLibs(extern) +
         JS_SUFFIX + '?' + Param.CONTAINER.getKey() + '=' + CONTAINER + '&' +
@@ -342,7 +347,7 @@ public class DefaultJsUriManagerTest {
     List<String> extern = Lists.newArrayList("feature1", "feature2", "feature3");
     JsUri ctx = mockGadgetContext(false, false, extern);
     String version = "verstring";
-    Versioner versioner = mockVersioner(extern, version, version);
+    Versioner versioner = mockVersioner(ctx, version, version);
     TestDefaultJsUriManager manager = makeManager(config, versioner);
     Uri jsUri = manager.makeExternJsUri(ctx);
     assertFalse(manager.hadError());
@@ -395,17 +400,12 @@ public class DefaultJsUriManagerTest {
     return config;
   }
 
-  private Versioner mockVersioner(
-      Collection<String> extern, String genVersion, String testVersion) {
+  private Versioner mockVersioner(JsUri jsUri, String genVersion, String testVersion) {
     JsUriManager.Versioner versioner = createMock(Versioner.class);
-    expect(versioner.version(GADGET_URI, CONTAINER, extern)).andReturn(genVersion).anyTimes();
-    expect(versioner.version(null, CONTAINER, extern)).andReturn(genVersion).anyTimes();
+    expect(versioner.version(jsUri)).andStubReturn(genVersion);
     UriStatus status = (genVersion != null && genVersion.equals(testVersion)) ?
-          UriStatus.VALID_VERSIONED : UriStatus.INVALID_VERSION;
-    expect(versioner.validate(GADGET_URI, CONTAINER, extern, testVersion))
-        .andReturn(status).anyTimes();
-    expect(versioner.validate(null, CONTAINER, extern, testVersion))
-        .andReturn(status).anyTimes();
+        UriStatus.VALID_VERSIONED : UriStatus.INVALID_VERSION;
+    expect(versioner.validate(isA(JsUri.class), eq(testVersion))).andStubReturn(status);
     replay(versioner);
     return versioner;
   }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsVersionerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsVersionerTest.java?rev=1140692&r1=1140691&r2=1140692&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsVersionerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsVersionerTest.java Tue Jun 28 15:52:53 2011
@@ -30,12 +30,13 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.features.FeatureRegistry;
 import org.apache.shindig.gadgets.features.FeatureResource;
+import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
 
-import org.easymock.EasyMock;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -48,9 +49,6 @@ import java.util.List;
  * gets appropriately cached and differs when JS content differs.
  */
 public class DefaultJsVersionerTest {
-  private static final String URI = "http://apache.org/gadget.xml";
-  private static final String CONTAINER = "container";
-
   private DefaultJsVersioner versioner;
   private FeatureRegistry registry;
 
@@ -66,9 +64,10 @@ public class DefaultJsVersionerTest {
     expectReq(feature, "content");
     replay(registry);
     Collection<String> libs = Lists.newArrayList(feature);
-    String version = versioner.version(URI, CONTAINER, libs);
+    JsUri jsUri = new JsUri(UriStatus.VALID_UNVERSIONED, null, libs, null);
+    String version = versioner.version(jsUri);
     assertNotNull(version);
-    String versionAgain = versioner.version(URI, CONTAINER, libs);
+    String versionAgain = versioner.version(jsUri);
     assertSame(version, versionAgain);
     verify(registry);
   }
@@ -81,9 +80,11 @@ public class DefaultJsVersionerTest {
     expectReq(feature2, "content2");
     replay(registry);
     Collection<String> libs1 = Lists.newArrayList(feature1);
-    String version1 = versioner.version(URI, CONTAINER, libs1);
+    JsUri jsUri1 = new JsUri(UriStatus.VALID_UNVERSIONED, null, libs1, null);
+    String version1 = versioner.version(jsUri1);
     Collection<String> libs2 = Lists.newArrayList(feature2);
-    String version2 = versioner.version(URI, CONTAINER, libs2);
+    JsUri jsUri2 = new JsUri(UriStatus.VALID_UNVERSIONED, null, libs2, null);
+    String version2 = versioner.version(jsUri2);
     assertNotNull(version1);
     assertNotNull(version2);
     assertFalse(version1.equals(version2));
@@ -96,9 +97,10 @@ public class DefaultJsVersionerTest {
     expectReq(feature, "content");
     replay(registry);
     Collection<String> libs = Lists.newArrayList(feature);
-    String version = versioner.version(URI, CONTAINER, libs);
+    JsUri jsUri = new JsUri(UriStatus.VALID_UNVERSIONED, null, libs, null);
+    String version = versioner.version(jsUri);
     assertNotNull(version);
-    UriStatus status = versioner.validate(URI, CONTAINER, libs, version + "-nomatch");
+    UriStatus status = versioner.validate(jsUri, version + "-nomatch");
     assertEquals(UriStatus.INVALID_VERSION, status);
     verify(registry);
   }
@@ -109,9 +111,10 @@ public class DefaultJsVersionerTest {
     expectReq(feature, "content");
     replay(registry);
     Collection<String> libs = Lists.newArrayList(feature);
-    String version = versioner.version(URI, CONTAINER, libs);
+    JsUri jsUri = new JsUri(UriStatus.VALID_UNVERSIONED, null, libs, null);
+    String version = versioner.version(jsUri);
     assertNotNull(version);
-    UriStatus status = versioner.validate(URI, CONTAINER, libs, null);
+    UriStatus status = versioner.validate(jsUri, null);
     assertEquals(UriStatus.VALID_UNVERSIONED, status);
     verify(registry);
   }
@@ -122,9 +125,10 @@ public class DefaultJsVersionerTest {
     expectReq(feature, "content");
     replay(registry);
     Collection<String> libs = Lists.newArrayList(feature);
-    String version = versioner.version(URI, CONTAINER, libs);
+    JsUri jsUri = new JsUri(UriStatus.VALID_UNVERSIONED, null, libs, null);
+    String version = versioner.version(jsUri);
     assertNotNull(version);
-    UriStatus status = versioner.validate(URI, CONTAINER, libs, "");
+    UriStatus status = versioner.validate(jsUri, "");
     assertEquals(UriStatus.VALID_UNVERSIONED, status);
     verify(registry);
   }
@@ -135,9 +139,10 @@ public class DefaultJsVersionerTest {
     expectReq(feature, "content");
     replay(registry);
     Collection<String> libs = Lists.newArrayList(feature);
-    String version = versioner.version(URI, CONTAINER, libs);
+    JsUri jsUri = new JsUri(UriStatus.VALID_UNVERSIONED, null, libs, null);
+    String version = versioner.version(jsUri);
     assertNotNull(version);
-    UriStatus status = versioner.validate(URI, CONTAINER, libs, version);
+    UriStatus status = versioner.validate(jsUri, version);
     assertEquals(UriStatus.VALID_VERSIONED, status);
     verify(registry);
   }
@@ -145,11 +150,12 @@ public class DefaultJsVersionerTest {
   private void expectReq(String feature, String content) {
     FeatureResource resource = new FeatureResource.Simple(content, "", "js");
     Collection<String> libs = Lists.newArrayList(feature);
+    List<String> loaded = ImmutableList.of();
     List<FeatureResource> resources = Lists.newArrayList(resource);
     final FeatureRegistry.LookupResult lr = createMock(FeatureRegistry.LookupResult.class);
     expect(lr.getResources()).andReturn(resources).anyTimes();
     replay(lr);
-    expect(registry.getFeatureResources(isA(GadgetContext.class), eq(libs),
-        EasyMock.<List<String>>isNull())).andReturn(lr).anyTimes();
+    expect(registry.getFeatureResources(isA(GadgetContext.class), eq(libs), eq(loaded)))
+        .andStubReturn(lr);
   }
 }