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.
final DataSource facadeDataSource = new DataSource() {
{
setDataProtocol(DSProtocol.CLIENTCUSTOM);
setInheritsFrom(ItemSupplyXmlDS.getInstance());
}
@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.