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.