aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/src/com/vaadin/server/communication/data/typed/DataProvider.java25
-rw-r--r--server/src/com/vaadin/server/communication/data/typed/SimpleDataProvider.java13
2 files changed, 27 insertions, 11 deletions
diff --git a/server/src/com/vaadin/server/communication/data/typed/DataProvider.java b/server/src/com/vaadin/server/communication/data/typed/DataProvider.java
index 2c45c52ed5..320c1b60b7 100644
--- a/server/src/com/vaadin/server/communication/data/typed/DataProvider.java
+++ b/server/src/com/vaadin/server/communication/data/typed/DataProvider.java
@@ -181,6 +181,7 @@ public abstract class DataProvider<T> extends AbstractExtension {
protected DataSource<T> dataSource;
private DataChangeHandler<T> dataChangeHandler;
private DetachListener detachListener;
+ private DataKeyMapper<T> keyMapper;
protected DataProvider(DataSource<T> dataSource) {
addDataGenerator(handler);
@@ -189,6 +190,7 @@ public abstract class DataProvider<T> extends AbstractExtension {
registerRpc(createRpc());
dataChangeHandler = createDataChangeHandler();
this.dataSource.addDataChangeHandler(dataChangeHandler);
+ keyMapper = createKeyMapper();
}
@Override
@@ -238,6 +240,17 @@ public abstract class DataProvider<T> extends AbstractExtension {
}
/**
+ * 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.
*
* @param firstIndex
@@ -313,14 +326,18 @@ public abstract class DataProvider<T> extends AbstractExtension {
}
/**
- * 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
*/
@@ -328,6 +345,8 @@ public abstract class DataProvider<T> extends AbstractExtension {
/**
* Creates a {@link DataChangeHandler} to use with the {@link DataSource}.
+ * <p>
+ * This method is called from the constructor.
*
* @return data change handler
*/
diff --git a/server/src/com/vaadin/server/communication/data/typed/SimpleDataProvider.java b/server/src/com/vaadin/server/communication/data/typed/SimpleDataProvider.java
index c82ed119e5..2d40730530 100644
--- a/server/src/com/vaadin/server/communication/data/typed/SimpleDataProvider.java
+++ b/server/src/com/vaadin/server/communication/data/typed/SimpleDataProvider.java
@@ -65,9 +65,6 @@ public class SimpleDataProvider<T> extends DataProvider<T> {
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.
*
@@ -105,11 +102,6 @@ public class SimpleDataProvider<T> extends DataProvider<T> {
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.
@@ -161,6 +153,11 @@ public class SimpleDataProvider<T> extends DataProvider<T> {
}
@Override
+ protected DataKeyMapper<T> createKeyMapper() {
+ return new KeyMapper<T>();
+ }
+
+ @Override
protected DataRequestRpc createRpc() {
return new SimpleDataRequestRpc();
}