Enables setter methods to be directly called on Record/proxy objects, instead of
going through a DeltaValueStore.
Also removes the now unnecessary DeltaValueStore from the public api and deletes the class.
Patch by: amitmanjhi
Review by: rjrjr, cromwellian, robertvawter
Review at http://gwt-code-reviews.appspot.com/752802
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8516 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.java
index a802ca5..ee89c32 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.java
@@ -39,7 +39,6 @@
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.NumberFormat;
-import com.google.gwt.requestfactory.shared.DeltaValueStore;
import com.google.gwt.requestfactory.shared.Receiver;
import com.google.gwt.requestfactory.shared.RequestObject;
import com.google.gwt.resources.client.ImageResource;
@@ -952,8 +951,8 @@
// Submit the delta.
RequestObject<Void> editRequest = expensesRequestFactory.reportRequest().persist(report);
- DeltaValueStore deltas = editRequest.getDeltaValueStore();
- deltas.set(ReportRecord.notes, report, pendingNotes);
+ ReportRecord editableReport = editRequest.edit(report);
+ editableReport.setNotes(pendingNotes);
editRequest.fire(new Receiver<Void>() {
public void onSuccess(Void ignore, Set<SyncResult> response) {
// We expect onReportChanged to be called if there are no errors.
@@ -1035,10 +1034,10 @@
}
// Create a delta and sync with the value store.
- RequestObject<Void> editRequest = expensesRequestFactory.expenseRequest().persist();
- DeltaValueStore deltas = editRequest.getDeltaValueStore();
- deltas.set(ExpenseRecord.approval, record, approval);
- deltas.set(ExpenseRecord.reasonDenied, record, reasonDenied);
+ RequestObject<Void> editRequest = expensesRequestFactory.expenseRequest().persist(record);
+ ExpenseRecord editableRecord = editRequest.edit(record);
+ editableRecord.setApproval(approval);
+ editableRecord.setReasonDenied(reasonDenied);
editRequest.fire(new Receiver<Void>() {
public void onSuccess(Void ignore, Set<SyncResult> response) {
String errorMessage = getErrorMessageFromSync(response);
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseEntry.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseEntry.java
index 0fada69..4c6f3b5 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseEntry.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseEntry.java
@@ -17,7 +17,6 @@
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
-import com.google.gwt.requestfactory.shared.DeltaValueStore;
import com.google.gwt.requestfactory.shared.Receiver;
import com.google.gwt.requestfactory.shared.RequestObject;
import com.google.gwt.sample.expenses.gwt.request.ExpenseRecord;
@@ -75,9 +74,9 @@
public void create(Long reportId) {
expense = (ExpenseRecord) requestFactory.create(ExpenseRecord.class);
- requestObject = requestFactory.expenseRequest().persist();
- DeltaValueStore deltas = requestObject.getDeltaValueStore();
- deltas.set(ExpenseRecord.reportId, expense, reportId);
+ requestObject = requestFactory.expenseRequest().persist(expense);
+ ExpenseRecord editableExpense = requestObject.edit(expense);
+ editableExpense.setReportId(reportId);
displayExpense();
}
@@ -102,14 +101,14 @@
@SuppressWarnings("deprecation")
public void onCustom() {
- DeltaValueStore deltas = requestObject.getDeltaValueStore();
- deltas.set(ExpenseRecord.description, expense, nameText.getText());
- deltas.set(ExpenseRecord.category, expense, categoryText.getText());
+ ExpenseRecord editableExpense = requestObject.edit(expense);
+ editableExpense.setDescription(nameText.getText());
+ editableExpense.setCategory(categoryText.getText());
// TODO(jgw): validate amount (in dollars -- database is in pennies)
String amountText = priceText.getText();
double amount = Double.parseDouble(amountText);
- deltas.set(ExpenseRecord.amount, expense, amount);
+ editableExpense.setAmount(amount);
// TODO(jgw): Use non-deprecated date methods for this.
Date date = new Date(
@@ -117,7 +116,7 @@
dateMonth.getSelectedIndex(),
dateDay.getSelectedIndex() + 1
);
- deltas.set(ExpenseRecord.created, expense, date);
+ editableExpense.setCreated(date);
// TODO: wait throbber
requestObject.fire(new Receiver<Void>() {
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileReportEntry.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileReportEntry.java
index b5b933a..a08461d 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileReportEntry.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileReportEntry.java
@@ -17,10 +17,8 @@
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
-import com.google.gwt.requestfactory.shared.DeltaValueStore;
import com.google.gwt.requestfactory.shared.Receiver;
import com.google.gwt.requestfactory.shared.RequestObject;
-import com.google.gwt.sample.expenses.gwt.request.ExpenseRecord;
import com.google.gwt.sample.expenses.gwt.request.ExpensesRequestFactory;
import com.google.gwt.sample.expenses.gwt.request.ReportRecord;
import com.google.gwt.uibinder.client.UiBinder;
@@ -86,8 +84,8 @@
public void create(Long reporterId) {
report = (ReportRecord) requestFactory.create(ReportRecord.class);
requestObject = requestFactory.reportRequest().persist(report);
- DeltaValueStore deltas = requestObject.getDeltaValueStore();
- deltas.set(ReportRecord.reporterKey, report, reporterId);
+ ReportRecord editableReport = requestObject.edit(report);
+ report.setReporterKey(reporterId);
displayReport();
}
@@ -112,16 +110,15 @@
@SuppressWarnings("deprecation")
public void onCustom() {
- DeltaValueStore deltas = requestObject.getDeltaValueStore();
- deltas.set(ReportRecord.purpose, report, purposeText.getText());
- deltas.set(ReportRecord.notes, report, notesText.getText());
- deltas.set(ReportRecord.department, report,
- departmentList.getValue(departmentList.getSelectedIndex()));
+ ReportRecord editableReport = requestObject.edit(report);
+ editableReport.setPurpose(purposeText.getText());
+ editableReport.setNotes(notesText.getText());
+ editableReport.setDepartment(departmentList.getValue(departmentList.getSelectedIndex()));
// TODO(jgw): Use non-deprecated date methods for this.
Date date = new Date(dateYear.getSelectedIndex() + 100,
dateMonth.getSelectedIndex(), dateDay.getSelectedIndex() + 1);
- deltas.set(ExpenseRecord.created, report, date);
+ editableReport.setCreated(date);
// TODO: wait throbber
requestObject.fire(new Receiver<Void>() {
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/EmployeeRecord.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/EmployeeRecord.java
index b31af5a..21ac793 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/EmployeeRecord.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/EmployeeRecord.java
@@ -46,4 +46,16 @@
Long getSupervisorKey();
String getUserName();
+
+ boolean isChanged();
+
+ void setDepartment(String department);
+
+ void setDisplayName(String displayName);
+
+ void setPassword(String password);
+
+ void setSupervisorKey(Long supervisorKey);
+
+ void setUserName(String userName);
}
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ExpenseRecord.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ExpenseRecord.java
index 5ac0014..268c569 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ExpenseRecord.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ExpenseRecord.java
@@ -48,9 +48,23 @@
String getDescription();
- Long getId();
-
String getReasonDenied();
Long getReportId();
+
+ boolean isChanged();
+
+ void setAmount(Double amount);
+
+ void setApproval(String approval);
+
+ void setCategory(String category);
+
+ void setCreated(Date created);
+
+ void setDescription(String description);
+
+ void setReasonDenied(String reasonDenied);
+
+ void setReportId(Long reportId);
}
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ExpenseRequest.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ExpenseRequest.java
index e198862..2fe63e1 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ExpenseRequest.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ExpenseRequest.java
@@ -49,17 +49,16 @@
RecordListRequest<ExpenseRecord> findExpensesByReport(
PropertyReference<Long> reportId);
- // TODO: persist() and remove() methods are hacks for now.
/**
* @return a request object
*/
@Instance
- RequestObject<Void> persist();
+ RequestObject<Void> persist(ExpenseRecord record);
/**
* @return a request object
*/
@Instance
- RequestObject<Void> remove();
+ RequestObject<Void> remove(ExpenseRecord record);
}
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ReportRecord.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ReportRecord.java
index 7d2cca1..d98c4b9 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ReportRecord.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/request/ReportRecord.java
@@ -50,4 +50,18 @@
String getPurpose();
Long getReporterKey();
+
+ boolean isChanged();
+
+ void setApprovedSupervisorKey(Long approvedSupervisorKey);
+
+ void setCreated(Date created);
+
+ void setDepartment(String department);
+
+ void setNotes(String notes);
+
+ void setPurpose(String purpose);
+
+ void setReporterKey(Long reporterKey);
}
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java
index 5921a5b..1040a72 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java
@@ -18,7 +18,6 @@
import com.google.gwt.app.place.AbstractActivity;
import com.google.gwt.app.place.PlaceController;
import com.google.gwt.app.place.RecordDetailsView;
-import com.google.gwt.requestfactory.shared.DeltaValueStore;
import com.google.gwt.requestfactory.shared.Receiver;
import com.google.gwt.requestfactory.shared.RequestObject;
import com.google.gwt.sample.expenses.gwt.client.place.EmployeeScaffoldPlace;
@@ -80,8 +79,7 @@
}
RequestObject<Void> deleteRequest = requests.employeeRequest().remove(view.getValue());
- DeltaValueStore deltas = deleteRequest.getDeltaValueStore();
- deltas.delete(view.getValue());
+ deleteRequest.delete(view.getValue());
deleteRequest.fire(new Receiver<Void>() {
public void onSuccess(Void ignore, Set<SyncResult> response) {
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java
index f8870f9..0509805 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java
@@ -23,7 +23,6 @@
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.requestfactory.shared.DeltaValueStore;
import com.google.gwt.sample.expenses.gwt.request.EmployeeRecord;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
@@ -65,7 +64,6 @@
@UiField Element createTitle;
private Delegate delegate;
- private DeltaValueStore deltas;
private EmployeeRecord record;
@@ -78,10 +76,6 @@
return this;
}
- public DeltaValueStore getDeltaValueStore() {
- return deltas;
- }
-
public Set<Property<?>> getProperties() {
return DATA_BINDER.getProperties();
}
@@ -108,10 +102,6 @@
this.delegate = delegate;
}
- public void setDeltaValueStore(DeltaValueStore deltas) {
- this.deltas = deltas;
- }
-
public void setEnabled(boolean enabled) {
DATA_BINDER.setEnabled(this, enabled);
save.setEnabled(enabled);
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java
index 323b0f1..9e761e2 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java
@@ -18,7 +18,6 @@
import com.google.gwt.app.place.AbstractActivity;
import com.google.gwt.app.place.PlaceController;
import com.google.gwt.app.place.RecordDetailsView;
-import com.google.gwt.requestfactory.shared.DeltaValueStore;
import com.google.gwt.requestfactory.shared.Receiver;
import com.google.gwt.requestfactory.shared.RequestObject;
import com.google.gwt.sample.expenses.gwt.client.place.ReportScaffoldPlace;
@@ -80,9 +79,7 @@
}
RequestObject<Void> deleteRequest = requests.reportRequest().remove(view.getValue());
- // TODO: fix this.
- DeltaValueStore deltas = deleteRequest.getDeltaValueStore();
- deltas.delete(view.getValue());
+ deleteRequest.delete(view.getValue());
deleteRequest.fire(new Receiver<Void>() {
public void onSuccess(Void ignore, Set<SyncResult> response) {
diff --git a/user/src/com/google/gwt/app/place/AbstractRecordEditActivity.java b/user/src/com/google/gwt/app/place/AbstractRecordEditActivity.java
index 01608af..1f2797c 100644
--- a/user/src/com/google/gwt/app/place/AbstractRecordEditActivity.java
+++ b/user/src/com/google/gwt/app/place/AbstractRecordEditActivity.java
@@ -15,7 +15,6 @@
*/
package com.google.gwt.app.place;
-import com.google.gwt.requestfactory.shared.DeltaValueStore;
import com.google.gwt.requestfactory.shared.Receiver;
import com.google.gwt.requestfactory.shared.RequestFactory;
import com.google.gwt.requestfactory.shared.RequestObject;
@@ -75,7 +74,7 @@
}
public String mayStop() {
- if (requestObject != null && requestObject.getDeltaValueStore().isChanged()) {
+ if (requestObject != null && requestObject.isChanged()) {
return "Are you sure you want to abandon your changes?";
}
@@ -92,8 +91,7 @@
public void saveClicked() {
assert requestObject != null;
- DeltaValueStore theDeltas = requestObject.getDeltaValueStore();
- if (!theDeltas.isChanged()) {
+ if (!requestObject.isChanged()) {
return;
}
view.setEnabled(false);
@@ -128,7 +126,7 @@
exit();
} else {
requestObject = toCommit;
- requestObject.getDeltaValueStore().clearUsed();
+ requestObject.clearUsed();
view.setEnabled(true);
}
}
@@ -183,10 +181,10 @@
private void doStart(final Display display, R record) {
setRequestObject(record);
+ R editableRecord = requestObject.edit(record);
view.setEnabled(true);
- view.setValue(record);
+ view.setValue(editableRecord);
view.showErrors(null);
display.showActivityWidget(view);
- view.setDeltaValueStore(requestObject.getDeltaValueStore());
}
}
diff --git a/user/src/com/google/gwt/app/place/RecordEditView.java b/user/src/com/google/gwt/app/place/RecordEditView.java
index 720138d..32c23bd 100644
--- a/user/src/com/google/gwt/app/place/RecordEditView.java
+++ b/user/src/com/google/gwt/app/place/RecordEditView.java
@@ -15,7 +15,6 @@
*/
package com.google.gwt.app.place;
-import com.google.gwt.requestfactory.shared.DeltaValueStore;
import com.google.gwt.user.client.ui.TakesValue;
import com.google.gwt.valuestore.shared.Record;
@@ -42,11 +41,9 @@
void saveClicked();
}
- DeltaValueStore getDeltaValueStore();
boolean isChanged();
void setCreating(boolean b);
void setDelegate(Delegate delegate);
- void setDeltaValueStore(DeltaValueStore deltas);
void setEnabled(boolean b);
// TODO needs to be Map<Property<?>, String> errors
diff --git a/user/src/com/google/gwt/app/rebind/EditorSupportGenerator.java b/user/src/com/google/gwt/app/rebind/EditorSupportGenerator.java
index 4625338..9df2bbe 100644
--- a/user/src/com/google/gwt/app/rebind/EditorSupportGenerator.java
+++ b/user/src/com/google/gwt/app/rebind/EditorSupportGenerator.java
@@ -92,6 +92,10 @@
JClassType stringType;
+ private String capitalize(String name) {
+ return name.substring(0, 1).toUpperCase() + name.substring(1);
+ }
+
@Override
public String generate(TreeLogger logger, GeneratorContext generatorContext,
String interfaceName) throws UnableToCompleteException {
@@ -450,12 +454,8 @@
+ "> event) {");
sw.indent();
// recordField and uiFieldEntry have the same name
- String recordFieldName = uiFieldEntry.getKey().getName();
- sw.println("view.getDeltaValueStore().set(" + recordType.getName() + "."
- + recordFieldName + ", view.getValue(),");
- sw.indent();
- sw.println("event.getValue());");
- sw.outdent();
+ sw.println("view.getValue().set"
+ + capitalize(uiFieldEntry.getKey().getName()) + "(event.getValue());");
sw.outdent();
sw.println("}");
sw.outdent();
@@ -479,12 +479,12 @@
getter = "getText";
}
sw.println(String.format(
- "view.getDeltaValueStore().set(%s.%s, view.getValue(), view.%s.%s());",
- recordType.getName(), property.getName(),
+ "view.getValue().set%s(view.%s.%s());",
+ capitalize(property.getName()),
uiFieldEntry.getKey().getName(), getter));
}
}
- sw.println("return view.getDeltaValueStore().isChanged();");
+ sw.println("return view.getValue().isChanged();");
sw.outdent();
sw.println("}");
sw.outdent();
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 78dbe1d..461303b 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonListRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonListRequest.java
@@ -19,8 +19,6 @@
import com.google.gwt.requestfactory.shared.RecordListRequest;
import com.google.gwt.valuestore.shared.Record;
import com.google.gwt.valuestore.shared.SyncResult;
-import com.google.gwt.valuestore.shared.impl.RecordJsoImpl;
-import com.google.gwt.valuestore.shared.impl.RecordSchema;
import java.util.ArrayList;
import java.util.Collections;
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 fdd4b66..903458f 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonObjectRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonObjectRequest.java
@@ -18,8 +18,6 @@
import com.google.gwt.requestfactory.shared.RecordRequest;
import com.google.gwt.valuestore.shared.Record;
import com.google.gwt.valuestore.shared.SyncResult;
-import com.google.gwt.valuestore.shared.impl.RecordJsoImpl;
-import com.google.gwt.valuestore.shared.impl.RecordSchema;
import java.util.Collections;
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 6fad68f..035d5be 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java
@@ -15,10 +15,10 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.requestfactory.shared.DeltaValueStore;
import com.google.gwt.requestfactory.shared.Receiver;
import com.google.gwt.requestfactory.shared.RequestObject;
import com.google.gwt.valuestore.shared.Property;
+import com.google.gwt.valuestore.shared.Record;
import java.util.Collection;
import java.util.Collections;
@@ -31,8 +31,8 @@
* development, and is very likely to be deleted. Use it at your own risk.
* </span>
* </p>
- * Abstract implementation of {@link RequestObject}. Each request
- * stores a {@link DeltaValueStore}.
+ * Abstract implementation of {@link RequestObject}. Each request stores a
+ * {@link DeltaValueStoreJsonImpl}.
*
* @param <T> return type
* @param <R> type of this request object
@@ -41,7 +41,7 @@
implements RequestObject<T> {
protected final RequestFactoryJsonImpl requestFactory;
- protected DeltaValueStore deltaValueStore;
+ protected DeltaValueStoreJsonImpl deltaValueStore;
protected Receiver<T> receiver;
private final Set<Property<?>> properties = new HashSet<Property<?>>();
@@ -49,7 +49,24 @@
public AbstractRequest(RequestFactoryJsonImpl requestFactory) {
this.requestFactory = requestFactory;
ValueStoreJsonImpl valueStore = requestFactory.getValueStore();
- this.deltaValueStore = new DeltaValueStoreJsonImpl(valueStore, requestFactory);
+ this.deltaValueStore = new DeltaValueStoreJsonImpl(valueStore,
+ requestFactory);
+ }
+
+ public void clearUsed() {
+ ((DeltaValueStoreJsonImpl) deltaValueStore).clearUsed();
+ }
+
+ public void delete(Record record) {
+ deltaValueStore.delete(record);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <P extends Record> P edit(P record) {
+ P returnRecordImpl = (P) ((RecordImpl) record).getSchema().create(
+ ((RecordImpl) record).asJso());
+ ((RecordImpl) returnRecordImpl).setDeltaValueStore(deltaValueStore);
+ return returnRecordImpl;
}
public void fire(Receiver<T> receiver) {
@@ -69,10 +86,6 @@
return getThis();
}
- public DeltaValueStore getDeltaValueStore() {
- return deltaValueStore;
- }
-
/**
* @return the properties
*/
@@ -80,6 +93,10 @@
return Collections.unmodifiableSet(properties);
}
+ public boolean isChanged() {
+ return ((DeltaValueStoreJsonImpl) deltaValueStore).isChanged();
+ }
+
public void reset() {
ValueStoreJsonImpl valueStore = requestFactory.getValueStore();
deltaValueStore = new DeltaValueStoreJsonImpl(valueStore, requestFactory);
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 9171046..460c0c8 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImpl.java
@@ -17,14 +17,11 @@
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
-import com.google.gwt.requestfactory.shared.DeltaValueStore;
import com.google.gwt.valuestore.client.SyncResultImpl;
import com.google.gwt.valuestore.shared.Property;
import com.google.gwt.valuestore.shared.Record;
import com.google.gwt.valuestore.shared.SyncResult;
import com.google.gwt.valuestore.shared.WriteOperation;
-import com.google.gwt.valuestore.shared.impl.RecordImpl;
-import com.google.gwt.valuestore.shared.impl.RecordJsoImpl;
import java.util.HashMap;
import java.util.HashSet;
@@ -36,9 +33,12 @@
* <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> {@link DeltaValueStore} implementation.
+ * </p>
+ * Accumulates the local edits, made in the context of a
+ * {@link com.google.gwt.requestfactory.shared.RequestObject}.
+ *
*/
-public class DeltaValueStoreJsonImpl implements DeltaValueStore {
+class DeltaValueStoreJsonImpl {
static class ReturnRecord extends JavaScriptObject {
@@ -349,10 +349,6 @@
}
}
- public DeltaValueStore spawnDeltaView() {
- throw new UnsupportedOperationException("Auto-generated method stub");
- }
-
public String toJson() {
used = true;
if (operations.size() > 1) {
diff --git a/user/src/com/google/gwt/valuestore/shared/impl/RecordImpl.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordImpl.java
similarity index 68%
rename from user/src/com/google/gwt/valuestore/shared/impl/RecordImpl.java
rename to user/src/com/google/gwt/requestfactory/client/impl/RecordImpl.java
index fd13ed8..d823962 100644
--- a/user/src/com/google/gwt/valuestore/shared/impl/RecordImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordImpl.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.google.gwt.valuestore.shared.impl;
+package com.google.gwt.requestfactory.client.impl;
import com.google.gwt.valuestore.shared.Property;
import com.google.gwt.valuestore.shared.PropertyReference;
@@ -34,9 +34,11 @@
*/
public class RecordImpl implements Record {
private final RecordJsoImpl jso;
+ private DeltaValueStoreJsonImpl deltaValueStore;
protected RecordImpl(RecordJsoImpl record) {
this.jso = record;
+ deltaValueStore = null;
}
public RecordJsoImpl asJso() {
@@ -62,4 +64,29 @@
public Integer getVersion() {
return jso.getVersion();
}
+
+ public boolean isChanged() {
+ if (deltaValueStore == null) {
+ return false;
+ }
+ return deltaValueStore.isChanged();
+ }
+
+ public <V> void set(Property<V> property, RecordImpl record, V value) {
+ if (deltaValueStore == null) {
+ throw new UnsupportedOperationException(
+ "Setter methods can't be called before calling edit()");
+ }
+ deltaValueStore.set(property, record, value);
+ }
+
+ /*
+ * TODO: this method is public for the time being. Will become
+ * package-protected once {@link RecordImpl} moves to the same package as
+ * {@link AbstractRequest}.
+ */
+ public void setDeltaValueStore(DeltaValueStoreJsonImpl deltaValueStore) {
+ this.deltaValueStore = deltaValueStore;
+ }
+
}
diff --git a/user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordJsoImpl.java
similarity index 99%
rename from user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java
rename to user/src/com/google/gwt/requestfactory/client/impl/RecordJsoImpl.java
index a2ba8dc..f530947 100644
--- a/user/src/com/google/gwt/valuestore/shared/impl/RecordJsoImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordJsoImpl.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.google.gwt.valuestore.shared.impl;
+package com.google.gwt.requestfactory.client.impl;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java
index 8389824..c803843 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java
@@ -15,9 +15,6 @@
*/
package com.google.gwt.requestfactory.client.impl;
-import com.google.gwt.valuestore.shared.impl.RecordImpl;
-import com.google.gwt.valuestore.shared.impl.RecordJsoImpl;
-import com.google.gwt.valuestore.shared.impl.RecordSchema;
/**
* <p>
diff --git a/user/src/com/google/gwt/valuestore/shared/impl/RecordSchema.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordSchema.java
similarity index 97%
rename from user/src/com/google/gwt/valuestore/shared/impl/RecordSchema.java
rename to user/src/com/google/gwt/requestfactory/client/impl/RecordSchema.java
index 24f12e6..06560ed 100644
--- a/user/src/com/google/gwt/valuestore/shared/impl/RecordSchema.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordSchema.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.google.gwt.valuestore.shared.impl;
+package com.google.gwt.requestfactory.client.impl;
import com.google.gwt.valuestore.shared.Property;
import com.google.gwt.valuestore.shared.Record;
diff --git a/user/src/com/google/gwt/valuestore/shared/impl/RecordToTypeMap.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordToTypeMap.java
similarity index 95%
rename from user/src/com/google/gwt/valuestore/shared/impl/RecordToTypeMap.java
rename to user/src/com/google/gwt/requestfactory/client/impl/RecordToTypeMap.java
index 46b5725..7559688 100644
--- a/user/src/com/google/gwt/valuestore/shared/impl/RecordToTypeMap.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordToTypeMap.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.google.gwt.valuestore.shared.impl;
+package com.google.gwt.requestfactory.client.impl;
import com.google.gwt.valuestore.shared.Record;
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 3c654d7..7b91595 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
@@ -29,9 +29,6 @@
import com.google.gwt.requestfactory.shared.RequestEvent.State;
import com.google.gwt.user.client.Window.Location;
import com.google.gwt.valuestore.shared.Record;
-import com.google.gwt.valuestore.shared.impl.RecordJsoImpl;
-import com.google.gwt.valuestore.shared.impl.RecordSchema;
-import com.google.gwt.valuestore.shared.impl.RecordToTypeMap;
import java.util.HashMap;
import java.util.HashSet;
@@ -108,7 +105,7 @@
"Content-Type", RequestFactory.JSON_CONTENT_TYPE_UTF8);
builder.setHeader("pageurl", Location.getHref());
builder.setRequestData(ClientRequestHelper.getRequestString(requestObject.getRequestData().getRequestMap(
- ((DeltaValueStoreJsonImpl) requestObject.getDeltaValueStore()).toJson())));
+ ((AbstractRequest) requestObject).deltaValueStore.toJson())));
builder.setCallback(new RequestCallback() {
public void onError(Request request, Throwable exception) {
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/ValueStoreJsonImpl.java b/user/src/com/google/gwt/requestfactory/client/impl/ValueStoreJsonImpl.java
index ede2fd1..9ab759f 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/ValueStoreJsonImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/ValueStoreJsonImpl.java
@@ -18,7 +18,6 @@
import com.google.gwt.core.client.JsArray;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.valuestore.shared.WriteOperation;
-import com.google.gwt.valuestore.shared.impl.RecordJsoImpl;
import java.util.HashMap;
import java.util.Map;
diff --git a/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java b/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
index 18c502d..3d84718 100644
--- a/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
+++ b/user/src/com/google/gwt/requestfactory/rebind/RequestFactoryGenerator.java
@@ -43,6 +43,10 @@
import com.google.gwt.requestfactory.client.impl.AbstractLongRequest;
import com.google.gwt.requestfactory.client.impl.AbstractShortRequest;
import com.google.gwt.requestfactory.client.impl.AbstractVoidRequest;
+import com.google.gwt.requestfactory.client.impl.RecordImpl;
+import com.google.gwt.requestfactory.client.impl.RecordJsoImpl;
+import com.google.gwt.requestfactory.client.impl.RecordSchema;
+import com.google.gwt.requestfactory.client.impl.RecordToTypeMap;
import com.google.gwt.requestfactory.client.impl.RequestFactoryJsonImpl;
import com.google.gwt.requestfactory.server.ReflectionBasedOperationRegistry;
import com.google.gwt.requestfactory.shared.RecordListRequest;
@@ -55,10 +59,6 @@
import com.google.gwt.valuestore.shared.Record;
import com.google.gwt.valuestore.shared.RecordChangedEvent;
import com.google.gwt.valuestore.shared.WriteOperation;
-import com.google.gwt.valuestore.shared.impl.RecordImpl;
-import com.google.gwt.valuestore.shared.impl.RecordJsoImpl;
-import com.google.gwt.valuestore.shared.impl.RecordSchema;
-import com.google.gwt.valuestore.shared.impl.RecordToTypeMap;
import java.io.PrintWriter;
import java.math.BigDecimal;
@@ -204,6 +204,7 @@
sw.outdent();
sw.println("}");
+ // getter methods
for (JField field : publicRecordType.getFields()) {
JType fieldType = field.getType();
if (propertyType.getErasedType() == fieldType.getErasedType()) {
@@ -224,6 +225,29 @@
}
}
+ // setter methods
+ for (JField field : publicRecordType.getFields()) {
+ JType fieldType = field.getType();
+ if (propertyType.getErasedType() == fieldType.getErasedType()) {
+ JParameterizedType parameterized = fieldType.isParameterized();
+ if (parameterized == null) {
+ logger.log(TreeLogger.ERROR, fieldType
+ + " must have its param type set.");
+ throw new UnableToCompleteException();
+ }
+ JClassType returnType = parameterized.getTypeArgs()[0];
+ sw.println();
+ String varName = field.getName();
+ sw.println(String.format("public void set%s(%s %s) {",
+ capitalize(field.getName()), returnType.getQualifiedSourceName(),
+ varName));
+ sw.indent();
+ sw.println(String.format("set(this.%s, this, %s);", field.getName(), varName));
+ sw.outdent();
+ sw.println("}");
+ }
+ }
+
sw.outdent();
sw.println("}");
generatorContext.commit(logger, pw);
@@ -534,7 +558,7 @@
if ("com.google.gwt.valuestore.shared.PropertyReference".equals(parameter.getType().getQualifiedBinaryName())) {
sb.append(".get()");
}
- JClassType classType = parameter.getType().isClass();
+ JClassType classType = parameter.getType().isClassOrInterface();
if (classType != null
&& classType.isAssignableTo(typeOracle.findType(Record.class.getName()))) {
sb.append(".getId()");
diff --git a/user/src/com/google/gwt/requestfactory/shared/DeltaValueStore.java b/user/src/com/google/gwt/requestfactory/shared/DeltaValueStore.java
deleted file mode 100644
index 045bcc7..0000000
--- a/user/src/com/google/gwt/requestfactory/shared/DeltaValueStore.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.shared;
-
-import com.google.gwt.valuestore.shared.Property;
-import com.google.gwt.valuestore.shared.Record;
-
-/**
- * <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>
- * Set of changes to a ValueStore.
- */
-public interface DeltaValueStore {
-
- /**
- * Enable a DeltaValueStore to be reused again. For example, when the edit
- * fails on the server.
- */
- void clearUsed();
-
- void delete(Record record);
-
- /**
- * Return true if there are outstanding changes that have not been
- * communicated to the server yet. Note that it is illegal to call this method
- * after a request using it has been fired.
- */
- boolean isChanged();
-
- <V> void set(Property<V> property, Record record, V value);
-}
diff --git a/user/src/com/google/gwt/requestfactory/shared/RequestObject.java b/user/src/com/google/gwt/requestfactory/shared/RequestObject.java
index 13deafc..f35fcf8 100644
--- a/user/src/com/google/gwt/requestfactory/shared/RequestObject.java
+++ b/user/src/com/google/gwt/requestfactory/shared/RequestObject.java
@@ -15,6 +15,8 @@
*/
package com.google.gwt.requestfactory.shared;
+import com.google.gwt.valuestore.shared.Record;
+
/**
* <p>
* <span style="color:red">Experimental API: This class is still under rapid
@@ -25,16 +27,33 @@
* @param <T> The return type of objects in the corresponding response.
*/
public interface RequestObject<T> {
- // reset the DeltaValueStore.
- void reset();
+
+ /**
+ * Enable a RequestObject to be reused again. For example, when the edit
+ * fails on the server.
+ */
+ void clearUsed();
+
+ // TODO: temporary hack so that I could get rid of DeltaValueStore. This will
+ // be removed once the hack for SYNC requests goes away.
+ void delete(Record record);
+
+ <P extends Record> P edit(P record);
void fire(Receiver<T> receiver);
- // can get access to a DeltaValueStore only in the context of a RequestObject.
- DeltaValueStore getDeltaValueStore();
-
RequestData getRequestData();
void handleResponseText(String responseText);
+
+ /**
+ * Return true if there are outstanding changes that have not been
+ * communicated to the server yet. Note that it is illegal to call this method
+ * after a request using it has been fired.
+ */
+ boolean isChanged();
+
+ // reset the DeltaValueStore.
+ void reset();
}
\ No newline at end of file
diff --git a/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java b/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
new file mode 100644
index 0000000..67a43c2
--- /dev/null
+++ b/user/test/com/google/gwt/requestfactory/RequestFactorySuite.java
@@ -0,0 +1,35 @@
+/*
+ * 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;
+
+import com.google.gwt.junit.tools.GWTTestSuite;
+import com.google.gwt.requestfactory.client.impl.DeltaValueStoreJsonImplTest;
+import com.google.gwt.requestfactory.client.impl.RecordJsoImplTest;
+
+import junit.framework.Test;
+
+/**
+ *
+ */
+public class RequestFactorySuite {
+ public static Test suite() {
+ GWTTestSuite suite = new GWTTestSuite(
+ "Test suite for all requestfactory code.");
+ suite.addTestSuite(RecordJsoImplTest.class);
+ suite.addTestSuite(DeltaValueStoreJsonImplTest.class);
+ return suite;
+ }
+}
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 555dec3..33ade39 100644
--- a/user/test/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImplTest.java
+++ b/user/test/com/google/gwt/requestfactory/client/impl/DeltaValueStoreJsonImplTest.java
@@ -24,11 +24,6 @@
import com.google.gwt.valuestore.shared.Record;
import com.google.gwt.valuestore.shared.SimpleFooRecord;
import com.google.gwt.valuestore.shared.WriteOperation;
-import com.google.gwt.valuestore.shared.impl.RecordImpl;
-import com.google.gwt.valuestore.shared.impl.RecordJsoImpl;
-import com.google.gwt.valuestore.shared.impl.RecordSchema;
-import com.google.gwt.valuestore.shared.impl.RecordToTypeMap;
-import com.google.gwt.valuestore.shared.impl.SimpleFooRecordImpl;
import java.util.Date;
diff --git a/user/test/com/google/gwt/valuestore/shared/impl/RecordJsoImplTest.java b/user/test/com/google/gwt/requestfactory/client/impl/RecordJsoImplTest.java
similarity index 97%
rename from user/test/com/google/gwt/valuestore/shared/impl/RecordJsoImplTest.java
rename to user/test/com/google/gwt/requestfactory/client/impl/RecordJsoImplTest.java
index 17e8ac7..7a9635b 100644
--- a/user/test/com/google/gwt/valuestore/shared/impl/RecordJsoImplTest.java
+++ b/user/test/com/google/gwt/requestfactory/client/impl/RecordJsoImplTest.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.google.gwt.valuestore.shared.impl;
+package com.google.gwt.requestfactory.client.impl;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.junit.client.GWTTestCase;
@@ -36,7 +36,7 @@
@Override
public String getModuleName() {
- return "com.google.gwt.valuestore.ValueStoreSuite";
+ return "com.google.gwt.requestfactory.RequestFactoryTest";
}
public void testEmptyCopy() {
diff --git a/user/test/com/google/gwt/valuestore/shared/impl/SimpleFooRecordImpl.java b/user/test/com/google/gwt/requestfactory/client/impl/SimpleFooRecordImpl.java
similarity index 97%
rename from user/test/com/google/gwt/valuestore/shared/impl/SimpleFooRecordImpl.java
rename to user/test/com/google/gwt/requestfactory/client/impl/SimpleFooRecordImpl.java
index 44b4696..0430812 100644
--- a/user/test/com/google/gwt/valuestore/shared/impl/SimpleFooRecordImpl.java
+++ b/user/test/com/google/gwt/requestfactory/client/impl/SimpleFooRecordImpl.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.google.gwt.valuestore.shared.impl;
+package com.google.gwt.requestfactory.client.impl;
import com.google.gwt.valuestore.shared.Property;
import com.google.gwt.valuestore.shared.Record;
diff --git a/user/test/com/google/gwt/valuestore/ValueStoreSuite.java b/user/test/com/google/gwt/valuestore/ValueStoreSuite.java
index 61864ef..b289377 100644
--- a/user/test/com/google/gwt/valuestore/ValueStoreSuite.java
+++ b/user/test/com/google/gwt/valuestore/ValueStoreSuite.java
@@ -17,7 +17,6 @@
import com.google.gwt.junit.tools.GWTTestSuite;
import com.google.gwt.valuestore.client.RequestFactoryTest;
-import com.google.gwt.valuestore.shared.impl.RecordJsoImplTest;
import junit.framework.Test;
@@ -28,7 +27,6 @@
public static Test suite() {
GWTTestSuite suite = new GWTTestSuite(
"Test suite for all valuestore code.");
- suite.addTestSuite(RecordJsoImplTest.class);
suite.addTestSuite(RequestFactoryTest.class);
return suite;
}