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)