Author: etnu
Date: Wed Jan 30 15:35:06 2008
New Revision: 616957

URL: http://svn.apache.org/viewvc?rev=616957&view=rev
Log:
Added enum support to GadgetSpec, as required by the canonical gadget spec XSD.


Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetSpec.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetSpecParser.java
    
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetSpecParserTest.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetSpec.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetSpec.java?rev=616957&r1=616956&r2=616957&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetSpec.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetSpec.java
 Wed Jan 30 15:35:06 2008
@@ -68,6 +68,8 @@
     }
 
     public DataType getDataType();
+
+    public Map<String, String> getEnumValues();
   }
 
   public List<UserPref> getUserPrefs();

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetSpecParser.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetSpecParser.java?rev=616957&r1=616956&r2=616957&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetSpecParser.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetSpecParser.java
 Wed Jan 30 15:35:06 2008
@@ -24,8 +24,8 @@
 
 import java.io.IOException;
 import java.net.MalformedURLException;
-import java.net.URISyntaxException;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -242,6 +242,23 @@
       up.defaultValue = defaultValue.getNodeValue();
     }
 
+    // Check for enum types.
+    up.enumValues = new HashMap<String, String>();
+    NodeList children = pref.getChildNodes();
+    for (int i = 0, j = children.getLength(); i < j; ++i) {
+      Node child = children.item(i);
+      if (child.getNodeName().equals("EnumValue")) {
+        NamedNodeMap childAttrs = child.getAttributes();
+
+        // Must have both name and value.
+        Node value = childAttrs.getNamedItem("value");
+        Node displayValue = childAttrs.getNamedItem("display_value");
+        if (value != null && displayValue != null) {
+          up.enumValues.put(value.getTextContent(),
+                            displayValue.getTextContent());
+        }
+      }
+    }
     return up;
   }
 
@@ -474,6 +491,7 @@
       private String defaultValue;
       private boolean required;
       private DataType dataType;
+      private Map<String, String> enumValues;
 
       private static DataType parse(String str) {
         for (DataType dt : UserPref.DataType.values()) {
@@ -502,6 +520,10 @@
 
       public DataType getDataType() {
         return dataType;
+      }
+
+      public Map<String, String> getEnumValues() {
+        return enumValues;
       }
     }
 

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetSpecParserTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetSpecParserTest.java?rev=616957&r1=616956&r2=616957&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetSpecParserTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetSpecParserTest.java
 Wed Jan 30 15:35:06 2008
@@ -16,6 +16,8 @@
 import junit.framework.TestCase;
 
 import java.net.URI;
+import java.util.List;
+import java.util.Map;
 
 public class GadgetSpecParserTest extends TestCase {
 
@@ -48,5 +50,35 @@
 
     assertEquals("Hello!", spec.getContentData());
     assertEquals("Hello, world!", spec.getTitle());
+  }
+
+  public void testEnumParsing() throws Exception {
+    BasicGadgetId id = new BasicGadgetId();
+    id.uri = new URI("http://example.org/text.xml";);
+    id.moduleId = 1;
+    byte[] xml = ("<?xml version=\"1.0\"?>" +
+                 "<Module>" +
+                 "<ModulePrefs title=\"Test Enum\">" +
+                 "<UserPref name=\"test\" datatype=\"enum\">" +
+                 "<EnumValue value=\"0\" display_value=\"Zero\"/>" +
+                 "<EnumValue value=\"1\" display_value=\"One\"/>" +
+                 "</UserPref>" +
+                 "</ModulePrefs>" +
+                 "<Content type=\"html\">Hello!</Content>" +
+                 "</Module>").getBytes();
+    GadgetSpec spec = parser.parse(id, xml);
+
+    List<GadgetSpec.UserPref> prefs = spec.getUserPrefs();
+
+    assertEquals(1, prefs.size());
+    GadgetSpec.UserPref pref = prefs.get(0);
+    assertEquals("test", pref.getName());
+
+    Map<String, String> enumValues = pref.getEnumValues();
+
+    assertEquals(2, enumValues.size());
+
+    assertEquals("Zero", enumValues.get("0"));
+    assertEquals("One", enumValues.get("1"));
   }
 }


Reply via email to