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.