protected DataSource<T> dataSource;
private DataChangeHandler<T> dataChangeHandler;
private DetachListener detachListener;
+ private DataKeyMapper<T> keyMapper;
protected DataProvider(DataSource<T> dataSource) {
addDataGenerator(handler);
registerRpc(createRpc());
dataChangeHandler = createDataChangeHandler();
this.dataSource.addDataChangeHandler(dataChangeHandler);
+ keyMapper = createKeyMapper();
}
@Override
generators.remove(generator);
}
+ /**
+ * Gets the {@link DataKeyMapper} used by this {@link DataProvider}. Key
+ * mapper can be used to map keys sent to the client-side back to their
+ * respective data objects.
+ *
+ * @return key mapper
+ */
+ public DataKeyMapper<T> getKeyMapper() {
+ return keyMapper;
+ }
+
/**
* Sends given collection of data objects to the client-side.
*
}
/**
- * Gets the {@link DataKeyMapper} used by this {@link DataProvider}.
+ * Creates a {@link DataKeyMapper} to use with this {@link DataProvider}.
+ * <p>
+ * This method is called from the constructor.
*
* @return key mapper
*/
- protected abstract DataKeyMapper<T> getKeyMapper();
+ protected abstract DataKeyMapper<T> createKeyMapper();
/**
- * Creates a {@link DataRequestRpc} instance.
+ * Creates a {@link DataRequestRpc} used with this {@link DataProvider}.
+ * <p>
+ * This method is called from the constructor.
*
* @return data request rpc implementation
*/
/**
* Creates a {@link DataChangeHandler} to use with the {@link DataSource}.
+ * <p>
+ * This method is called from the constructor.
*
* @return data change handler
*/
private boolean reset = false;
private final Set<T> updatedData = new HashSet<T>();
- // TODO: Allow customizing the used key mapper
- private DataKeyMapper<T> keyMapper = new KeyMapper<T>();
-
/**
* Creates a new DataProvider with the given Collection.
*
updatedData.clear();
}
- @Override
- protected DataKeyMapper<T> getKeyMapper() {
- return keyMapper;
- }
-
/**
* Informs the DataProvider that a data object has been added. It is assumed
* to be the last object in the collection.
updatedData.add(data);
}
+ @Override
+ protected DataKeyMapper<T> createKeyMapper() {
+ return new KeyMapper<T>();
+ }
+
@Override
protected DataRequestRpc createRpc() {
return new SimpleDataRequestRpc();