From 8532ed304b73f8d90e254bd9f969d579668981fe Mon Sep 17 00:00:00 2001 From: =?utf8?q?Johannes=20Dahlstr=C3=B6m?= Date: Tue, 30 Aug 2016 15:30:13 +0300 Subject: [PATCH] Rename TypedDataGenerator to DataGenerator Also add a no-op default implementation to destroyData, making DataGenerator a functional interface. Change-Id: I546f443150da23debd4a2691003e435367469439 --- .../vaadin/server/data/DataCommunicator.java | 18 +++--- .../com/vaadin/server/data/DataGenerator.java | 57 +++++++++++++++++++ .../server/data/TypedDataGenerator.java | 49 ---------------- .../java/com/vaadin/ui/AbstractListing.java | 8 +-- server/src/main/java/com/vaadin/ui/Grid.java | 4 +- .../abstractlisting/AbstractListingTest.java | 6 +- 6 files changed, 75 insertions(+), 67 deletions(-) create mode 100644 server/src/main/java/com/vaadin/server/data/DataGenerator.java delete mode 100644 server/src/main/java/com/vaadin/server/data/TypedDataGenerator.java diff --git a/server/src/main/java/com/vaadin/server/data/DataCommunicator.java b/server/src/main/java/com/vaadin/server/data/DataCommunicator.java index 9bfc8e248f..7bf9707741 100644 --- a/server/src/main/java/com/vaadin/server/data/DataCommunicator.java +++ b/server/src/main/java/com/vaadin/server/data/DataCommunicator.java @@ -42,7 +42,7 @@ import elemental.json.JsonObject; /** * DataProvider base class. This class is the base for all DataProvider - * communication implementations. It uses {@link TypedDataGenerator}s to write + * communication implementations. It uses {@link DataGenerator}s to write * {@link JsonObject}s representing each data object to be sent to the * client-side. * @@ -81,10 +81,10 @@ public class DataCommunicator extends AbstractExtension { * {@link #addActiveData(Collection)} and {@link #cleanUp(Collection)} are * called with the same parameter. In the clean up method any dropped data * objects that are not in the given collection will be cleaned up and - * {@link TypedDataGenerator#destroyData(Object)} will be called for them. + * {@link DataGenerator#destroyData(Object)} will be called for them. */ protected class ActiveDataHandler - implements Serializable, TypedDataGenerator { + implements Serializable, DataGenerator { /** * Set of key strings for currently active data objects @@ -173,7 +173,7 @@ public class DataCommunicator extends AbstractExtension { } } - private Collection> generators = new LinkedHashSet<>(); + private Collection> generators = new LinkedHashSet<>(); private ActiveDataHandler handler = new ActiveDataHandler(); private DataSource dataSource; @@ -266,7 +266,7 @@ public class DataCommunicator extends AbstractExtension { * @param generator * the data generator to add, not null */ - public void addDataGenerator(TypedDataGenerator generator) { + public void addDataGenerator(DataGenerator generator) { Objects.requireNonNull(generator, "generator cannot be null"); generators.add(generator); } @@ -278,7 +278,7 @@ public class DataCommunicator extends AbstractExtension { * @param generator * the data generator to remove, not null */ - public void removeDataGenerator(TypedDataGenerator generator) { + public void removeDataGenerator(DataGenerator generator) { Objects.requireNonNull(generator, "generator cannot be null"); generators.remove(generator); } @@ -327,7 +327,7 @@ public class DataCommunicator extends AbstractExtension { protected JsonObject getDataObject(T data) { JsonObject dataObject = Json.createObject(); - for (TypedDataGenerator generator : generators) { + for (DataGenerator generator : generators) { generator.generateData(data, dataObject); } @@ -336,7 +336,7 @@ public class DataCommunicator extends AbstractExtension { /** * Drops data objects identified by given keys from memory. This will invoke - * {@link TypedDataGenerator#destroyData} for each of those objects. + * {@link DataGenerator#destroyData} for each of those objects. * * @param droppedKeys * collection of dropped keys @@ -348,7 +348,7 @@ public class DataCommunicator extends AbstractExtension { T data = getKeyMapper().get(key); assert data != null : "Bookkeepping failure. No data object to match key"; - for (TypedDataGenerator g : generators) { + for (DataGenerator g : generators) { g.destroyData(data); } } diff --git a/server/src/main/java/com/vaadin/server/data/DataGenerator.java b/server/src/main/java/com/vaadin/server/data/DataGenerator.java new file mode 100644 index 0000000000..8eda632167 --- /dev/null +++ b/server/src/main/java/com/vaadin/server/data/DataGenerator.java @@ -0,0 +1,57 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.server.data; + +import java.io.Serializable; + +import elemental.json.JsonObject; + +/** + * A data generator for {@link DataCommunicator}. Used to inject custom data to + * data items sent to the client for extension purposes. + * + * @author Vaadin Ltd. + * + * @param + * the data type + * + * @since + */ +@FunctionalInterface +public interface DataGenerator extends Serializable { + + /** + * Adds custom data for the given item to its serialized {@code JsonObject} + * representation. This JSON object will be sent to client-side DataSource. + * + * @param item + * the data item being serialized + * @param jsonObject + * the JSON object being sent to the client + */ + void generateData(T item, JsonObject jsonObject); + + /** + * Informs the {@code DataGenerator} that the given data item has been + * dropped and is no longer needed. This method should clean up any unneeded + * information stored for this item. + * + * @param item + * the dropped data item + */ + public default void destroyData(T item) { + } +} diff --git a/server/src/main/java/com/vaadin/server/data/TypedDataGenerator.java b/server/src/main/java/com/vaadin/server/data/TypedDataGenerator.java deleted file mode 100644 index 1303921f18..0000000000 --- a/server/src/main/java/com/vaadin/server/data/TypedDataGenerator.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2000-2016 Vaadin Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.vaadin.server.data; - -import java.io.Serializable; - -import elemental.json.JsonObject; - -/** - * Simple typed data generator for {@link DataCommunicator}. - * - * @since - */ -public interface TypedDataGenerator extends Serializable { - - /** - * Adds data for given object to {@link JsonObject}. This JsonObject will be - * sent to client-side DataSource. - * - * @param data - * data object - * @param jsonObject - * json object being sent to the client - */ - void generateData(T data, JsonObject jsonObject); - - /** - * Informs the {@link TypedDataGenerator} that given data has been dropped - * and is no longer needed. This method should clean up any unneeded - * information stored for this data. - * - * @param data - * dropped data - */ - public void destroyData(T data); -} \ No newline at end of file diff --git a/server/src/main/java/com/vaadin/ui/AbstractListing.java b/server/src/main/java/com/vaadin/ui/AbstractListing.java index 1167e64505..58117e6df8 100644 --- a/server/src/main/java/com/vaadin/ui/AbstractListing.java +++ b/server/src/main/java/com/vaadin/ui/AbstractListing.java @@ -21,8 +21,8 @@ import com.vaadin.data.Listing; import com.vaadin.data.selection.SelectionModel; import com.vaadin.server.AbstractExtension; import com.vaadin.server.data.DataCommunicator; +import com.vaadin.server.data.DataGenerator; import com.vaadin.server.data.DataSource; -import com.vaadin.server.data.TypedDataGenerator; /** * A base class for listing components. Provides common handling for fetching @@ -45,7 +45,7 @@ public abstract class AbstractListing - extends AbstractExtension implements TypedDataGenerator { + extends AbstractExtension implements DataGenerator { /** * Adds this extension to the given parent listing. @@ -154,7 +154,7 @@ public abstract class AbstractListing generator) { + protected void addDataGenerator(DataGenerator generator) { getDataCommunicator().addDataGenerator(generator); } @@ -165,7 +165,7 @@ public abstract class AbstractListing generator) { + protected void removeDataGenerator(DataGenerator generator) { getDataCommunicator().removeDataGenerator(generator); } diff --git a/server/src/main/java/com/vaadin/ui/Grid.java b/server/src/main/java/com/vaadin/ui/Grid.java index 1a30b0f3fc..47335e4462 100644 --- a/server/src/main/java/com/vaadin/ui/Grid.java +++ b/server/src/main/java/com/vaadin/ui/Grid.java @@ -36,7 +36,7 @@ import com.vaadin.server.AbstractExtension; import com.vaadin.server.KeyMapper; import com.vaadin.server.data.DataSource; import com.vaadin.server.data.SortOrder; -import com.vaadin.server.data.TypedDataGenerator; +import com.vaadin.server.data.DataGenerator; import com.vaadin.shared.MouseEventDetails; import com.vaadin.shared.data.DataCommunicatorConstants; import com.vaadin.shared.data.sort.SortDirection; @@ -301,7 +301,7 @@ public class Grid extends AbstractListing> * the column value type */ public static class Column extends AbstractExtension - implements TypedDataGenerator { + implements DataGenerator { private Function valueProvider; private Function>> sortOrderProvider; diff --git a/server/src/test/java/com/vaadin/tests/server/component/abstractlisting/AbstractListingTest.java b/server/src/test/java/com/vaadin/tests/server/component/abstractlisting/AbstractListingTest.java index 3ec889f301..f29d1dd00b 100644 --- a/server/src/test/java/com/vaadin/tests/server/component/abstractlisting/AbstractListingTest.java +++ b/server/src/test/java/com/vaadin/tests/server/component/abstractlisting/AbstractListingTest.java @@ -13,10 +13,10 @@ import org.junit.Test; import com.vaadin.data.selection.SelectionModel; import com.vaadin.server.data.BackEndDataSource; +import com.vaadin.server.data.DataGenerator; import com.vaadin.server.data.DataSource; import com.vaadin.server.data.ListDataSource; import com.vaadin.server.data.Query; -import com.vaadin.server.data.TypedDataGenerator; import com.vaadin.ui.AbstractListing; import com.vaadin.ui.AbstractListing.AbstractListingExtension; @@ -48,12 +48,12 @@ public class AbstractListingTest { } @Override - public void addDataGenerator(TypedDataGenerator generator) { + public void addDataGenerator(DataGenerator generator) { super.addDataGenerator(generator); } @Override - public void removeDataGenerator(TypedDataGenerator generator) { + public void removeDataGenerator(DataGenerator generator) { super.removeDataGenerator(generator); } -- 2.39.5