Reviewers: ,
Description:
When a record has a property (for instance a Long property) set to
'null', the client side parser will throw out an exception instead of
gracefully returning null.
Please review this at http://gwt-code-reviews.appspot.com/712802/show
Affected files:
user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java
Index: user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java
===================================================================
--- user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java
(revision 8466)
+++ user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java
(working copy)
@@ -84,44 +84,51 @@
// "Cannot ask for a property before setting it: "
// + property.getName();
- if (Byte.class.equals(property.getType())) {
- return (V) Byte.valueOf((byte) getInt(property.getName()));
+ if (Boolean.class.equals(property.getType())) {
+ return (V) Boolean.valueOf((String) get(property.getName()));
}
- if (Short.class.equals(property.getType())) {
- return (V) Short.valueOf((short) getInt(property.getName()));
- }
- if (Float.class.equals(property.getType())) {
- return (V) Float.valueOf((float) getDouble(property.getName()));
- }
- if (BigInteger.class.equals(property.getType())) {
- return (V) new BigDecimal((String)
get(property.getName())).toBigInteger();
- }
- if (BigDecimal.class.equals(property.getType())) {
- return (V) new BigDecimal((String) get(property.getName()));
- }
- if (Integer.class.equals(property.getType())) {
- return (V) Integer.valueOf(getInt(property.getName()));
- }
- if (Long.class.equals(property.getType())) {
- return (V) Long.valueOf((String) get(property.getName()));
- }
- if (Double.class.equals(property.getType())) {
- if (!isDefined(property.getName())) {
- return (V) new Double(0.0);
+ try {
+ if (Byte.class.equals(property.getType())) {
+ return (V) Byte.valueOf((byte) getInt(property.getName()));
}
- return (V) Double.valueOf(getDouble(property.getName()));
- }
- if (Date.class.equals(property.getType())) {
- double millis = new Date().getTime();
- if (isDefined(property.getName())) {
- millis = Double.parseDouble((String) get(property.getName()));
+ if (Short.class.equals(property.getType())) {
+ return (V) Short.valueOf((short) getInt(property.getName()));
}
- if (GWT.isScript()) {
- return (V) dateForDouble(millis);
- } else {
- // In dev mode, we're using real JRE dates
- return (V) new Date((long) millis);
+ if (Float.class.equals(property.getType())) {
+ return (V) Float.valueOf((float) getDouble(property.getName()));
}
+ if (BigInteger.class.equals(property.getType())) {
+ return (V) new BigDecimal((String)
get(property.getName())).toBigInteger();
+ }
+ if (BigDecimal.class.equals(property.getType())) {
+ return (V) new BigDecimal((String) get(property.getName()));
+ }
+ if (Integer.class.equals(property.getType())) {
+ return (V) Integer.valueOf(getInt(property.getName()));
+ }
+ if (Long.class.equals(property.getType())) {
+ return (V) Long.valueOf((String) get(property.getName()));
+ }
+ if (Double.class.equals(property.getType())) {
+ if (!isDefined(property.getName())) {
+ return (V) new Double(0.0);
+ }
+ return (V) Double.valueOf(getDouble(property.getName()));
+ }
+ if (Date.class.equals(property.getType())) {
+ double millis = new Date().getTime();
+ if (isDefined(property.getName())) {
+ millis = Double.parseDouble((String) get(property.getName()));
+ }
+ if (GWT.isScript()) {
+ return (V) dateForDouble(millis);
+ } else {
+ // In dev mode, we're using real JRE dates
+ return (V) new Date((long) millis);
+ }
+ }
+ } catch (final NumberFormatException ex) {
+ return null;
}
if (property instanceof EnumProperty) {
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors