We were broken by both -XdisableClassMetaData and plain old web
mode. Fixed.
Review at http://gwt-code-reviews.appspot.com/787801
Review by: cromwellian@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8589 8db76d5a-ed1c-0410-87a9-c151d255dfc7
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 24d9529..1b9961d 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImpl.java
@@ -371,7 +371,7 @@
requestData.append(",");
}
requestData.append("{\""
- + entry.getValue().getSchema().getToken().getName() + "\":");
+ + entry.getValue().getSchema().getToken() + "\":");
if (writeOperation != WriteOperation.DELETE) {
requestData.append(impl.toJson());
} else {
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 33bb57d..ae7e1b0 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RecordImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordImpl.java
@@ -65,7 +65,7 @@
public String getUniqueId() {
return jso.getId() + "-" + (isFuture ? "IS" : "NO") + "-"
- + getSchema().getToken().getName();
+ + getSchema().getToken();
}
public Integer getVersion() {
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/RecordJsoImpl.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordJsoImpl.java
index 38c2a9f..4209d0a 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RecordJsoImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordJsoImpl.java
@@ -314,9 +314,6 @@
}
if (value instanceof RecordImpl) {
- RequestFactoryJsonImpl requestFactory = getRequestFactory();
- RecordSchema<?> schema = ((RecordImpl)value).getSchema();
- Class<?> token = schema.getToken();
setString(property.getName(), ((RecordImpl) value).getUniqueId());
return;
}
@@ -358,9 +355,15 @@
var key = this.__key;
delete this.__key;
+ var rf = this.__rf;
+ delete this.__rf;
+ var vs = this.__vs;
+ delete this.__vs;
// TODO verify that the stringify() from json2.js works on IE
var rtn = $wnd.JSON.stringify(this);
this.__key = key;
+ this.__rf = rf;
+ this.__vs = vs;
return rtn;
}-*/;
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 fd2b05e..06449c5 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RecordSchema.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordSchema.java
@@ -39,14 +39,21 @@
* @param <R> the type of the Records this schema describes
*/
public abstract class RecordSchema<R extends Record> {
+
+ private final String token;
+
private final Set<Property<?>> allProperties;
+
{
Set<Property<?>> set = new HashSet<Property<?>>();
set.add(Record.id);
set.add(Record.version);
allProperties = Collections.unmodifiableSet(set);
}
-
+
+ public RecordSchema(String token) {
+ this.token = token;
+ }
public Set<Property<?>> allProperties() {
return allProperties;
}
@@ -60,6 +67,9 @@
public abstract RecordChangedEvent<?, ?> createChangeEvent(Record record,
WriteOperation writeOperation);
- // TODO(rjrjr) rename getProxyClass
- public abstract Class<? extends Record> getToken();
+ public abstract Class<? extends Record> getProxyClass();
+
+ public String getToken() {
+ return token;
+ }
}
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/RecordToTypeMap.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordToTypeMap.java
index c002ba4..232be49 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RecordToTypeMap.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordToTypeMap.java
@@ -27,6 +27,7 @@
* Record class to its internal "type" representation.
*/
public interface RecordToTypeMap {
+ String getClassToken(Class<?> recordClass);
<R extends Record> RecordSchema<R> getType(Class<R> recordClass);
RecordSchema<? extends Record> getType(String token);
}
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 01388b0..5b4af09 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
@@ -123,21 +123,11 @@
}
public Class<? extends Record> getClass(Record proxy) {
- return ((RecordImpl) proxy).getSchema().getToken();
+ return ((RecordImpl) proxy).getSchema().getProxyClass();
}
public abstract RecordSchema<?> getSchema(String token);
- public String getToken(Record record) {
- String rtn = ((RecordImpl) record).getSchema().getToken().getName() + "-";
- if (((RecordImpl) record).isFuture()) {
- rtn += "0-FUTURE";
- } else {
- rtn += record.getId();
- }
- return rtn;
- }
-
/**
* @param eventBus
*/
@@ -156,7 +146,7 @@
if (schema == null) {
return null;
}
- return schema.getToken();
+ return schema.getProxyClass();
}
protected Record getProxy(String token, RecordToTypeMap recordToTypeMap) {
@@ -184,9 +174,15 @@
return schema.create(RecordJsoImpl.create(id, -1, schema));
}
- protected String getToken(Class<? extends Record> clazz,
- RecordToTypeMap recordToTypeMap) {
- return recordToTypeMap.getType(clazz).getToken().getName();
+ protected String getToken(Record record, RecordToTypeMap recordToTypeMap) {
+ Class<? extends Record> proxyClass = ((RecordImpl) record).getSchema().getProxyClass();
+ String rtn = recordToTypeMap.getClassToken(proxyClass) + "-";
+ if (((RecordImpl) record).isFuture()) {
+ rtn += "0-FUTURE";
+ } else {
+ rtn += record.getId();
+ }
+ return rtn;
}
ValueStoreJsonImpl getValueStore() {
diff --git a/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java b/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
index d2633da..da852e9 100644
--- a/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
+++ b/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
@@ -364,10 +364,18 @@
sw.println("}");
sw.println();
+ // write getToken(Record)
+ sw.println("public String getToken(Record record) {");
+ sw.indent();
+ sw.println("return getToken(record, new " + recordToTypeMapName + "());");
+ sw.outdent();
+ sw.println("}");
+ sw.println();
+
// write getToken(Class)
sw.println("public String getToken(Class clazz) {");
sw.indent();
- sw.println("return getToken(clazz, new " + recordToTypeMapName + "());");
+ sw.println("return new " + recordToTypeMapName + "().getClassToken(clazz);");
sw.outdent();
sw.println("}");
sw.println();
@@ -438,21 +446,19 @@
SourceWriter sw = f.createSourceWriter(generatorContext, out);
sw.println();
- sw.println("public RecordSchema<? extends Record> getType(Class token) {");
+ sw.println("public <R extends Record> RecordSchema<R> getType(Class<R> recordClass) {");
sw.indent();
for (JClassType publicRecordType : generatedRecordTypes) {
String qualifiedSourceName = publicRecordType.getQualifiedSourceName();
- sw.println("if (token == " + qualifiedSourceName + ".class) {");
+ sw.println("if (recordClass == " + qualifiedSourceName + ".class) {");
sw.indent();
- sw.println("return " + qualifiedSourceName + "Impl.SCHEMA;");
+ sw.println("return (RecordSchema<R>) " + qualifiedSourceName + "Impl.SCHEMA;");
sw.outdent();
sw.println("}");
}
-
sw.println(
- "throw new IllegalArgumentException(\"Unknown token \" + token + ");
+ "throw new IllegalArgumentException(\"Unknown recordClass \" + recordClass);");
sw.indent();
- sw.println("\", does not match any of the TOKEN variables of a Record\");");
sw.outdent();
sw.outdent();
sw.println("}");
@@ -468,11 +474,28 @@
sw.outdent();
sw.println("}");
}
-
sw.println("throw new IllegalArgumentException(\"Unknown string token: \" + token);");
sw.outdent();
sw.println("}");
+ sw.println("public String getClassToken(Class<?> recordClass) {");
+ sw.indent();
+ for (JClassType publicRecordType : generatedRecordTypes) {
+ String qualifiedSourceName = publicRecordType.getQualifiedSourceName();
+ sw.println("if (recordClass == " + qualifiedSourceName + ".class) {");
+ sw.indent();
+ sw.println("return \"" + qualifiedSourceName + "\";");
+ sw.outdent();
+ sw.println("}");
+ }
+ sw.println(
+ "throw new IllegalArgumentException(\"Unknown recordClass \" + recordClass);");
+ sw.indent();
+ sw.outdent();
+ sw.outdent();
+ sw.println("}");
+
+
sw.outdent();
sw.println("}");
sw.println();
@@ -820,6 +843,13 @@
sw.println("}");
sw.println();
+ sw.println("public MySchema() {");
+ sw.indent();
+ sw.println("super(\"" + publicRecordType.getQualifiedSourceName() + "\");");
+ sw.outdent();
+ sw.println("}");
+
+ sw.println();
sw.println("@Override");
sw.println(String.format("public %s create(RecordJsoImpl jso, boolean isFuture) {",
recordImplTypeName));
@@ -840,7 +870,7 @@
sw.println("}");
sw.println();
- sw.println("public Class getToken() {");
+ sw.println("public Class getProxyClass() {");
sw.indent();
sw.println("return " + publicRecordType.getQualifiedSourceName() + ".class;"
+ " // special field");
diff --git a/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java b/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
index ffc4dd8..5609aba 100644
--- a/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
+++ b/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
@@ -365,11 +365,6 @@
return encodePropertyValue(returnValue);
}
- @SuppressWarnings("unchecked")
- private Class<? extends Record> castToRecordClass(Class<?> propertyType) {
- return (Class<? extends Record>) propertyType;
- }
-
/**
* Generate an ID for a new record. The default behavior is to return null and
* let the data store generate the ID automatically.
@@ -432,7 +427,7 @@
* configured.
*/
log.info(String.format(
- "Ingnoring exception caught initializing bean validation framework. "
+ "Ignoring exception caught initializing bean validation framework. "
+ "It is probably unconfigured or misconfigured. [%s] %s ",
e.getClass().getName(), e.getLocalizedMessage()));
}
@@ -782,6 +777,11 @@
propertyContext));
}
+ @SuppressWarnings("unchecked")
+ private Class<? extends Record> castToRecordClass(Class<?> propertyType) {
+ return (Class<? extends Record>) propertyType;
+ }
+
/**
* @throws JSONException
*
diff --git a/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java b/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
index 72dc579..c3d1fb2 100644
--- a/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
+++ b/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
@@ -66,6 +66,7 @@
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/test/com/google/gwt/requestfactory/RequestFactorySuiteDisabled.java b/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
similarity index 96%
rename from user/test/com/google/gwt/requestfactory/RequestFactorySuiteDisabled.java
rename to user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
index 1faf64a..f84d0a1 100644
--- a/user/test/com/google/gwt/requestfactory/RequestFactorySuiteDisabled.java
+++ b/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
@@ -25,7 +25,7 @@
* Tests of RequestFactory that require GWT.
* @see com.google.gwt.valuestore.ValueStoreSuite
*/
-public class RequestFactorySuiteDisabled {
+public class RequestFactorySuite {
public static Test suite() {
GWTTestSuite suite = new GWTTestSuite(
"Test suite for requestfactory gwt code.");
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 af40b95..0921b4d 100644
--- a/user/test/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImplTest.java
+++ b/user/test/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImplTest.java
@@ -54,11 +54,18 @@
public RecordSchema<? extends Record> getType(
String recordClass) {
- if (recordClass.equals(SimpleFooRecord.class.getName())) {
+ if (recordClass.equals("simple-foo-class-token")) {
return SimpleFooRecordImpl.SCHEMA;
}
throw new IllegalArgumentException("Unknown token " + recordClass);
}
+
+ public String getClassToken(Class<?> recordClass) {
+ if (recordClass.equals(SimpleFooRecord.class)) {
+ return "simple-foo-class-token";
+ }
+ throw new IllegalArgumentException("Unknown token " + recordClass);
+ }
};
ValueStoreJsonImpl valueStore = null;
RequestFactoryJsonImpl requestFactory = null;
@@ -104,6 +111,10 @@
public String getToken(Class<? extends Record> clazz) {
throw new UnsupportedOperationException("Auto-generated method stub");
}
+
+ public String getToken(Record proxy) {
+ throw new UnsupportedOperationException("Auto-generated method stub");
+ }
};
// add a record
diff --git a/user/test/com/google/gwt/requestfactory/client/impl/SimpleBazRecordImpl.java b/user/test/com/google/gwt/requestfactory/client/impl/SimpleBazRecordImpl.java
index 876478f..eec9afa 100644
--- a/user/test/com/google/gwt/requestfactory/client/impl/SimpleBazRecordImpl.java
+++ b/user/test/com/google/gwt/requestfactory/client/impl/SimpleBazRecordImpl.java
@@ -33,12 +33,17 @@
* The Schema class.
*/
public static class MySchema extends RecordSchema<SimpleBazRecordImpl> {
+
private final Set<Property<?>> allProperties;
{
Set<Property<?>> set = new HashSet<Property<?>>();
set.addAll(super.allProperties());
allProperties = Collections.unmodifiableSet(set);
}
+
+ public MySchema() {
+ super(SimpleBazRecordImpl.class.getName());
+ }
@Override
public Set<Property<?>> allProperties() {
@@ -58,7 +63,7 @@
}
@Override
- public Class<? extends Record> getToken() {
+ public Class<? extends Record> getProxyClass() {
// ignore
return null;
}
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 787350c..301bb8d 100644
--- a/user/test/com/google/gwt/requestfactory/client/impl/SimpleFooRecordImpl.java
+++ b/user/test/com/google/gwt/requestfactory/client/impl/SimpleFooRecordImpl.java
@@ -39,7 +39,9 @@
* The Schema class.
*/
public static class MySchema extends RecordSchema<SimpleFooRecordImpl> {
+
private final Set<Property<?>> allProperties;
+
{
Set<Property<?>> set = new HashSet<Property<?>>();
set.addAll(super.allProperties());
@@ -52,6 +54,9 @@
set.add(enumField);
allProperties = Collections.unmodifiableSet(set);
}
+ public MySchema() {
+ super(SimpleFooRecord.class.getName());
+ }
@Override
public Set<Property<?>> allProperties() {
@@ -71,7 +76,7 @@
}
@Override
- public Class<? extends Record> getToken() {
+ public Class<? extends Record> getProxyClass() {
return SimpleFooRecord.class; // special field
}
}
diff --git a/user/test/com/google/gwt/valuestore/ValueStoreSuiteDisabled.java b/user/test/com/google/gwt/valuestore/ValueStoreSuite.java
similarity index 90%
rename from user/test/com/google/gwt/valuestore/ValueStoreSuiteDisabled.java
rename to user/test/com/google/gwt/valuestore/ValueStoreSuite.java
index 53992fb..e6a5a93 100644
--- a/user/test/com/google/gwt/valuestore/ValueStoreSuiteDisabled.java
+++ b/user/test/com/google/gwt/valuestore/ValueStoreSuite.java
@@ -22,9 +22,9 @@
/**
* Tests of the valuestore package that require GWT.
- * @see com.google.gwt.requestfactory.RequestFactorySuiteDisabled
+ * @see com.google.gwt.requestfactory.RequestFactorySuite
*/
-public class ValueStoreSuiteDisabled {
+public class ValueStoreSuite {
public static Test suite() {
GWTTestSuite suite = new GWTTestSuite(
"Test suite for all valuestore code.");