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: