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/09/24 00:06:37 UTC
svn commit: r698375 - in /incubator/shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/servlet/
main/java/org/apache/shindig/gadgets/spec/
test/java/org/apache/shindig/gadgets/servlet/
Author: johnh
Date: Tue Sep 23 15:06:37 2008
New Revision: 698375
URL: http://svn.apache.org/viewvc?rev=698375&view=rev
Log:
Returning orderedEnums from JSON RPC (/gadgets/metadata) handler to allow callers to retrieve an ordered list of values for enum type UserPrefs.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/JsonRpcHandler.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/UserPref.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java
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=698375&r1=698374&r2=698375&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 Tue Sep 23 15:06:37 2008
@@ -169,7 +169,8 @@
.put("displayName", pref.getDisplayName())
.put("type", pref.getDataType().toString().toLowerCase())
.put("default", pref.getDefaultValue())
- .put("enumValues", pref.getEnumValues());
+ .put("enumValues", pref.getEnumValues())
+ .put("orderedEnumValues", getOrderedEnums(pref));
userPrefs.put(pref.getName(), up);
}
@@ -215,6 +216,19 @@
throw new RpcException(context, e);
}
}
+
+ private List<JSONObject> getOrderedEnums(UserPref pref) throws JSONException {
+ List<UserPref.EnumValuePair> orderedEnums = pref.getOrderedEnumValues();
+ List<JSONObject> jsonEnums = new ArrayList<JSONObject>(orderedEnums.size());
+ for (UserPref.EnumValuePair evp : orderedEnums) {
+ JSONObject curEnum = new JSONObject();
+ curEnum.put("value", evp.getValue());
+ curEnum.put("displayValue", evp.getDisplayValue());
+ jsonEnums.add(curEnum);
+ }
+ return jsonEnums;
+ }
+
public Job(GadgetContext context) {
this.context = context;
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/UserPref.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/UserPref.java?rev=698375&r1=698374&r2=698375&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/UserPref.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/UserPref.java Tue Sep 23 15:06:37 2008
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations under the License.
*/
package org.apache.shindig.gadgets.spec;
+
import org.apache.shindig.common.xml.XmlUtil;
import org.apache.shindig.gadgets.Substitutions;
@@ -24,6 +25,8 @@
import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
/**
@@ -83,6 +86,15 @@
public Map<String, String> getEnumValues() {
return enumValues;
}
+
+ /**
+ * UserPref.EnumValue (ordered)
+ * Useful for rendering ordered lists of user prefs with enum type.
+ */
+ private List<EnumValuePair> orderedEnumValues;
+ public List<EnumValuePair> getOrderedEnumValues() {
+ return orderedEnumValues;
+ }
/**
* Performs substitutions on the pref. See field comments for details on what
@@ -101,12 +113,23 @@
} else {
Map<String, String> values
= new HashMap<String, String>(enumValues.size());
- for (Map.Entry<String, String> entry : enumValues.entrySet()) {
+ for (Map.Entry<String, String> entry : enumValues.entrySet()) {
values.put(entry.getKey(),
substituter.substituteString(type, entry.getValue()));
}
pref.enumValues = Collections.unmodifiableMap(values);
}
+ if (orderedEnumValues.isEmpty()) {
+ pref.orderedEnumValues = Collections.emptyList();
+ } else {
+ List<EnumValuePair> orderedValues
+ = new LinkedList<EnumValuePair>();
+ for (EnumValuePair evp : orderedEnumValues) {
+ orderedValues.add(new EnumValuePair(evp.getValue(),
+ substituter.substituteString(type, evp.getDisplayValue())));
+ }
+ pref.orderedEnumValues = Collections.unmodifiableList(orderedValues);
+ }
return pref;
}
@@ -162,6 +185,7 @@
NodeList children = element.getElementsByTagName("EnumValue");
if (children.getLength() > 0) {
Map<String, String> enumValues = new HashMap<String, String>();
+ List<EnumValuePair> orderedEnumValues = new LinkedList<EnumValuePair>();
for (int i = 0, j = children.getLength(); i < j; ++i) {
Element child = (Element)children.item(i);
String value = XmlUtil.getAttribute(child, "value");
@@ -171,10 +195,13 @@
String displayValue
= XmlUtil.getAttribute(child, "display_value", value);
enumValues.put(value, displayValue);
+ orderedEnumValues.add(new EnumValuePair(value, displayValue));
}
this.enumValues = Collections.unmodifiableMap(enumValues);
+ this.orderedEnumValues = Collections.unmodifiableList(orderedEnumValues);
} else {
this.enumValues = Collections.emptyMap();
+ this.orderedEnumValues = Collections.emptyList();
}
}
@@ -209,4 +236,26 @@
return STRING;
}
}
+
+ /**
+ * Simple data structure representing a value/displayValue pair
+ * for UserPref enums. Value is EnumValue@value, and DisplayValue is EnumValue@displayValue.
+ */
+ public static class EnumValuePair {
+ private final String value;
+ private final String displayValue;
+
+ private EnumValuePair(String value, String displayValue) {
+ this.value = value;
+ this.displayValue = displayValue;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public String getDisplayValue() {
+ return displayValue;
+ }
+ }
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java?rev=698375&r1=698374&r2=698375&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/JsonRpcHandlerTest.java Tue Sep 23 15:06:37 2008
@@ -50,6 +50,12 @@
"<ModulePrefs title=\"" + SPEC_TITLE + "\">" +
" <Link rel='" + LINK_REL + "' href='" + LINK_HREF + "'/>" +
"</ModulePrefs>" +
+ "<UserPref name=\"up_one\">" +
+ " <EnumValue value=\"val1\" display_value=\"disp1\"/>" +
+ " <EnumValue value=\"abc\" display_value=\"disp2\"/>" +
+ " <EnumValue value=\"z_xabc\" display_value=\"disp3\"/>" +
+ " <EnumValue value=\"foo\" display_value=\"disp4\"/>" +
+ "</UserPref>" +
"<Content type=\"html\"" +
" preferred_height = \"" + PREFERRED_HEIGHT + '\"' +
" preferred_width = \"" + PREFERRED_WIDTH + '\"' +
@@ -99,6 +105,24 @@
assertEquals(PREFERRED_HEIGHT, view.getInt("preferredHeight"));
assertEquals(PREFERRED_WIDTH, view.getInt("preferredWidth"));
assertEquals(LINK_HREF, gadget.getJSONObject("links").getString(LINK_REL));
+
+ JSONObject userPrefs = gadget.getJSONObject("userPrefs");
+ assertNotNull(userPrefs);
+ JSONObject userPrefData = userPrefs.getJSONObject("up_one");
+ assertNotNull(userPrefData);
+ JSONObject upEnums = userPrefData.getJSONObject("enumValues");
+ assertNotNull(upEnums);
+ assertEquals("disp1", upEnums.get("val1"));
+ assertEquals("disp2", upEnums.get("abc"));
+ assertEquals("disp3", upEnums.get("z_xabc"));
+ assertEquals("disp4", upEnums.get("foo"));
+ JSONArray orderedEnums = userPrefData.getJSONArray("orderedEnumValues");
+ assertNotNull(orderedEnums);
+ assertEquals(4, orderedEnums.length());
+ assertEquals("val1", orderedEnums.getJSONObject(0).getString("value"));
+ assertEquals("abc", orderedEnums.getJSONObject(1).getString("value"));
+ assertEquals("z_xabc", orderedEnums.getJSONObject(2).getString("value"));
+ assertEquals("foo", orderedEnums.getJSONObject(3).getString("value"));
}
// TODO: Verify that user pref specs are returned correctly.