public interface DsFacade DSRequests by passing them on to another DataSource. This can be useful for:
DataSource.cacheAllData or automatic caching done by ResultSet DataSourceField.includeFrom if you have Smart GWT Pro or better) OperationBinding.operationId for this) This facade pattern can be implemented either server-side or client-side:
dataProtocol:"clientCustom". The FacadeDataSource provides a specific implementation that is useful for testing purposes. Alternative, the code below shows the simplest possible code for the facade pattern when implemented client-side via dataProtocol:"clientCustom" - requests are forwarded to another DataSource, and the responses are returned completely unchanged. facadeDataSource.updateCaches() as shown below
DataSource facadeDataSource = null;
DataSource supplyItemDS = DataSource.get("SupplyItem");
supplyItemDS.addDataChangedHandler(new DataChangedHandler() {
@Override
public void onDataChanged(DataChangedEvent event) {
facadeDataSource.updateCaches(event.getDsResponse());
}
});
facadeDataSource = new DataSource() {
{
setDataProtocol(DSProtocol.CLIENTCUSTOM);
setInheritsFrom(supplyItemDS);
}
@Override
public Object transformRequest(final DSRequest dsRequest) {
final DataSource superDS = DataSource.get(getInheritsFrom()),
selfDS = this;
final DSRequest derivedDSRequest = cloneDSRequest(dsRequest);
derivedDSRequest.setShowPrompt(false);
derivedDSRequest.setCallback(new DSCallback() {
@Override
public void execute(DSResponse dsResponse, Object data, DSRequest derivedDSRequest) {
selfDS.processResponse(dsRequest.getRequestId(), superDS.cloneDSResponse(dsResponse));
}
});
superDS.execute(derivedDSRequest);
return dsRequest.getData();
}
};
Check out this example of the DataSource facade pattern being used to create a DataSource that may work with already loaded data, or may use another DataSource to fulfill its requests.