You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by et...@apache.org on 2008/09/19 19:10:00 UTC

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

Author: etnu
Date: Fri Sep 19 10:09:59 2008
New Revision: 697154

URL: http://svn.apache.org/viewvc?rev=697154&view=rev
Log:
Moving UrlGenerator into gadgets and out of servlet; extracting interface for easier extension.


Added:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultUrlGenerator.java
      - copied, changed from r697024, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/UrlGenerator.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/UrlGenerator.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultUrlGeneratorTest.java
      - copied, changed from r697024, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/UrlGeneratorTest.java
Removed:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/UrlGenerator.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/UrlGeneratorTest.java
Modified:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTask.java
    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/ServletTestFixture.java

Copied: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultUrlGenerator.java (from r697024, incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/UrlGenerator.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultUrlGenerator.java?p2=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultUrlGenerator.java&p1=incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/UrlGenerator.java&r1=697024&r2=697154&rev=697154&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/UrlGenerator.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultUrlGenerator.java Fri Sep 19 10:09:59 2008
@@ -16,16 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.shindig.gadgets.servlet;
+package org.apache.shindig.gadgets;
 
 import org.apache.shindig.common.util.HashUtil;
 import org.apache.shindig.common.util.Utf8UrlCoder;
-import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.GadgetContext;
-import org.apache.shindig.gadgets.GadgetFeature;
-import org.apache.shindig.gadgets.GadgetFeatureRegistry;
-import org.apache.shindig.gadgets.JsLibrary;
-import org.apache.shindig.gadgets.UserPrefs;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.UserPref;
 import org.apache.shindig.gadgets.spec.View;
@@ -38,32 +32,38 @@
 import java.util.regex.Pattern;
 
 /**
- * Generates urls for various public entrypoints
+ * Default url generator. Produces js urls that include checksums for cache-busting.
+ *
+ * TODO: iframe and js url generation are two distinct things, and should probably be different
+ * interfaces.
  */
 @Singleton
-public class UrlGenerator {
-
+public class DefaultUrlGenerator implements UrlGenerator {
+  private final static Pattern ALLOWED_FEATURE_NAME = Pattern.compile("[0-9a-zA-Z\\.\\-]+");
   private final String jsPrefix;
   private final String iframePrefix;
   private final String jsChecksum;
-  private final static Pattern ALLOWED_FEATURE_NAME
-      = Pattern.compile("[0-9a-zA-Z\\.\\-]+");
 
-  /**
-   * @param features The list of features that js is needed for.
-   * @return The url for the bundled javascript that includes all referenced
-   *    feature libraries.
-   */
-  public String getBundledJsUrl(Collection<String> features,
-      GadgetContext context) {
+  @Inject
+  public DefaultUrlGenerator(@Named("shindig.urls.iframe.prefix") String iframePrefix,
+                             @Named("shindig.urls.js.prefix") String jsPrefix,
+                             GadgetFeatureRegistry registry) {
+    this.iframePrefix = iframePrefix;
+    this.jsPrefix = jsPrefix;
+
+    StringBuilder jsBuf = new StringBuilder();
+    for (GadgetFeature feature : registry.getAllFeatures()) {
+      for (JsLibrary library : feature.getJsLibraries(null, null)) {
+        jsBuf.append(library.getContent());
+      }
+    }
+    jsChecksum = HashUtil.checksum(jsBuf.toString().getBytes());
+  }
+
+  public String getBundledJsUrl(Collection<String> features, GadgetContext context) {
     return jsPrefix + getBundledJsParam(features, context);
   }
 
-  /**
-   * @param features
-   * @param context
-   * @return The bundled js parameter for type=url gadgets.
-   */
   public String getBundledJsParam(Collection<String> features, GadgetContext context) {
     StringBuilder buf = new StringBuilder();
     boolean first = false;
@@ -87,11 +87,8 @@
   }
 
   /**
-   * Generates iframe urls for meta data service.
-   * Use this rather than generating your own urls by hand.
-   *
-   * @param gadget
-   * @return The generated iframe url.
+   * TODO: This is in need of a rewrite most likely. It doesn't even take locked domain into
+   * consideration!
    */
   public String getIframeUrl(Gadget gadget) {
     StringBuilder buf = new StringBuilder();
@@ -153,20 +150,4 @@
 
     return buf.toString();
   }
-
-  @Inject
-  public UrlGenerator(@Named("shindig.urls.iframe.prefix") String iframePrefix,
-                      @Named("shindig.urls.js.prefix") String jsPrefix,
-                      GadgetFeatureRegistry registry) {
-    this.iframePrefix = iframePrefix;
-    this.jsPrefix = jsPrefix;
-
-    StringBuilder jsBuf = new StringBuilder();
-    for (GadgetFeature feature : registry.getAllFeatures()) {
-      for (JsLibrary library : feature.getJsLibraries(null, null)) {
-        jsBuf.append(library.getContent());
-      }
-    }
-    jsChecksum = HashUtil.checksum(jsBuf.toString().getBytes());
-  }
-}
+}
\ No newline at end of file

Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/UrlGenerator.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/UrlGenerator.java?rev=697154&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/UrlGenerator.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/UrlGenerator.java Fri Sep 19 10:09:59 2008
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.gadgets;
+
+import com.google.inject.ImplementedBy;
+
+import java.util.Collection;
+
+/**
+ * Generates urls for various public entrypoints
+ */
+@ImplementedBy(DefaultUrlGenerator.class)
+public interface UrlGenerator {
+  /**
+   * @param features The list of features that js is needed for.
+   * @return The url for the bundled javascript that includes all referenced feature libraries.
+   */
+  String getBundledJsUrl(Collection<String> features, GadgetContext context);
+
+  /**
+   * @param features
+   * @param context
+   * @return The bundled js parameter for type=url gadgets.
+   */
+  String getBundledJsParam(Collection<String> features, GadgetContext context);
+
+  /**
+   * Generates iframe urls for meta data service.
+   * Use this rather than generating your own urls by hand.
+   *
+   * @return The generated iframe url.
+   */
+  String getIframeUrl(Gadget gadget);
+}

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTask.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTask.java?rev=697154&r1=697153&r2=697154&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTask.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingTask.java Fri Sep 19 10:09:59 2008
@@ -32,6 +32,7 @@
 import org.apache.shindig.gadgets.JsLibrary;
 import org.apache.shindig.gadgets.LockedDomainService;
 import org.apache.shindig.gadgets.MessageBundleFactory;
+import org.apache.shindig.gadgets.DefaultUrlGenerator;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.spec.Feature;
 import org.apache.shindig.gadgets.spec.LocaleSpec;
@@ -93,7 +94,7 @@
 
   private final ContainerConfig containerConfig;
 
-  private final UrlGenerator urlGenerator;
+  private final DefaultUrlGenerator urlGenerator;
 
   private GadgetContext context;
 
@@ -560,7 +561,7 @@
       MessageBundleFactory messageBundleFactory,
       GadgetFeatureRegistry registry,
       ContainerConfig containerConfig,
-      UrlGenerator urlGenerator,
+      DefaultUrlGenerator urlGenerator,
       LockedDomainService lockedDomainService) {
     this.server = server;
     this.messageBundleFactory = messageBundleFactory;

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=697154&r1=697153&r2=697154&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 Fri Sep 19 10:09:59 2008
@@ -22,6 +22,7 @@
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.GadgetServer;
+import org.apache.shindig.gadgets.DefaultUrlGenerator;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.LinkSpec;
 import org.apache.shindig.gadgets.spec.ModulePrefs;
@@ -52,7 +53,7 @@
 
   private final ExecutorService executor;
   private final GadgetServer server;
-  private final UrlGenerator urlGenerator;
+  private final DefaultUrlGenerator urlGenerator;
 
   /**
    * Processes a JSON request.
@@ -221,7 +222,7 @@
 
   @Inject
   public JsonRpcHandler(ExecutorService executor, GadgetServer server,
-      UrlGenerator iframeUrlGenerator) {
+      DefaultUrlGenerator iframeUrlGenerator) {
     this.executor = executor;
     this.server = server;
     this.urlGenerator = iframeUrlGenerator;

Copied: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultUrlGeneratorTest.java (from r697024, incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/UrlGeneratorTest.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultUrlGeneratorTest.java?p2=incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultUrlGeneratorTest.java&p1=incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/UrlGeneratorTest.java&r1=697024&r2=697154&rev=697154&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/UrlGeneratorTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultUrlGeneratorTest.java Fri Sep 19 10:09:59 2008
@@ -16,21 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.shindig.gadgets.servlet;
+package org.apache.shindig.gadgets;
 
 import static org.easymock.EasyMock.expect;
 
-import com.google.common.collect.Maps;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
 
-import junitx.framework.StringAssert;
+import com.google.common.collect.Maps;
 
 import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.GadgetContext;
-import org.apache.shindig.gadgets.GadgetTestFixture;
-import org.apache.shindig.gadgets.JsLibrary;
-import org.apache.shindig.gadgets.UserPrefs;
-import org.apache.shindig.gadgets.spec.GadgetSpec;
+
+import junitx.framework.StringAssert;
 
 import java.net.URI;
 import java.util.ArrayList;
@@ -40,9 +36,9 @@
 import java.util.Map;
 
 /**
- * Tests for UrlGenerator.
+ * Tests for DefaultUrlGenerator.
  */
-public class UrlGeneratorTest extends GadgetTestFixture {
+public class DefaultUrlGeneratorTest extends GadgetTestFixture {
   private final static String IFR_PREFIX = "shindig/eye-frame?";
   private final static String JS_PREFIX = "get-together/livescript/";
   private final static String SPEC_URL = "http://example.org/gadget.xml";
@@ -58,11 +54,11 @@
   private final static int MODULE_ID = 3435;
 
   private final GadgetContext context = mock(GadgetContext.class);
-  private UrlGenerator realUrlGenerator;
+  private DefaultUrlGenerator realUrlGenerator;
 
   @Override
   public void setUp() throws Exception {
-    realUrlGenerator = new UrlGenerator(IFR_PREFIX, JS_PREFIX, registry);
+    realUrlGenerator = new DefaultUrlGenerator(IFR_PREFIX, JS_PREFIX, registry);
 
     expect(context.getContainer()).andReturn(CONTAINER).anyTimes();
     expect(context.getUrl()).andReturn(URI.create(SPEC_URL)).anyTimes();
@@ -151,7 +147,7 @@
     GadgetSpec spec = new GadgetSpec(URI.create(SPEC_URL), xml);
     replay();
     Gadget gadget = new Gadget(context, spec, Collections.<JsLibrary>emptyList(), containerConfig, null);
-    
+
     URI iframeUrl = URI.create(realUrlGenerator.getIframeUrl(gadget));
 
     assertEquals(TYPE_URL_HREF_HOST, iframeUrl.getAuthority());

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java?rev=697154&r1=697153&r2=697154&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletTestFixture.java Fri Sep 19 10:09:59 2008
@@ -24,6 +24,7 @@
 import org.apache.shindig.common.util.DateUtil;
 import org.apache.shindig.gadgets.GadgetTestFixture;
 import org.apache.shindig.gadgets.LockedDomainService;
+import org.apache.shindig.gadgets.DefaultUrlGenerator;
 
 import org.apache.commons.lang.StringUtils;
 
@@ -42,7 +43,7 @@
   public final HttpServletResponseRecorder recorder = new HttpServletResponseRecorder(response);
   public final GadgetRenderingTask gadgetRenderer;
   public final JsonRpcHandler jsonRpcHandler;
-  public final UrlGenerator urlGenerator = mock(UrlGenerator.class);
+  public final DefaultUrlGenerator urlGenerator = mock(DefaultUrlGenerator.class);
   public final LockedDomainService lockedDomainService = mock(LockedDomainService.class);
 
   private final long testStartTime = timeSource.currentTimeMillis();