Works great with both boolean and enumerations now On Aug 6, 6:05 pm, Ray Cromwell <[email protected]> wrote: > I'm going to change it to treat undefined as null. In theory, I could change > RecordJsoImpl to initialize all property fields to null or a default value, > according to JLS semantics, but this just makes the client code bigger, and > JSON transfers bigger. Anyone object? > > -Ray > > > > On Fri, Aug 6, 2010 at 2:50 PM, Ray Cromwell <[email protected]> wrote: > > > Thanks for finding this, you just saved me a lot of trouble tracking it > > down. I will fix it shortly. > > > -Ray > > > On Fri, Aug 6, 2010 at 2:31 PM, pjulien <[email protected]> wrote: > > >> I'm not having much luck with this patch either. The problem I have > >> is with enums. > > >> If I have a record with: > > >> Property<PhoneType> phoneType = new > >> EnumProperty<PhoneType>("phoneType", PhoneType.class, > >> PhoneType.values()); > > >> This works well if the row is created on the server and sent to the > >> client. The use case is simple: > > >> final Column<PhoneHandle, String> phoneTypeColumn = new > >> Column<PhoneHandle, String>(new > >> SelectionCell(translator.allValuesAsStrings())) { > >> �...@override > >> public String getValue(final PhoneHandle object) { > >> return > >> translator.getPhoneTypeToString(object.get(object.phoneType)); > >> } > >> }; > > >> And if the row is generated on the server, again this works well, but > >> if the row was created using request factory (r8495), it just blows > >> up: > > >> In RecordJsoImpl.get(), this eventually leads to: > > >> if (property instanceof EnumProperty) { > >> EnumProperty<V> eProperty = (EnumProperty<V>) property; > >> Enum[] values = (Enum[]) eProperty.getValues(); > >> int ordinal = getInt(property.getName()); > > >> And here this blows up in hosted mode saying > > >> Caused by: com.google.gwt.dev.shell.HostedModeException: Something > >> other than > >> an int was returned from JSNI method > >> '[email protected]::getInt(Ljava/ > >> lang/String;)': > >> JS value of type undefined, expected int > > >> but if the row was created on the server, than it just returns a > >> proper integer > > >> On Aug 6, 12:48 am, [email protected] wrote: > >> > Revision: 8484 > >> > Author: [email protected] > >> > Date: Wed Aug 4 22:08:44 2010 > >> > Log: Fix support for null fields and Boolean type types in > >> RequestFactory. > >> > Null fix patch by icsy > > >> > Review athttp://gwt-code-reviews.appspot.com/739801 > > >> > Review by: [email protected]:// > >> code.google.com/p/google-web-toolkit/source/detail?r=8484 > > >> > Added: > > >> /trunk/user/src/com/google/gwt/requestfactory/client/impl/AbstractBooleanRe > >> quest.java > >> > Modified: > > >> /trunk/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerato > >> r.java > > >> /trunk/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.j > >> ava > > >> /trunk/user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java > > >> /trunk/user/test/com/google/gwt/requestfactory/server/JsonRequestProcessorT > >> est.java > >> > /trunk/user/test/com/google/gwt/valuestore/server/SimpleFoo.java > >> > /trunk/user/test/com/google/gwt/valuestore/shared/SimpleFooRecord.java > > >> /trunk/user/test/com/google/gwt/valuestore/shared/impl/SimpleFooRecordImpl. > >> java > > >> > ======================================= > >> > --- /dev/null > >> > +++ > > >> /trunk/user/src/com/google/gwt/requestfactory/client/impl/AbstractBooleanRe > >> quest.java > >> > Wed Aug 4 22:08:44 2010 > >> > @@ -0,0 +1,48 @@ > >> > +/* > >> > + * Copyright 2010 Google Inc. > >> > + * > >> > + * Licensed under the Apache License, Version 2.0 (the "License"); you > >> may > >> > not > >> > + * use this file except in compliance with the License. You may obtain > >> a > >> > copy of > >> > + * the License at > >> > + * > >> > + *http://www.apache.org/licenses/LICENSE-2.0 > >> > + * > >> > + * Unless required by applicable law or agreed to in writing, software > >> > + * distributed under the License is distributed on an "AS IS" BASIS, > >> > WITHOUT > >> > + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See > >> the > >> > + * License for the specific language governing permissions and > >> limitations > >> > under > >> > + * the License. > >> > + */ > >> > +package com.google.gwt.requestfactory.client.impl; > >> > + > >> > +import com.google.gwt.valuestore.shared.SyncResult; > >> > + > >> > +import java.util.Collections; > >> > + > >> > +/** > >> > + * <p> > >> > + * <span style="color:red">Experimental API: This class is still under > > >> > rapid > >> > + * development, and is very likely to be deleted. Use it at your own > >> risk. > >> > + * </span> > >> > + * </p> > >> > + * Abstract implementation of > >> > + * {...@link > >> com.google.gwt.requestfactory.shared.RequestFactory.RequestObject > >> > + * RequestFactory.RequestObject} for requests that return Boolean. > >> > + */ > >> > +public abstract class AbstractBooleanRequest extends > >> > + AbstractRequest<Boolean, AbstractBooleanRequest> { > >> > + > >> > + public AbstractBooleanRequest(RequestFactoryJsonImpl requestFactory) > >> { > >> > + super(requestFactory); > >> > + } > >> > + > >> > + public void handleResponseText(String responseText) { > >> > + receiver.onSuccess(Boolean.valueOf(responseText), > >> > + Collections.<SyncResult> emptySet()); > >> > + } > >> > + > >> > + �...@override > >> > + protected AbstractBooleanRequest getThis() { > >> > + return this; > >> > + } > >> > +} > >> > ======================================= > >> > --- > > >> /trunk/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerato > >> r.java > >> > Mon Aug 2 15:57:18 2010 > >> > +++ > > >> /trunk/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerato > >> r.java > >> > Wed Aug 4 22:08:44 2010 > >> > @@ -28,6 +28,7 @@ > >> > import com.google.gwt.core.ext.typeinfo.NotFoundException; > >> > import com.google.gwt.core.ext.typeinfo.TypeOracle; > >> > import com.google.gwt.event.shared.HandlerManager; > >> > +import > >> com.google.gwt.requestfactory.client.impl.AbstractBooleanRequest; > >> > import > >> com.google.gwt.requestfactory.client.impl.AbstractBigDecimalRequest; > >> > import > >> com.google.gwt.requestfactory.client.impl.AbstractBigIntegerRequest; > >> > import com.google.gwt.requestfactory.client.impl.AbstractByteRequest; > >> > @@ -445,6 +446,8 @@ > >> > requestClassName = AbstractDoubleRequest.class.getName(); > >> > } else if (isByteRequest(typeOracle, requestType)) { > >> > requestClassName = AbstractByteRequest.class.getName(); > >> > + } else if (isBooleanRequest(typeOracle, requestType)) { > >> > + requestClassName = AbstractBooleanRequest.class.getName(); > >> > } else if (isShortRequest(typeOracle, requestType)) { > >> > requestClassName = AbstractShortRequest.class.getName(); > >> > } else if (isFloatRequest(typeOracle, requestType)) { > >> > @@ -551,6 +554,10 @@ > >> > JClassType requestType) { > >> > return > > >> requestType.isParameterized().getTypeArgs()[0].isAssignableTo(typeOracle.fi > >> ndType(BigInteger.class.getName())); > >> > } > >> > + > >> > + private boolean isBooleanRequest(TypeOracle typeOracle, JClassType > >> > requestType) { > >> > + return > > >> requestType.isParameterized().getTypeArgs()[0].isAssignableTo(typeOracle.fi > >> ndType(Boolean.class.getName())); > >> > + } > > >> > private boolean isByteRequest(TypeOracle typeOracle, JClassType > >> > requestType) { > >> > return > > >> requestType.isParameterized().getTypeArgs()[0].isAssignableTo(typeOracle.fi > >> ndType(Byte.class.getName())); > >> > ======================================= > >> > --- > > >> /trunk/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.j > >> ava > >> > Mon Aug 2 10:40:29 2010 > >> > +++ > > >> /trunk/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.j > >> ava > >> > Wed Aug 4 22:08:44 2010 > >> > @@ -123,6 +123,9 @@ > >> > if (String.class == parameterType) { > >> > return parameterValue; > >> > } > >> > + if (Boolean.class == parameterType || boolean.class == > >> parameterType) { > >> > + return Boolean.valueOf(parameterValue); > >> > + } > >> > if (Integer.class == parameterType || int.class == parameterType) > >> { > >> > return new Integer(parameterValue); > >> > } > >> > @@ -191,6 +194,9 @@ > >> > return value; > >> > } > >> > Class<?> type = value.getClass(); > >> > + if (Boolean.class == type) { > >> > + return value; > >> > + } > >> > if (Date.class == type) { > >> > return String.valueOf(((Date) value).getTime()); > >> > } > >> > ======================================= > >> > --- > >> > /trunk/user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java > > >> > Fri Jul 30 17:29:09 2010 > >> > +++ > >> > /trunk/user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java > > >> > Wed Aug 4 22:08:44 2010 > >> > @@ -83,45 +83,55 @@ > >> > // assert isDefined(property.getName()) : > >> > // "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 (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 > > ... > > read more »
-- http://groups.google.com/group/Google-Web-Toolkit-Contributors
