You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by lr...@apache.org on 2009/07/01 00:01:31 UTC

svn commit: r789976 - in /incubator/shindig/trunk/java/common/src: main/java/org/apache/shindig/config/JsonContainerConfig.java test/java/org/apache/shindig/config/JsonContainerConfigTest.java

Author: lryan
Date: Tue Jun 30 22:01:31 2009
New Revision: 789976

URL: http://svn.apache.org/viewvc?rev=789976&view=rev
Log:
Fix container config handling for JSON "null" literal.

Modified:
    incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/JsonContainerConfig.java
    incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigTest.java

Modified: incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/JsonContainerConfig.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/JsonContainerConfig.java?rev=789976&r1=789975&r2=789976&view=diff
==============================================================================
--- incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/JsonContainerConfig.java (original)
+++ incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/config/JsonContainerConfig.java Tue Jun 30 22:01:31 2009
@@ -165,7 +165,9 @@
    * Convert a JSON value to a configuration value.
    */
   private static Object jsonToConfig(Object json, Expressions expressions, ELContext context) {
-    if (json instanceof CharSequence) {
+    if (JSONObject.NULL.equals(json)) {
+      return null;
+    } else if (json instanceof CharSequence) {
       return new DynamicConfigProperty(json.toString(), expressions, context);
     } else if (json instanceof JSONArray) {
       JSONArray jsonArray = (JSONArray) json;
@@ -185,7 +187,10 @@
   private static Map<String, Object> jsonToMap(JSONObject json, Expressions expressions, ELContext context) {
     Map<String, Object> values = new HashMap<String, Object>(json.length(), 1);
     for (String key : JSONObject.getNames(json)) {
-      values.put(key, jsonToConfig(json.opt(key), expressions, context));
+      Object val = jsonToConfig(json.opt(key), expressions, context);
+      if (val != null) {
+        values.put(key, val);
+      }
     }
     return Collections.unmodifiableMap(values);
   }
@@ -257,7 +262,7 @@
     for (String field : fields) {
       Object existing = clone.opt(field);
       Object update = merge.get(field);
-      if (existing == null || update == null) {
+      if (JSONObject.NULL.equals(existing) || JSONObject.NULL.equals(update)) {
         // It's new custom config, not referenced in the prototype, or
         // it's removing a pre-configured value.
         clone.put(field, update);

Modified: incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigTest.java?rev=789976&r1=789975&r2=789976&view=diff
==============================================================================
--- incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigTest.java (original)
+++ incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/config/JsonContainerConfigTest.java Tue Jun 30 22:01:31 2009
@@ -207,4 +207,13 @@
 
     assertEquals(TOP_LEVEL_VALUE, config.getString(CHILD_CONTAINER, "parentExpression"));
   }
+
+  @Test
+  public void nullEntryEvaluation() throws Exception {
+    // We use a JSON Object here to guarantee that we're well formed up front.
+    JSONObject json = new JSONObject("{ 'gadgets.container' : ['default'], features : { osapi : null }}");
+    JsonContainerConfig config = new JsonContainerConfig(createContainer(json).getAbsolutePath(),
+        Expressions.forTesting());
+    assertNull(config.getMap("default", "features").get("osapi"));
+  }
 }