Treat undefined Record properties on JSOs as nulls

Review at http://gwt-code-reviews.appspot.com/744801

Review by: amitmanjhi@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8501 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java b/user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java
index 3558572..a2ba8dc 100644
--- a/user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java
+++ b/user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java
@@ -83,12 +83,12 @@
     // assert isDefined(property.getName()) :
     // "Cannot ask for a property before setting it: "
     // + property.getName();
-    if (isNull(property.getName())) {
+    if (isNullOrUndefined(property.getName())) {
       return null;
     }
     try {
       if (Boolean.class.equals(property.getType())) {
-      return (V) Boolean.valueOf((String) get(property.getName()));
+      return (V) Boolean.valueOf(getBoolean(property.getName()));
       }
       if (Byte.class.equals(property.getType())) {
         return (V) Byte.valueOf((byte) getInt(property.getName()));
@@ -189,8 +189,8 @@
   /**
    * @param name
    */
-  public final native boolean isNull(String name)/*-{
-    return this[name] === null;
+  public final native boolean isNullOrUndefined(String name)/*-{
+    return this[name] == null;
   }-*/;
 
   public final boolean merge(RecordJsoImpl from) {
@@ -299,6 +299,10 @@
     return @java.util.Date::createFrom(D)(millis);
   }-*/;
 
+  private native boolean getBoolean(String name) /*-{
+    return this[name];
+  }-*/;
+
   private native double getDouble(String name) /*-{
     return this[name];
   }-*/;
diff --git a/user/test/com/google/gwt/valuestore/shared/impl/RecordJsoImplTest.java b/user/test/com/google/gwt/valuestore/shared/impl/RecordJsoImplTest.java
index 7786277..17e8ac7 100644
--- a/user/test/com/google/gwt/valuestore/shared/impl/RecordJsoImplTest.java
+++ b/user/test/com/google/gwt/valuestore/shared/impl/RecordJsoImplTest.java
@@ -122,6 +122,8 @@
     }
     assertEquals((Long) 42L, jso.getId());
     assertEquals(new Integer(1), jso.getVersion());
+    assertEquals(null, jso.get(SimpleFooRecord.longField));
+    assertEquals(null, jso.get(SimpleFooRecord.enumField));
     testSchema(jso, schemaPresent);
   }