Originally posted by mnenchev
But what about those associations that I do not want to be displayed or changed in the grid? Do those also need to be handled as (hidden) nested datasources?
Thanks
Michael
public interface HasSmartGWTResources<M extends DTObjectModel> {
List<DataSourceField> getDataSourceFields();
M newModel();
ListGridRecord toListGridRecord(M model);
M toModel(ListGridRecord record);
DvTreeNode toTreeNode(M model, String parentid);
List<DvTreeNode> toTreeNodeWithChildren(M model, String parentid);
}
public interface DataService<M extends DTObjectModel> extends RemoteService {
List<M> fetch(int startIndex, int count);
M add(M model);
M update(M model);
void remove(M model);
}
public interface DataServiceAsync<M extends DTObjectModel> {
void fetch(int startIndex, int count, AsyncCallback<List<M>> async);
void add(M model, AsyncCallback<M> async);
void update(M model, AsyncCallback<M> async);
void remove(M model, AsyncCallback<M> async);
}
public class SmartGWTDataSource<M extends DTObjectModel, R extends HasSmartGWTResources<M>, S extends DataService<M>> extends DataSource {
private HasSmartGWTResources<M> resource;
private DataServiceAsync<M> service;
/**
* Creates new data source which communicates with server by GWT RPC.
* It is normal server side SmartClient data source with data protocol
* set to <code>DSProtocol.CLIENTCUSTOM</code> ("clientCustom" - natively
* supported by SmartClient but should be added to smartGWT) and with data
* format <code>DSDataFormat.CUSTOM</code>.
*/
@SuppressWarnings("unchecked")
public SmartGWTDataSource(HasSmartGWTResources<M> resource, Class<S> serviceClass) {
super();
setDataProtocol (DSProtocol.CLIENTCUSTOM);
setDataFormat (DSDataFormat.CUSTOM);
setClientOnly (false);
this.resource = resource;
service = (DataServiceAsync<M>) GWT.create(serviceClass);
for (DataSourceField field: resource.getDataSourceFields()) {
addField(field);
}
GWT.log("SourcebookDataSource() initialized.", null);
}
.
.
.
}
ListGrid grid = new ListGrid(); UserDataSource dataSource = new UserDataSource(); grid.setFields(dataSource.createGridFields()); grid.setDataSource(dataSource); grid.setWidth(500); grid.setAlternateRecordStyles(true); grid.setShowAllRecords(false); addChild(grid);
public class UserDataSource extends GwtRpcDataSource {
public ListGridField[] createGridFields() {
return new ListGridField[] {
new ListGridField("id", 10),
new ListGridField("firstName", 30),
new ListGridField("lastName", 30),
new ListGridField("emailAddress", 30)
};
}
@Override
protected void executeAdd(String requestId, DSRequest request,
DSResponse response) {
DataSourceField field;
field = new DataSourceIntegerField ("id", "Id");
field.setPrimaryKey (true);
// AutoIncrement on server.
field.setRequired (false);
addField (field);
field = new DataSourceTextField ("firstName", "First Name");
field.setRequired (true);
addField (field);
field = new DataSourceDateField ("lastName", "Last Name");
field.setRequired (true);
addField (field);
field = new DataSourceDateField ("emailAddress", "Email Address");
field.setRequired (true);
addField (field);
}
@Override
protected void executeFetch(final String requestId, final DSRequest request,
final DSResponse response) {
// if I set a breakpoint here - this is never called
int startRow = toInt(response.getStartRow());
int endRow = toInt(response.getEndRow());
int pageSize = endRow - startRow;
Service.user().findAll(startRow, pageSize, new AsyncCallback<ArrayList<User>>() {
public void onSuccess(ArrayList<User> result) {
ListGridRecord[] list = new ListGridRecord[result.size ()];
for (int i = 0; i < list.length; i++) {
ListGridRecord record = new ListGridRecord ();
copyValues (result.get (i), record);
list[i] = record;
}
response.setData (list);
processResponse (requestId, response);
};
public void onFailure(Throwable caught) {
response.setStatus(RPCResponse.STATUS_FAILURE);
processResponse(requestId, response);
};
});
}
private static void copyValues (User from, ListGridRecord to) {
to.setAttribute ("id", from.getId ());
to.setAttribute ("firstName", from.getFirstName());
to.setAttribute ("lastName", from.getLastName());
to.setAttribute ("emailAddress", from.getEmailAddress());
}
@Override
protected void executeRemove(String requestId, DSRequest request,
DSResponse response) {
}
@Override
protected void executeUpdate(String requestId, DSRequest request,
DSResponse response) {
}
}
Leave a comment: