diff options
-rw-r--r-- | server/src/com/vaadin/server/communication/data/typed/DataProvider.java | 25 | ||||
-rw-r--r-- | server/src/com/vaadin/server/communication/data/typed/SimpleDataProvider.java | 13 |
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(); } |