import java.util.Set;
import com.vaadin.server.AbstractExtension;
+import com.vaadin.server.communication.data.typed.DataSource.DataChangeHandler;
import com.vaadin.shared.data.DataProviderClientRpc;
import com.vaadin.shared.data.DataProviderConstants;
import com.vaadin.shared.data.DataRequestRpc;
protected ActiveDataHandler handler = new ActiveDataHandler();
protected DataProviderClientRpc rpc;
- // TODO: Add a "BackEnd" API
- // protected BackEnd data;
+ protected DataSource<T> dataSource;
- protected DataProvider() {
+ protected DataProvider(DataSource<T> dataSource) {
addDataGenerator(handler);
+ this.dataSource = dataSource;
rpc = getRpcProxy(DataProviderClientRpc.class);
registerRpc(createRpc());
+ this.dataSource.addDataChangeHandler(createDataChangeHandler());
}
/**
* @return data request rpc implementation
*/
protected abstract DataRequestRpc createRpc();
+
+ /**
+ * Creates a {@link DataChangeHandler} to use with the {@link DataSource}.
+ *
+ * @return data change handler
+ */
+ protected abstract DataChangeHandler<T> createDataChangeHandler();
}
}
// Use the whole data as the ones sent to the client.
- handler.cleanUp(data);
+ handler.cleanUp(dataSource);
}
}
private boolean reset = false;
private final Set<T> updatedData = new HashSet<T>();
- private DataSource<T> data;
// TODO: Allow customizing the used key mapper
private DataKeyMapper<T> keyMapper = new KeyMapper<T>();
* collection of data to use
*/
protected SimpleDataProvider(DataSource<T> data) {
- this.data = data;
- this.data.addDataChangeHandler(new DataChangeHandler<T>() {
-
- @Override
- public void onDataChange() {
- reset();
- }
-
- @Override
- public void onDataAdd(T data) {
- add(data);
- }
-
- @Override
- public void onDataRemove(T data) {
- remove(data);
- }
-
- @Override
- public void onDataUpdate(T data) {
- refresh(data);
- }
- });
+ super(data);
}
/**
super.beforeClientResponse(initial);
if (initial || reset) {
- getRpcProxy(DataProviderClientRpc.class).resetSize(data.size());
- pushData(0, data);
+ getRpcProxy(DataProviderClientRpc.class).resetSize(
+ dataSource.size());
+ pushData(0, dataSource);
} else if (!updatedData.isEmpty()) {
JsonArray dataArray = Json.createArray();
int i = 0;
return new SimpleDataRequestRpc();
}
+ @Override
+ protected DataChangeHandler<T> createDataChangeHandler() {
+ return new DataChangeHandler<T>() {
+
+ @Override
+ public void onDataChange() {
+ reset();
+ }
+
+ @Override
+ public void onDataAdd(T data) {
+ add(data);
+ }
+
+ @Override
+ public void onDataRemove(T data) {
+ remove(data);
+ }
+
+ @Override
+ public void onDataUpdate(T data) {
+ refresh(data);
+ }
+ };
+ }
}