Commitng cherry-picks
  r8599 Get rid of yellow background during cell selection
  r8603 Snip a stray logging line
  r8607 Add more tests to check that relationships are persisted correctly
  r8608 Ignoring __gwt_ObjectId in AbstractRequest#processRelated
  r8609 Snip stray debugging println.

Patch by: amitmanjhi



git-svn-id: https://google-web-toolkit.googlecode.com/svn/branches/2.1M3@8611 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/branch-info.txt b/branch-info.txt
index d3fe056..f36f674 100644
--- a/branch-info.txt
+++ b/branch-info.txt
@@ -7,3 +7,10 @@
 /branches/2.1M3/ was created (r8601) as a straight copy from /trunk/@r8598
 
 Merge:
+Cherry-picks
+  r8599 Get rid of yellow background during cell selection
+  r8603 Snip a stray logging line
+  r8607 Add more tests to check that relationships are persisted correctly
+  r8608 Ignoring __gwt_ObjectId in AbstractRequest#processRelated
+  r8609 Snip stray debugging println.
+commited as  
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 833fbb1..8cf92e8 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java
@@ -79,10 +79,10 @@
   /**
    * @deprecated use {@link #with(String...)} instead.
    * @param properties
-   * @return
    */
+  @Deprecated
   public R forProperties(Collection<Property<?>> properties) {
-    for (Property p : properties) {
+    for (Property<?> p : properties) {
       with(p.getName());
     }
     return getThis();
@@ -134,6 +134,8 @@
 
   protected native void processRelated(JavaScriptObject related) /*-{
     for(var recordKey in related) {
+      // Workaround for __gwt_ObjectId appearing in Chrome dev mode.
+      if (!related.hasOwnProperty(recordKey)) continue;
       var schemaAndId = recordKey.split(/-/, 2);
       var jso = related[recordKey];
       this.@com.google.gwt.requestfactory.client.impl.AbstractRequest::setSchemaAndRecord(Ljava/lang/String;Lcom/google/gwt/requestfactory/client/impl/RecordJsoImpl;)(schemaAndId[0], jso);
diff --git a/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java b/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
index 8597d49..564a3d1 100644
--- a/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
+++ b/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
@@ -247,7 +247,6 @@
         int ordinal = Integer.parseInt(parameterValue);
         Method valuesMethod = parameterType.getDeclaredMethod("values",
             new Class[0]);
-        log.severe("Type is " + parameterType + " valuesMethod " + valuesMethod);
 
         if (valuesMethod != null) {
           valuesMethod.setAccessible(true);
diff --git a/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java b/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
index c3d1fb2..72dc579 100644
--- a/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
+++ b/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
@@ -66,7 +66,6 @@
     ensureConfig();
     String jsonRequestString = RPCServletUtils.readContent(
         request, JSON_CONTENT_TYPE, JSON_CHARSET);
-    System.err.println(jsonRequestString);
     response.setStatus(HttpServletResponse.SC_OK);
     PrintWriter writer = response.getWriter();
 
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTree.css b/user/src/com/google/gwt/user/cellview/client/CellTree.css
index 4ea469f..ee00850 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTree.css
+++ b/user/src/com/google/gwt/user/cellview/client/CellTree.css
@@ -28,7 +28,7 @@
 */
 
 .keyboardSelectedItem {
-  background-color: #ffff00;
+/*  background-color: #ffff00; */
 }
 	
 .openItem {
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTreeClean.css b/user/src/com/google/gwt/user/cellview/client/CellTreeClean.css
index 4c84711..5c393c7 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTreeClean.css
+++ b/user/src/com/google/gwt/user/cellview/client/CellTreeClean.css
@@ -28,7 +28,7 @@
 */
 
 .keyboardSelectedItem {
-  background-color: #ffff00;
+/*  background-color: #ffff00; */
 }
 
 .openItem {
diff --git a/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java b/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java
index 651a46a..3ac6136 100644
--- a/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java
+++ b/user/test/com/google/gwt/valuestore/client/RequestFactoryTest.java
@@ -33,11 +33,182 @@
  */
 public class RequestFactoryTest extends GWTTestCase {
 
+  /*
+   * TODO: all these tests should check the final values. It will be easy when
+   * we have better persistence than the singleton pattern.
+   */
+  public void testPersistExistingEntityExistingRelation() {
+    final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
+    HandlerManager hm = new HandlerManager(null);
+    req.init(hm);
+    delayTestFinish(5000);
+
+    req.simpleBarRequest().findSimpleBarById(999L).fire(
+        new Receiver<SimpleBarRecord>() {
+          public void onSuccess(final SimpleBarRecord barRecord,
+              Set<SyncResult> syncResults) {
+            req.simpleFooRequest().findSimpleFooById(999L).fire(
+                new Receiver<SimpleFooRecord>() {
+                  public void onSuccess(SimpleFooRecord fooRecord,
+                      Set<SyncResult> syncResults) {
+                    RequestObject<Void> updReq = req.simpleFooRequest().persist(
+                        fooRecord);
+                    fooRecord = updReq.edit(fooRecord);
+                    fooRecord.setBarField(barRecord);
+                    updReq.fire(new Receiver<Void>() {
+                      public void onSuccess(Void response,
+                          Set<SyncResult> syncResults) {
+                        finishTest();
+                      }
+                    });
+                  }
+                });
+          }
+        });
+  }
+
+  /*
+   * Find Entity Create Entity2 Relate Entity2 to Entity Persist Entity
+   */
+  public void testPersistExistingEntityNewRelation() {
+    final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
+    HandlerManager hm = new HandlerManager(null);
+    req.init(hm);
+    delayTestFinish(5000);
+
+    SimpleBarRecord newBar = (SimpleBarRecord) req.create(SimpleBarRecord.class);
+
+    final RequestObject<Void> barReq = req.simpleBarRequest().persist(newBar);
+    newBar = barReq.edit(newBar);
+    newBar.setUserName("Amit");
+
+    final SimpleBarRecord finalNewBar = newBar;
+    req.simpleFooRequest().findSimpleFooById(999L).fire(
+        new Receiver<SimpleFooRecord>() {
+          public void onSuccess(SimpleFooRecord response,
+              Set<SyncResult> syncResults) {
+            RequestObject<Void> fooReq = req.simpleFooRequest().persist(
+                response);
+            response = fooReq.edit(response);
+            response.setBarField(finalNewBar);
+            fooReq.fire(new Receiver<Void>() {
+              public void onSuccess(Void response, Set<SyncResult> syncResults) {
+                req.simpleFooRequest().findSimpleFooById(999L).with(
+                    "barField.userName").fire(new Receiver<SimpleFooRecord>() {
+                  public void onSuccess(SimpleFooRecord finalFooRecord,
+                      Set<SyncResult> syncResults) {
+                    // barReq hasn't been persisted, so old value
+                    assertEquals("FOO",
+                        finalFooRecord.getBarField().getUserName());
+                    finishTest();
+                  }
+
+                });
+              }
+            });
+          }
+        });
+  }
+
+  /*
+   * Find Entity2 Create Entity, Persist Entity Relate Entity2 to Entity Persist
+   * Entity
+   */
+  public void testPersistNewEntityExistingRelation() {
+    final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
+    HandlerManager hm = new HandlerManager(null);
+    req.init(hm);
+    delayTestFinish(5000);
+    SimpleFooRecord newFoo = (SimpleFooRecord) req.create(SimpleFooRecord.class);
+
+    final RequestObject<Void> fooReq = req.simpleFooRequest().persist(newFoo);
+
+    newFoo = fooReq.edit(newFoo);
+    newFoo.setUserName("Ray");
+
+    final SimpleFooRecord finalFoo = newFoo;
+    req.simpleBarRequest().findSimpleBarById(999L).fire(
+        new Receiver<SimpleBarRecord>() {
+          public void onSuccess(SimpleBarRecord response,
+              Set<SyncResult> syncResults) {
+            finalFoo.setBarField(response);
+            fooReq.fire(new Receiver<Void>() {
+              public void onSuccess(Void response, Set<SyncResult> syncResults) {
+                req.simpleFooRequest().findSimpleFooById(999L).fire(
+                    new Receiver<SimpleFooRecord>() {
+                      public void onSuccess(SimpleFooRecord finalFooRecord,
+                          Set<SyncResult> syncResults) {
+                        // newFoo hasn't been persisted, so userName is the old value.
+                        assertEquals("GWT", finalFooRecord.getUserName());
+                        finishTest();
+                      }
+
+                    });
+              }
+            });
+          }
+        });
+  }
+
+  /*
+   * Create Entity, Persist Entity Create Entity2, Perist Entity2 relate Entity2
+   * to Entity Persist
+   */
+  public void testPersistNewEntityNewRelation() {
+    final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
+    HandlerManager hm = new HandlerManager(null);
+    req.init(hm);
+    delayTestFinish(5000);
+    SimpleFooRecord newFoo = (SimpleFooRecord) req.create(SimpleFooRecord.class);
+    SimpleBarRecord newBar = (SimpleBarRecord) req.create(SimpleBarRecord.class);
+
+    final RequestObject<SimpleFooRecord> fooReq = req.simpleFooRequest().persistAndReturnSelf(
+        newFoo);
+
+    newFoo = fooReq.edit(newFoo);
+    newFoo.setUserName("Ray");
+
+    final RequestObject<SimpleBarRecord> barReq = req.simpleBarRequest().persistAndReturnSelf(
+        newBar);
+    newBar = barReq.edit(newBar);
+    newBar.setUserName("Amit");
+
+    fooReq.fire(new Receiver<SimpleFooRecord>() {
+      public void onSuccess(final SimpleFooRecord persistedFoo,
+          Set<SyncResult> syncResult) {
+        barReq.fire(new Receiver<SimpleBarRecord>() {
+          public void onSuccess(final SimpleBarRecord persistedBar,
+              Set<SyncResult> syncResults) {
+            assertEquals("Ray", persistedFoo.getUserName());
+            final RequestObject<Void> fooReq2 = req.simpleFooRequest().persist(
+                persistedFoo);
+            SimpleFooRecord editablePersistedFoo = fooReq2.edit(persistedFoo);
+            editablePersistedFoo.setBarField(persistedBar);
+            fooReq2.fire(new Receiver<Void>() {
+              public void onSuccess(Void response, Set<SyncResult> syncResults) {
+                req.simpleFooRequest().findSimpleFooById(999L).with(
+                    "barField.userName").fire(new Receiver<SimpleFooRecord>() {
+                  public void onSuccess(SimpleFooRecord finalFooRecord,
+                      Set<SyncResult> syncResults) {
+                    assertEquals("Amit",
+                        finalFooRecord.getBarField().getUserName());
+                    finishTest();
+                  }
+
+                });
+              }
+            });
+          }
+        });
+      }
+    });
+  }
+
   public void testPersistRelation() {
     final SimpleRequestFactory req = GWT.create(SimpleRequestFactory.class);
     HandlerManager hm = new HandlerManager(null);
     req.init(hm);
-    delayTestFinish(500000);
+    delayTestFinish(5000);
 
     SimpleFooRecord rayFoo = req.create(SimpleFooRecord.class);
     final RequestObject<SimpleFooRecord> persistRay = req.simpleFooRequest().persistAndReturnSelf(
diff --git a/user/test/com/google/gwt/valuestore/shared/SimpleBarRequest.java b/user/test/com/google/gwt/valuestore/shared/SimpleBarRequest.java
index 1b2bccd..4839ce8 100644
--- a/user/test/com/google/gwt/valuestore/shared/SimpleBarRequest.java
+++ b/user/test/com/google/gwt/valuestore/shared/SimpleBarRequest.java
@@ -16,6 +16,7 @@
 package com.google.gwt.valuestore.shared;
 
 import com.google.gwt.requestfactory.shared.Instance;
+import com.google.gwt.requestfactory.shared.RecordListRequest;
 import com.google.gwt.requestfactory.shared.RecordRequest;
 import com.google.gwt.requestfactory.shared.RequestObject;
 import com.google.gwt.requestfactory.shared.Service;
@@ -26,9 +27,15 @@
 @Service(com.google.gwt.valuestore.server.SimpleBar.class)
 public interface SimpleBarRequest {
 
+  RequestObject<Long> countSimpleBar();
+
+  RecordListRequest<SimpleBarRecord> findAll();
+
+  RecordRequest<SimpleBarRecord> findSimpleBarById(Long id);
+
   @Instance
   RequestObject<Void> persist(SimpleBarRecord record);
-  
+
   @Instance
   RecordRequest<SimpleBarRecord> persistAndReturnSelf(SimpleBarRecord record);
 }