Adds (unused by this patch, but needed in forthcoming history code)
RecordImpl#isFuture.

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

Review by: amitmanjhi@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8528 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/RecordImpl.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordImpl.java
index d823962..8f6deb3 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RecordImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordImpl.java
@@ -34,10 +34,12 @@
  */
 public class RecordImpl implements Record {
   private final RecordJsoImpl jso;
+  private final boolean isFuture;
   private DeltaValueStoreJsonImpl deltaValueStore;
 
-  protected RecordImpl(RecordJsoImpl record) {
+  protected RecordImpl(RecordJsoImpl record, boolean isFuture) {
     this.jso = record;
+    this.isFuture = isFuture;
     deltaValueStore = null;
   }
 
@@ -72,6 +74,10 @@
     return deltaValueStore.isChanged();
   }
 
+  public boolean isFuture() {
+    return isFuture;
+  }
+
   public <V> void set(Property<V> property, RecordImpl record, V value) {
     if (deltaValueStore == null) {
       throw new UnsupportedOperationException(
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/RecordSchema.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordSchema.java
index 06560ed..df4939d 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RecordSchema.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordSchema.java
@@ -51,7 +51,11 @@
     return allProperties;
   }
 
-  public abstract R create(RecordJsoImpl jso);
+  public final R create(RecordJsoImpl jso) {
+    return create(jso, false);
+  }
+  
+  public abstract R create(RecordJsoImpl jso, boolean isFuture);
 
   public abstract RecordChangedEvent<?, ?> createChangeEvent(Record record,
       WriteOperation writeOperation);
@@ -62,6 +66,6 @@
     return createChangeEvent(record, writeOperation);
   }
 
+  // TODO(rjrjr) rename getProxyClass
   public abstract Class<? extends Record> getToken();
-
 }
\ No newline at end of file
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java b/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
index 7b91595..fec42a5 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
@@ -47,6 +47,8 @@
  */
 public abstract class RequestFactoryJsonImpl implements RequestFactory {
 
+  // TODO(amitmanjhi) Dump this and the one in DeltaValueStore in favor of
+  // RecordImpl#isFuture
   static class FutureIdGenerator {
     Set<Long> idsInTransit = new HashSet<Long>();
     Long maxId = 1L;
@@ -65,9 +67,8 @@
     }
   }
 
-  private static Logger logger =
-    Logger.getLogger(RequestFactory.class.getName());
-  
+  private static Logger logger = Logger.getLogger(RequestFactory.class.getName());
+
   // A separate logger for wire activity, which does not get logged by the
   // remote log handler, so we avoid infinite loops. All log messages that
   // could happen every time a request is made from the server should be logged
@@ -88,21 +89,18 @@
 
   public com.google.gwt.valuestore.shared.Record create(
       Class<? extends Record> token, RecordToTypeMap recordToTypeMap) {
-    Long futureId = futureIdGenerator.getFutureId();
 
     RecordSchema<? extends Record> schema = recordToTypeMap.getType(token);
-    RecordJsoImpl newRecord = RecordJsoImpl.create(futureId, INITIAL_VERSION,
-        schema);
-    RecordKey recordKey = new RecordKey(newRecord);
-    creates.put(recordKey, newRecord);
-    return schema.create(newRecord);
+    if (schema == null) {
+      throw new IllegalArgumentException("Unknown proxy type: " + token);
+    }
+    return createFuture(schema);
   }
 
   public void fire(final RequestObject<?> requestObject) {
     RequestBuilder builder = new RequestBuilder(RequestBuilder.POST,
         GWT.getHostPageBaseURL() + RequestFactory.URL);
-    builder.setHeader(
-        "Content-Type", RequestFactory.JSON_CONTENT_TYPE_UTF8);
+    builder.setHeader("Content-Type", RequestFactory.JSON_CONTENT_TYPE_UTF8);
     builder.setHeader("pageurl", Location.getHref());
     builder.setRequestData(ClientRequestHelper.getRequestString(requestObject.getRequestData().getRequestMap(
         ((AbstractRequest) requestObject).deltaValueStore.toJson())));
@@ -124,8 +122,8 @@
           // During the redirection for logging in, we get a response with no
           // status code, but it's not an error, so we only log errors with
           // bad status codes here.
-          wireLogger.severe(SERVER_ERROR + " " + response.getStatusCode() + 
-              " " + response.getText());
+          wireLogger.severe(SERVER_ERROR + " " + response.getStatusCode() + " "
+              + response.getText());
         }
         postRequestEvent(State.RECEIVED, response);
       }
@@ -137,7 +135,8 @@
       builder.send();
       postRequestEvent(State.SENT, null);
     } catch (RequestException e) {
-      wireLogger.log(Level.SEVERE, SERVER_ERROR + " (" + e.getMessage() + ")", e);
+      wireLogger.log(Level.SEVERE, SERVER_ERROR + " (" + e.getMessage() + ")",
+          e);
     }
   }
 
@@ -147,8 +146,8 @@
   public void init(HandlerManager handlerManager) {
     this.valueStore = new ValueStoreJsonImpl(handlerManager);
     this.handlerManager = handlerManager;
-    Logger.getLogger("").addHandler(new RequestFactoryLogHandler(
-        this, Level.WARNING, wireLogger.getName()));
+    Logger.getLogger("").addHandler(
+        new RequestFactoryLogHandler(this, Level.WARNING, wireLogger.getName()));
     logger.fine("Successfully initialized RequestFactory");
   }
 
@@ -156,6 +155,16 @@
     return valueStore;
   }
 
+  private Record createFuture(
+      RecordSchema<? extends Record> schema) {
+    Long futureId = futureIdGenerator.getFutureId();
+    RecordJsoImpl newRecord = RecordJsoImpl.create(futureId, INITIAL_VERSION,
+        schema);
+    RecordKey recordKey = new RecordKey(newRecord);
+    creates.put(recordKey, newRecord);
+    return schema.create(newRecord);
+  }
+
   private void postRequestEvent(State received, Response response) {
     handlerManager.fireEvent(new RequestEvent(received, response));
   }
diff --git a/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java b/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
index 3d84718..b315688 100644
--- a/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
+++ b/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
@@ -197,10 +197,10 @@
           recordImplTypeName));
 
       sw.println();
-      sw.println(String.format("private %s(RecordJsoImpl jso) {",
+      sw.println(String.format("private %s(RecordJsoImpl jso, boolean isFuture) {",
           recordImplTypeName));
       sw.indent();
-      sw.println("super(jso);");
+      sw.println("super(jso, isFuture);");
       sw.outdent();
       sw.println("}");
 
@@ -716,10 +716,10 @@
 
     sw.println();
     sw.println("@Override");
-    sw.println(String.format("public %s create(RecordJsoImpl jso) {",
+    sw.println(String.format("public %s create(RecordJsoImpl jso, boolean isFuture) {",
         recordImplTypeName));
     sw.indent();
-    sw.println(String.format("return new %s(jso);", recordImplTypeName));
+    sw.println(String.format("return new %s(jso, isFuture);", recordImplTypeName));
     sw.outdent();
     sw.println("}");
 
diff --git a/user/test/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImplTest.java b/user/test/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImplTest.java
index 33ade39..9dd5fca 100644
--- a/user/test/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImplTest.java
+++ b/user/test/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImplTest.java
@@ -39,7 +39,7 @@
   private class MyRecordImpl extends RecordImpl {
 
     protected MyRecordImpl(RecordJsoImpl record) {
-      super(record);
+      super(record, false);
     }
   }
 
diff --git a/user/test/com/google/gwt/requestfactory/client/impl/RecordJsoImplTest.java b/user/test/com/google/gwt/requestfactory/client/impl/RecordJsoImplTest.java
index 7a9635b..413899c 100644
--- a/user/test/com/google/gwt/requestfactory/client/impl/RecordJsoImplTest.java
+++ b/user/test/com/google/gwt/requestfactory/client/impl/RecordJsoImplTest.java
@@ -41,7 +41,7 @@
 
   public void testEmptyCopy() {
     RecordJsoImpl emptyCopy = RecordJsoImpl.emptyCopy(new RecordImpl(
-        getPopulatedJso()));
+        getPopulatedJso(), false));
     testMinimalJso(emptyCopy, SCHEMA_PRESENT);
   }
 
diff --git a/user/test/com/google/gwt/requestfactory/client/impl/SimpleFooRecordImpl.java b/user/test/com/google/gwt/requestfactory/client/impl/SimpleFooRecordImpl.java
index 0430812..63b18d2 100644
--- a/user/test/com/google/gwt/requestfactory/client/impl/SimpleFooRecordImpl.java
+++ b/user/test/com/google/gwt/requestfactory/client/impl/SimpleFooRecordImpl.java
@@ -56,8 +56,8 @@
     }
 
     @Override
-    public SimpleFooRecordImpl create(RecordJsoImpl jso) {
-      return new SimpleFooRecordImpl(jso);
+    public SimpleFooRecordImpl create(RecordJsoImpl jso, boolean isFuture) {
+      return new SimpleFooRecordImpl(jso, isFuture);
     }
 
     @Override
@@ -74,8 +74,8 @@
 
   public static final RecordSchema<SimpleFooRecordImpl> SCHEMA = new MySchema();
 
-  private SimpleFooRecordImpl(RecordJsoImpl jso) {
-    super(jso);
+  private SimpleFooRecordImpl(RecordJsoImpl jso, boolean isFuture) {
+    super(jso, isFuture);
   }
 
   public Boolean getBoolField() {