You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by jo...@apache.org on 2008/10/16 18:41:01 UTC

svn commit: r705276 - in /incubator/shindig/trunk: features/core/ java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ java/gadgets/src/test/java/org/apache/shindig/gadgets/render/

Author: johnh
Date: Thu Oct 16 09:41:00 2008
New Revision: 705276

URL: http://svn.apache.org/viewvc?rev=705276&view=rev
Log:
Adding API to set default userprefs values, and populating those in the Java server impl. The default values are used in JS when no explicit values are specified in a given rendering call.

Other small tweaks in this CL:
* Fixed style issue w/ the messages value in a Prefs object. Previously the declared "var messages" was not used.
* Adding more debug information to ProxyBase for malformed proxy request.

This CL resolves SHINDIG-175.


Modified:
    incubator/shindig/trunk/features/core/prefs.js
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java

Modified: incubator/shindig/trunk/features/core/prefs.js
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core/prefs.js?rev=705276&r1=705275&r2=705276&view=diff
==============================================================================
--- incubator/shindig/trunk/features/core/prefs.js (original)
+++ incubator/shindig/trunk/features/core/prefs.js Thu Oct 16 09:41:00 2008
@@ -47,6 +47,7 @@
 var instance = null;
 var prefs = {};
 var messages = {};
+var defaultPrefs = {};
 var language = "en";
 var country = "US";
 var moduleId = 0;
@@ -71,6 +72,18 @@
 };
 
 /**
+ * Sets default pref values for values left unspecified in the
+ * rendering call, but with default_value provided in the spec.
+ */
+function mergeDefaults() {
+  for (var name in defaultPrefs) {
+    if (!prefs[name]) {
+      prefs[name] = defaultPrefs[name];
+    }
+  }
+};
+
+/**
  * @class
  * Provides access to user preferences, module dimensions, and messages.
  *
@@ -91,6 +104,7 @@
 gadgets.Prefs = function() {
   if (!instance) {
     parseUrl();
+    mergeDefaults();
     instance = this;
   }
   return instance;
@@ -112,8 +126,15 @@
 /**
  * Initializes message bundles.
  */
-gadgets.Prefs.setMessages_ = function(messages) {
-  msgs = messages;
+gadgets.Prefs.setMessages_ = function(msgs) {
+  messages = msgs;
+};
+
+/**
+ * Initializes default user prefs values.
+ */
+gadgets.Prefs.setDefaultPrefs_ = function(defprefs) {
+  defaultPrefs = defprefs;
 };
 
 /**
@@ -218,7 +239,7 @@
  * @return {String} The message
  */
 gadgets.Prefs.prototype.getMsg = function(key) {
-  return msgs[key] || "";
+  return messages[key] || "";
 };
 
 /**

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java?rev=705276&r1=705275&r2=705276&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/RenderingContentRewriter.java Thu Oct 16 09:41:00 2008
@@ -43,6 +43,7 @@
 import org.apache.shindig.gadgets.spec.LocaleSpec;
 import org.apache.shindig.gadgets.spec.MessageBundle;
 import org.apache.shindig.gadgets.spec.ModulePrefs;
+import org.apache.shindig.gadgets.spec.UserPref;
 import org.apache.shindig.gadgets.spec.View;
 
 import com.google.common.collect.Sets;
@@ -125,6 +126,7 @@
       // This can be one script block.
       content.appendHead("<script>");
       injectMessageBundles(gadget, content);
+      injectDefaultPrefs(gadget, content);
       injectPreloads(gadget, content);
       content.appendHead("</script>");
       injectOnLoadHandlers(content);
@@ -333,6 +335,23 @@
            .appendHead(msgs)
            .appendHead(");");
   }
+  
+  /**
+   * Injects default values for user prefs into the gadget output.
+   */
+  private void injectDefaultPrefs(Gadget gadget, GadgetContent content) {
+    JSONObject defaultPrefs = new JSONObject();
+    try {
+      for (UserPref up : gadget.getSpec().getUserPrefs()) {
+        defaultPrefs.put(up.getName(), up.getDefaultValue());
+      }
+    } catch (JSONException e) {
+      // Never happens. Name is required (cannot be null). Default value is a String.
+    }
+    content.appendHead("gadgets.Prefs.setDefaultPrefs_(")
+           .appendHead(defaultPrefs.toString())
+           .appendHead(");");
+  }
 
   /**
    * Injects preloads into the gadget output.

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java?rev=705276&r1=705275&r2=705276&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java Thu Oct 16 09:41:00 2008
@@ -58,8 +58,8 @@
       UriBuilder url = UriBuilder.parse(urlToValidate);
       if (!"http".equals(url.getScheme()) && !"https".equals(url.getScheme())) {
         throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
-            "Invalid request url scheme; only " +
-            "\"http\" and \"https\" supported.");
+            "Invalid request url scheme in url: " + urlToValidate +
+            "; only \"http\" and \"https\" supported.");
       }
       if (url.getPath() == null || url.getPath().length() == 0) {
         url.setPath("/");

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java?rev=705276&r1=705275&r2=705276&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RenderingContentRewriterTest.java Thu Oct 16 09:41:00 2008
@@ -468,6 +468,8 @@
       "    <msg name='two'>bar</msg>" +
       "  </Locale>" +
       "</ModulePrefs>" +
+      "<UserPref name='pref_one' default_value='default_one'/>" +
+      "<UserPref name='pref_two'/>" +
       "<Content type='html'/>" +
       "</Module>";
 
@@ -484,6 +486,15 @@
     JSONObject json = new JSONObject(matcher.group(1));
     assertEquals("foo", json.get("one"));
     assertEquals("bar", json.get("two"));
+    
+    Pattern defaultsPattern = Pattern.compile(
+        "(?:.*)gadgets\\.Prefs\\.setDefaultPrefs_\\((.*)\\);(?:.*)", Pattern.DOTALL);
+    Matcher defaultsMatcher = defaultsPattern.matcher(rewritten);
+    assertTrue("gadgets.Prefs.setDefaultPrefs_ not invoked.", defaultsMatcher.matches());
+    JSONObject defaultsJson = new JSONObject(defaultsMatcher.group(1));
+    assertEquals(2, defaultsJson.length());
+    assertEquals("default_one", defaultsJson.get("pref_one"));
+    assertEquals("", defaultsJson.get("pref_two"));
   }
 
   @Test(expected = RuntimeException.class)