Author: zhoresh
Date: Thu Feb 24 19:14:55 2011
New Revision: 1074260

URL: http://svn.apache.org/viewvc?rev=1074260&view=rev
Log:
Detect duplicate User prefs in gadget spec | 
http://codereview.appspot.com/4224042/

Modified:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/GadgetSpec.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/GadgetSpecTest.java

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/GadgetSpec.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/GadgetSpec.java?rev=1074260&r1=1074259&r2=1074260&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/GadgetSpec.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/GadgetSpec.java
 Thu Feb 24 19:14:55 2011
@@ -65,7 +65,7 @@ public class GadgetSpec {
     NodeList children = doc.getChildNodes();
 
     ModulePrefs modulePrefs = null;
-    ImmutableMap.Builder<String,UserPref> prefsBuilder = 
ImmutableMap.builder();
+    Map<String,UserPref> prefsBuilder = Maps.newHashMap();
     Map<String, List<Element>> views = Maps.newHashMap();
     for (int i = 0, j = children.getLength(); i < j; ++i) {
       Node child = children.item(i);
@@ -83,6 +83,9 @@ public class GadgetSpec {
       }
       if ("UserPref".equals(name)) {
         UserPref pref = new UserPref(element);
+        if (prefsBuilder.containsKey(pref.getName())) {
+          throw new SpecParserException("Duplicate value for user pref " + 
pref.getName());
+        }
         prefsBuilder.put(pref.getName(), pref);
       }
       if ("Content".equals(name)) {
@@ -114,7 +117,7 @@ public class GadgetSpec {
       }
       this.views = ImmutableMap.copyOf(tmpViews);
     }
-    this.userPrefs = prefsBuilder.build();
+    this.userPrefs = ImmutableMap.copyOf(prefsBuilder);
   }
 
   /**
@@ -236,7 +239,7 @@ public class GadgetSpec {
 
     return spec;
   }
-  
+
   /**
    * Returns a copy of the spec with all type=url views removed.
    */

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/GadgetSpecTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/GadgetSpecTest.java?rev=1074260&r1=1074259&r2=1074260&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/GadgetSpecTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/GadgetSpecTest.java
 Thu Feb 24 19:14:55 2011
@@ -93,6 +93,17 @@ public class GadgetSpecTest extends Asse
     new GadgetSpec(SPEC_URL, xml);
   }
 
+  @Test(expected=SpecParserException.class)
+  public void testEnforceUserPrefNoDuplicate() throws Exception {
+    String xml = "<Module>" +
+                 "<ModulePrefs title=\"hello\"/>" +
+                 "<UserPref name=\"foo\" datatype=\"string\"/>" +
+                 "<UserPref name=\"foo\" datatype=\"int\"/>" +
+                 "<Content type=\"html\"/>" +
+                 "</Module>";
+    new GadgetSpec(SPEC_URL, xml);
+  }
+
   @Test
   public void testSubstitutions() throws Exception {
     Substitutions substituter = new Substitutions();


Reply via email to