Irrespective of the return type, all RF methods now go through the valueStore.
Added a bunch of missing @Override annotations, removed an unused method in
DeltaValueStoreJsonImpl, Confirmed that instance methods work, have side
effects, and the sync results returned are meaningful.
Patch by: amitmanjhi
Review by: cromwellian, rjrjr (TBR)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8580 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractBigDecimalRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractBigDecimalRequest.java
index 1f82e1a..699e655 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractBigDecimalRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractBigDecimalRequest.java
@@ -15,11 +15,10 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
import java.math.BigDecimal;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -38,10 +37,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(new BigDecimal(responseText),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(new BigDecimal(responseText), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractBigIntegerRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractBigIntegerRequest.java
index 8bfd778..7a20d17 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractBigIntegerRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractBigIntegerRequest.java
@@ -15,12 +15,11 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
import java.math.BigDecimal;
import java.math.BigInteger;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -39,10 +38,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(new BigDecimal(responseText).toBigInteger(),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(new BigDecimal(responseText).toBigInteger(), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractBooleanRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractBooleanRequest.java
index 29c39dc..2ad281e 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractBooleanRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractBooleanRequest.java
@@ -15,10 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -37,10 +36,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(Boolean.valueOf(responseText),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(Boolean.valueOf(responseText), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractByteRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractByteRequest.java
index e1b0f46..b2092c6 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractByteRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractByteRequest.java
@@ -15,10 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -37,10 +36,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(Integer.valueOf(responseText).byteValue(),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(Integer.valueOf(responseText).byteValue(), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractCharacterRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractCharacterRequest.java
index 4ed98fe..89abf70 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractCharacterRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractCharacterRequest.java
@@ -15,10 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -37,10 +36,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(responseText.charAt(0),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(responseText.charAt(0), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractDateRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractDateRequest.java
index d87264c..d37f07c 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractDateRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractDateRequest.java
@@ -15,11 +15,10 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
import java.util.Date;
+import java.util.Set;
/**
* <p>
@@ -38,10 +37,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(new Date(Long.valueOf(responseText)),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(new Date(Long.valueOf(responseText)), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractDoubleRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractDoubleRequest.java
index 52deeef..7732d0c 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractDoubleRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractDoubleRequest.java
@@ -15,10 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -37,10 +36,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(Double.valueOf(responseText),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(Double.valueOf(responseText), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractEnumRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractEnumRequest.java
index f25c997..443b483 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractEnumRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractEnumRequest.java
@@ -15,10 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -42,13 +41,13 @@
this.enumValues = enumValues;
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
+ Set<SyncResult> syncResults) {
int ordinal = Integer.valueOf(responseText);
for (E e : enumValues) {
if (ordinal == e.ordinal()) {
- receiver.onSuccess(ordinal,
- Collections.<SyncResult> emptySet());
+ receiver.onSuccess(ordinal, syncResults);
}
}
throw new IllegalArgumentException("Invalid enum ordinal value " + ordinal);
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractFloatRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractFloatRequest.java
index a082a035..c0f061f 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractFloatRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractFloatRequest.java
@@ -15,10 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -37,10 +36,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(Float.valueOf(responseText),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(Float.valueOf(responseText), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractIntegerRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractIntegerRequest.java
index fa091c4..de68a2d 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractIntegerRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractIntegerRequest.java
@@ -15,10 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -37,10 +36,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(Integer.valueOf(responseText),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(Integer.valueOf(responseText), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonListRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonListRequest.java
index 3880847..995a07f 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonListRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonListRequest.java
@@ -15,15 +15,14 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.requestfactory.shared.RecordListRequest;
import com.google.gwt.valuestore.shared.Record;
import com.google.gwt.valuestore.shared.SyncResult;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
+import java.util.Set;
/**
* <p>
@@ -50,7 +49,8 @@
this.schema = schema;
}
- public void handleResult(Object jsoResult, JavaScriptObject sideEffects) {
+ @Override
+ public void handleResult(Object jsoResult, Set<SyncResult> syncResults) {
JsArray<RecordJsoImpl> valueJsos = (JsArray<RecordJsoImpl>) jsoResult;
List<T> valueList = new ArrayList<T>(valueJsos.length());
@@ -62,6 +62,6 @@
requestFactory.getValueStore().setRecords(valueJsos, requestFactory);
- receiver.onSuccess(valueList, Collections.<SyncResult> emptySet());
+ receiver.onSuccess(valueList, syncResults);
}
}
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonObjectRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonObjectRequest.java
index 7f9cc2b..e4d8cdf 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonObjectRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonObjectRequest.java
@@ -15,12 +15,11 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.requestfactory.shared.RecordRequest;
import com.google.gwt.valuestore.shared.Record;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p> <span style="color:red">Experimental API: This class is still under rapid
@@ -44,14 +43,15 @@
this.schema = schema;
}
- public void handleResult(Object jsoResult, JavaScriptObject sideEffects) {
+ @Override
+ public void handleResult(Object jsoResult, Set<SyncResult> syncResults) {
RecordJsoImpl jso = (RecordJsoImpl) jsoResult;
jso.setSchema(schema);
requestFactory.getValueStore().setRecord(jso, requestFactory);
- receiver.onSuccess(schema.create(jso), Collections.<SyncResult>emptySet());
+ receiver.onSuccess(schema.create(jso), syncResults);
}
}
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractLongRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractLongRequest.java
index d72fee2..0314a28 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractLongRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractLongRequest.java
@@ -15,10 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -37,10 +36,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(Long.valueOf(responseText),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(Long.valueOf(responseText), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractPrimitiveRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractPrimitiveRequest.java
index 0e797ca..83569e1 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractPrimitiveRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractPrimitiveRequest.java
@@ -15,7 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.valuestore.shared.SyncResult;
+
+import java.util.Set;
/**
* <p>
@@ -36,10 +38,11 @@
super(requestFactory);
}
- public void handleResult(Object result, JavaScriptObject sideEffects) {
- handlePrimitiveResult(asString(result), sideEffects);
+ @Override
+ public void handleResult(Object result, Set<SyncResult> syncResults) {
+ handlePrimitiveResult(asString(result), syncResults);
}
protected abstract void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects);
+ Set<SyncResult> syncResults);
}
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java
index 651b8c9..833fbb1 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java
@@ -20,6 +20,7 @@
import com.google.gwt.requestfactory.shared.RequestObject;
import com.google.gwt.valuestore.shared.Property;
import com.google.gwt.valuestore.shared.Record;
+import com.google.gwt.valuestore.shared.SyncResult;
import java.util.Collection;
import java.util.Collections;
@@ -95,9 +96,10 @@
}
public void handleResponseText(String responseText) {
- RecordJsoImpl.JsonResults results = RecordJsoImpl.fromResults(responseText);
+ RecordJsoImpl.JsonResults results = RecordJsoImpl.fromResults(responseText);
processRelated(results.getRelated());
- handleResult(results.getResult(), results.getSideEffects());
+ handleResult(results.getResult(),
+ deltaValueStore.commit(results.getSideEffects()));
}
public boolean isChanged() {
@@ -128,7 +130,7 @@
protected abstract R getThis();
protected abstract void handleResult(Object result,
- JavaScriptObject sideEffects);
+ Set<SyncResult> syncResults);
protected native void processRelated(JavaScriptObject related) /*-{
for(var recordKey in related) {
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractShortRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractShortRequest.java
index 9450caf..4c8ab1d 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractShortRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractShortRequest.java
@@ -15,10 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -37,10 +36,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(Short.valueOf(responseText),
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(Short.valueOf(responseText), syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractStringRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractStringRequest.java
index c15cd1c..4718f78 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractStringRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractStringRequest.java
@@ -15,10 +15,9 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
-import java.util.Collections;
+import java.util.Set;
/**
* <p>
@@ -37,10 +36,10 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- receiver.onSuccess(responseText,
- Collections.<SyncResult> emptySet());
+ Set<SyncResult> syncResults) {
+ receiver.onSuccess(responseText, syncResults);
}
@Override
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractVoidRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractVoidRequest.java
index 2ac72e9..40a2886 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractVoidRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractVoidRequest.java
@@ -15,7 +15,6 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.valuestore.shared.SyncResult;
import java.util.Set;
@@ -37,9 +36,9 @@
super(requestFactory);
}
+ @Override
public void handlePrimitiveResult(String responseText,
- JavaScriptObject sideEffects) {
- Set<SyncResult> syncResults = deltaValueStore.commit(sideEffects);
+ Set<SyncResult> syncResults) {
receiver.onSuccess(null, syncResults);
}
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImpl.java b/user/src/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImpl.java
index 68aca5b..8aec549 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImpl.java
@@ -55,12 +55,6 @@
}
}-*/;
- private static native JavaScriptObject getJsoResponse(String response) /*-{
- // TODO: clean and optimize this.
- eval("xyz=" + response);
- return xyz["sideEffects"];
- }-*/;
-
protected ReturnRecord() {
}
diff --git a/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java b/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
index a530606..f1940fe 100644
--- a/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
+++ b/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
@@ -697,16 +697,17 @@
JSONObject envelop = new JSONObject();
if (result instanceof List<?>) {
envelop.put(RequestData.RESULT_TOKEN, toJsonArray(operation, result));
- envelop.put("sideEffects", sideEffects);
+ envelop.put(RequestData.SIDE_EFFECTS_TOKEN, sideEffects);
return envelop;
} else if (result instanceof Number || result instanceof Enum
|| result instanceof String || result instanceof Date
|| result instanceof Character || result instanceof Boolean) {
envelop.put(RequestData.RESULT_TOKEN, result);
+ envelop.put(RequestData.SIDE_EFFECTS_TOKEN, sideEffects);
} else {
JSONObject jsonObject = toJsonObject(operation, result);
envelop.put(RequestData.RESULT_TOKEN, jsonObject);
- envelop.put("sideEffects", sideEffects);
+ envelop.put(RequestData.SIDE_EFFECTS_TOKEN, sideEffects);
return envelop;
}
envelop.put(RequestData.RELATED_TOKEN, encodeRelatedObjectsToJson());
diff --git a/user/src/com/google/gwt/requestfactory/shared/RequestData.java b/user/src/com/google/gwt/requestfactory/shared/RequestData.java
index b8995cc..15d7421 100644
--- a/user/src/com/google/gwt/requestfactory/shared/RequestData.java
+++ b/user/src/com/google/gwt/requestfactory/shared/RequestData.java
@@ -42,6 +42,8 @@
public static final String RELATED_TOKEN = "related";
+ public static final String SIDE_EFFECTS_TOKEN = "sideEffects";
+
// TODO: non-final is a hack for now.
private String operation;
private final Object[] parameters;
diff --git a/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java b/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java
index 1fa3c73..b82f85a 100644
--- a/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java
+++ b/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java
@@ -20,6 +20,7 @@
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.requestfactory.shared.Receiver;
import com.google.gwt.requestfactory.shared.RequestObject;
+import com.google.gwt.valuestore.shared.Record;
import com.google.gwt.valuestore.shared.SimpleBarRecord;
import com.google.gwt.valuestore.shared.SimpleFooRecord;
import com.google.gwt.valuestore.shared.SimpleRequestFactory;
@@ -142,4 +143,48 @@
}
});
}
+
+ /*
+ * tests that (a) any method can have a side effect that is handled correctly. (b)
+ * instance methods are handled correctly.
+ */
+ public void testMethodWithSideEffects() {
+ final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
+ HandlerManager hm = new HandlerManager(null);
+ req.init(hm);
+ delayTestFinish(5000);
+
+ req.simpleFooRequest().findSimpleFooById(999L).fire(
+ new Receiver<SimpleFooRecord>() {
+
+ public void onSuccess(SimpleFooRecord newFoo,
+ Set<SyncResult> syncResults) {
+ final RequestObject<Long> fooReq = req.simpleFooRequest().countSimpleFooWithUserNameSideEffect(
+ newFoo);
+ newFoo = fooReq.edit(newFoo);
+ newFoo.setUserName("Ray");
+ fooReq.fire(new Receiver<Long>() {
+ public void onSuccess(Long response, Set<SyncResult> syncResults) {
+ assertEquals(new Long(1L), response);
+ // confirm that there was a sideEffect.
+ assertEquals(1, syncResults.size());
+ SyncResult syncResultArray[] = syncResults.toArray(new SyncResult[0]);
+ assertFalse(syncResultArray[0].hasViolations());
+ assertNull(syncResultArray[0].getFutureId());
+ Record record = syncResultArray[0].getRecord();
+ assertEquals(new Long(999L), record.getId());
+ // confirm that the instance method did have the desired sideEffect.
+ req.simpleFooRequest().findSimpleFooById(999L).fire(
+ new Receiver<SimpleFooRecord>() {
+ public void onSuccess(SimpleFooRecord finalFoo,
+ Set<SyncResult> syncResults) {
+ assertEquals("Ray", finalFoo.getUserName());
+ finishTest();
+ }
+ });
+ }
+ });
+ }
+ });
+ }
}
diff --git a/user/test/com/google/gwt/valuestore/server/SimpleFoo.java b/user/test/com/google/gwt/valuestore/server/SimpleFoo.java
index d7c6639..52d84ac 100644
--- a/user/test/com/google/gwt/valuestore/server/SimpleFoo.java
+++ b/user/test/com/google/gwt/valuestore/server/SimpleFoo.java
@@ -52,6 +52,11 @@
return singleton;
}
+ public Long countSimpleFooWithUserNameSideEffect() {
+ singleton.setUserName(userName);
+ return 1L;
+ }
+
public String hello(SimpleBar bar) {
return "Greetings " + bar.getUserName() + " from " + getUserName();
}
diff --git a/user/test/com/google/gwt/valuestore/shared/SimpleFooRequest.java b/user/test/com/google/gwt/valuestore/shared/SimpleFooRequest.java
index 76ed88f..4ccb524 100644
--- a/user/test/com/google/gwt/valuestore/shared/SimpleFooRequest.java
+++ b/user/test/com/google/gwt/valuestore/shared/SimpleFooRequest.java
@@ -28,6 +28,9 @@
public interface SimpleFooRequest {
RequestObject<Long> countSimpleFoo();
+ @Instance
+ RequestObject<Long> countSimpleFooWithUserNameSideEffect(SimpleFooRecord record);
+
RecordListRequest<SimpleFooRecord> findAll();
RecordRequest<SimpleFooRecord> findSimpleFooById(Long id);