diff options
Diffstat (limited to 'server/src')
10 files changed, 89 insertions, 30 deletions
diff --git a/server/src/main/java/com/vaadin/data/BeanBinder.java b/server/src/main/java/com/vaadin/data/BeanBinder.java index 690c2eb849..56219ff6bf 100644 --- a/server/src/main/java/com/vaadin/data/BeanBinder.java +++ b/server/src/main/java/com/vaadin/data/BeanBinder.java @@ -160,7 +160,7 @@ public class BeanBinder<BEAN> extends Binder<BEAN> { * @throws IllegalArgumentException * if the property has no accessible getter * - * @see BindingBuilder#bind(SerializableFunction, + * @see BindingBuilder#bind(ValueProvider, * SerializableBiConsumer) */ public Binding<BEAN, TARGET> bind(String propertyName); @@ -361,7 +361,7 @@ public class BeanBinder<BEAN> extends Binder<BEAN> { * @throws IllegalArgumentException * if the property has no accessible getter * - * @see #bind(HasValue, SerializableFunction, SerializableBiConsumer) + * @see #bind(HasValue, ValueProvider, SerializableBiConsumer) */ public <FIELDVALUE> Binding<BEAN, FIELDVALUE> bind( HasValue<FIELDVALUE> field, String propertyName) { diff --git a/server/src/main/java/com/vaadin/data/Binder.java b/server/src/main/java/com/vaadin/data/Binder.java index 2d0ec613e0..9f496d04d2 100644 --- a/server/src/main/java/com/vaadin/data/Binder.java +++ b/server/src/main/java/com/vaadin/data/Binder.java @@ -172,7 +172,7 @@ public class Binder<BEAN> implements Serializable { * if {@code bind} has already been called on this binding */ public Binding<BEAN, TARGET> bind( - SerializableFunction<BEAN, TARGET> getter, + ValueProvider<BEAN, TARGET> getter, com.vaadin.server.SerializableBiConsumer<BEAN, TARGET> setter); /** @@ -255,7 +255,7 @@ public class Binder<BEAN> implements Serializable { * which must match the current target data type of the binding, and a * model type, which can be any data type and becomes the new target * type of the binding. When invoking - * {@link #bind(SerializableFunction, SerializableBiConsumer)}, the + * {@link #bind(ValueProvider, SerializableBiConsumer)}, the * target type of the binding must match the getter/setter types. * <p> * For instance, a {@code TextField} can be bound to an integer-typed @@ -281,7 +281,7 @@ public class Binder<BEAN> implements Serializable { * type, which must match the current target data type of the binding, * and a model type, which can be any data type and becomes the new * target type of the binding. When invoking - * {@link #bind(SerializableFunction, SerializableBiConsumer)}, the + * {@link #bind(ValueProvider, SerializableBiConsumer)}, the * target type of the binding must match the getter/setter types. * <p> * For instance, a {@code TextField} can be bound to an integer-typed @@ -316,7 +316,7 @@ public class Binder<BEAN> implements Serializable { * type, which must match the current target data type of the binding, * and a model type, which can be any data type and becomes the new * target type of the binding. When invoking - * {@link #bind(SerializableFunction, SerializableBiConsumer)}, the + * {@link #bind(ValueProvider, SerializableBiConsumer)}, the * target type of the binding must match the getter/setter types. * <p> * For instance, a {@code TextField} can be bound to an integer-typed @@ -533,7 +533,7 @@ public class Binder<BEAN> implements Serializable { @Override public Binding<BEAN, TARGET> bind( - SerializableFunction<BEAN, TARGET> getter, + ValueProvider<BEAN, TARGET> getter, SerializableBiConsumer<BEAN, TARGET> setter) { checkUnbound(); Objects.requireNonNull(getter, "getter cannot be null"); @@ -976,7 +976,7 @@ public class Binder<BEAN> implements Serializable { /** * Creates a new binding for the given field. The returned builder may be * further configured before invoking - * {@link BindingBuilder#bind(SerializableFunction, SerializableBiConsumer)} + * {@link BindingBuilder#bind(ValueProvider, SerializableBiConsumer)} * which completes the binding. Until {@code Binding.bind} is called, the * binding has no effect. * <p> @@ -993,7 +993,7 @@ public class Binder<BEAN> implements Serializable { * the field to be bound, not null * @return the new binding * - * @see #bind(HasValue, SerializableFunction, SerializableBiConsumer) + * @see #bind(HasValue, ValueProvider, SerializableBiConsumer) */ public <FIELDVALUE> BindingBuilder<BEAN, FIELDVALUE> forField( HasValue<FIELDVALUE> field) { @@ -1060,7 +1060,7 @@ public class Binder<BEAN> implements Serializable { */ public <FIELDVALUE> Binding<BEAN, FIELDVALUE> bind( HasValue<FIELDVALUE> field, - SerializableFunction<BEAN, FIELDVALUE> getter, + ValueProvider<BEAN, FIELDVALUE> getter, SerializableBiConsumer<BEAN, FIELDVALUE> setter) { return forField(field).bind(getter, setter); } @@ -1473,7 +1473,7 @@ public class Binder<BEAN> implements Serializable { * <li>{@link #setBean(Object)} is called * <li>{@link #removeBean()} is called * <li> - * {@link BindingBuilder#bind(SerializableFunction, SerializableBiConsumer)} + * {@link BindingBuilder#bind(ValueProvider, SerializableBiConsumer)} * is called * <li>{@link Binder#validate()} or {@link Binding#validate()} is called * </ul> diff --git a/server/src/main/java/com/vaadin/data/HasValue.java b/server/src/main/java/com/vaadin/data/HasValue.java index fe5820839c..22cc1c30bc 100644 --- a/server/src/main/java/com/vaadin/data/HasValue.java +++ b/server/src/main/java/com/vaadin/data/HasValue.java @@ -200,7 +200,7 @@ public interface HasValue<V> extends Serializable { * values. Specific implementations might not support this. * * @return empty value - * @see Binder#bind(HasValue, java.util.function.Function, BiConsumer) + * @see Binder#bind(HasValue, ValueProvider, BiConsumer) */ public default V getEmptyValue() { return null; diff --git a/server/src/main/java/com/vaadin/data/StatusChangeEvent.java b/server/src/main/java/com/vaadin/data/StatusChangeEvent.java index ded3ed7955..2c4e87d897 100644 --- a/server/src/main/java/com/vaadin/data/StatusChangeEvent.java +++ b/server/src/main/java/com/vaadin/data/StatusChangeEvent.java @@ -20,7 +20,6 @@ import java.util.EventObject; import com.vaadin.data.Binder.Binding; import com.vaadin.data.Binder.BindingBuilder; import com.vaadin.server.SerializableBiConsumer; -import com.vaadin.server.SerializableFunction; /** * Binder status change event. @@ -33,7 +32,7 @@ import com.vaadin.server.SerializableFunction; * <li>{@link Binder#readBean(Object)} is called * <li>{@link Binder#setBean(Object)} is called * <li>{@link Binder#removeBean()} is called - * <li>{@link BindingBuilder#bind(SerializableFunction, SerializableBiConsumer)} + * <li>{@link BindingBuilder#bind(ValueProvider, SerializableBiConsumer)} * is called * <li>{@link Binder#validate()} or {@link Binding#validate()} is called * </ul> diff --git a/server/src/main/java/com/vaadin/data/ValueProvider.java b/server/src/main/java/com/vaadin/data/ValueProvider.java new file mode 100644 index 0000000000..9e4acc466f --- /dev/null +++ b/server/src/main/java/com/vaadin/data/ValueProvider.java @@ -0,0 +1,59 @@ +/* + * 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.data; + +import com.vaadin.server.SerializableFunction; + +/** + * A callback interface for providing values from a given source. + * <p> + * For example this interface can be implemented to simply extract a value with + * a getter, or to create a composite value based on the fields of the source + * object. + * + * @author Vaadin Ltd. + * @since 8.0 + * + * @param <SOURCE> + * the type of the object used to provide the value + * @param <TARGET> + * the type of the provided value + */ +@FunctionalInterface +public interface ValueProvider<SOURCE, TARGET> + extends SerializableFunction<SOURCE, TARGET> { + + /** + * Returns a value provider that always returns its input argument. + * + * @param <T> + * the type of the input and output objects to the function + * @return a function that always returns its input argument + */ + public static <T> ValueProvider<T, T> identity() { + return t -> t; + } + + /** + * Provides a value from the given source object. + * + * @param source + * the source to retrieve the value from + * @return the value provided by the source + */ + @Override + public TARGET apply(SOURCE source); +} diff --git a/server/src/main/java/com/vaadin/ui/DeclarativeValueProvider.java b/server/src/main/java/com/vaadin/ui/DeclarativeValueProvider.java index 9e2975b637..e769e7fd94 100644 --- a/server/src/main/java/com/vaadin/ui/DeclarativeValueProvider.java +++ b/server/src/main/java/com/vaadin/ui/DeclarativeValueProvider.java @@ -18,7 +18,7 @@ package com.vaadin.ui; import java.util.IdentityHashMap; import java.util.Map; -import com.vaadin.server.SerializableFunction; +import com.vaadin.data.ValueProvider; /** * Value provider class for declarative support. @@ -28,7 +28,7 @@ import com.vaadin.server.SerializableFunction; * @param <T> * item type */ -class DeclarativeValueProvider<T> implements SerializableFunction<T, String> { +class DeclarativeValueProvider<T> implements ValueProvider<T, String> { private final Map<T, String> values = new IdentityHashMap<>(); diff --git a/server/src/main/java/com/vaadin/ui/Grid.java b/server/src/main/java/com/vaadin/ui/Grid.java index f528221e48..e8c621d877 100644 --- a/server/src/main/java/com/vaadin/ui/Grid.java +++ b/server/src/main/java/com/vaadin/ui/Grid.java @@ -47,6 +47,7 @@ import com.vaadin.data.Binder; import com.vaadin.data.BinderValidationStatus; import com.vaadin.data.Listing; import com.vaadin.data.SelectionModel; +import com.vaadin.data.ValueProvider; import com.vaadin.event.ConnectorEvent; import com.vaadin.event.ContextClickEvent; import com.vaadin.event.SerializableEventListener; @@ -1005,7 +1006,7 @@ public class Grid<T> extends AbstractListing<T> * the type of value */ protected Column(String caption, - SerializableFunction<T, ? extends V> valueProvider, + ValueProvider<T, ? extends V> valueProvider, Renderer<V> renderer) { Objects.requireNonNull(caption, "Header caption can't be null"); Objects.requireNonNull(valueProvider, @@ -2448,7 +2449,7 @@ public class Grid<T> extends AbstractListing<T> * @see AbstractRenderer */ public <V> Column<T, V> addColumn(String identifier, - SerializableFunction<T, ? extends V> valueProvider, + ValueProvider<T, ? extends V> valueProvider, AbstractRenderer<? super T, V> renderer) throws IllegalArgumentException { if (columnKeys.containsKey(identifier)) { @@ -2477,7 +2478,7 @@ public class Grid<T> extends AbstractListing<T> * if the same identifier is used for multiple columns */ public Column<T, String> addColumn(String identifier, - SerializableFunction<T, String> valueProvider) { + ValueProvider<T, String> valueProvider) { return addColumn(identifier, valueProvider, new TextRenderer()); } @@ -2494,7 +2495,7 @@ public class Grid<T> extends AbstractListing<T> * @return the new column */ public Column<T, String> addColumn( - SerializableFunction<T, ?> valueProvider) { + ValueProvider<T, String> valueProvider) { return addColumn(getGeneratedIdentifier(), t -> String.valueOf(valueProvider.apply(t)), new TextRenderer()); @@ -2516,7 +2517,7 @@ public class Grid<T> extends AbstractListing<T> * @see AbstractRenderer */ public <V> Column<T, V> addColumn( - SerializableFunction<T, ? extends V> valueProvider, + ValueProvider<T, ? extends V> valueProvider, AbstractRenderer<? super T, V> renderer) { return addColumn(getGeneratedIdentifier(), valueProvider, renderer); } diff --git a/server/src/test/java/com/vaadin/tests/server/component/grid/GridDefaultHeaderTest.java b/server/src/test/java/com/vaadin/tests/server/component/grid/GridDefaultHeaderTest.java index 0d677a8f04..b2ce1abd2f 100644 --- a/server/src/test/java/com/vaadin/tests/server/component/grid/GridDefaultHeaderTest.java +++ b/server/src/test/java/com/vaadin/tests/server/component/grid/GridDefaultHeaderTest.java @@ -22,7 +22,7 @@ import static org.junit.Assert.assertSame; import org.junit.Before; import org.junit.Test; -import com.vaadin.server.SerializableFunction; +import com.vaadin.data.ValueProvider; import com.vaadin.ui.Grid; import com.vaadin.ui.Grid.Column; import com.vaadin.ui.Grid.HeaderRow; @@ -35,8 +35,8 @@ public class GridDefaultHeaderTest { public void setUp() { grid = new Grid<>(); - column1 = grid.addColumn("First", SerializableFunction.identity()); - column2 = grid.addColumn("Second", SerializableFunction.identity()); + column1 = grid.addColumn("First", ValueProvider.identity()); + column2 = grid.addColumn("Second", ValueProvider.identity()); } @Test diff --git a/server/src/test/java/com/vaadin/tests/server/component/grid/GridHeaderFooterTest.java b/server/src/test/java/com/vaadin/tests/server/component/grid/GridHeaderFooterTest.java index 1309297e36..055d4712cc 100644 --- a/server/src/test/java/com/vaadin/tests/server/component/grid/GridHeaderFooterTest.java +++ b/server/src/test/java/com/vaadin/tests/server/component/grid/GridHeaderFooterTest.java @@ -23,7 +23,7 @@ import static org.junit.Assert.fail; import org.junit.Before; import org.junit.Test; -import com.vaadin.server.SerializableFunction; +import com.vaadin.data.ValueProvider; import com.vaadin.ui.Grid; import com.vaadin.ui.Grid.Column; import com.vaadin.ui.Grid.HeaderRow; @@ -140,7 +140,7 @@ public class GridHeaderFooterTest { @Test public void addColumn_headerCellAdded() { Column<?, ?> column = grid.addColumn("Col", - SerializableFunction.identity()); + ValueProvider.identity()); assertNotNull(grid.getHeaderRow(0).getCell(column)); } @@ -148,7 +148,7 @@ public class GridHeaderFooterTest { @Test(expected = IllegalArgumentException.class) public void removeColumn_headerCellRemoved() { Column<String, ?> column = grid.addColumn("Col", - SerializableFunction.identity()); + ValueProvider.identity()); grid.removeColumn(column); grid.getHeaderRow(0).getCell(column); diff --git a/server/src/test/java/com/vaadin/tests/server/component/grid/GridTest.java b/server/src/test/java/com/vaadin/tests/server/component/grid/GridTest.java index d477a731cf..56e8ad29f3 100644 --- a/server/src/test/java/com/vaadin/tests/server/component/grid/GridTest.java +++ b/server/src/test/java/com/vaadin/tests/server/component/grid/GridTest.java @@ -11,8 +11,8 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import com.vaadin.data.ValueProvider; import com.vaadin.event.selection.SelectionEvent; -import com.vaadin.server.SerializableFunction; import com.vaadin.shared.ui.grid.HeightMode; import com.vaadin.ui.Grid; import com.vaadin.ui.Grid.SelectionMode; @@ -25,9 +25,9 @@ public class GridTest { @Before public void setUp() { grid = new Grid<>(); - grid.addColumn("foo", SerializableFunction.identity()); + grid.addColumn("foo", ValueProvider.identity()); grid.addColumn(String::length, new NumberRenderer()); - grid.addColumn("randomColumnId", SerializableFunction.identity()); + grid.addColumn("randomColumnId", ValueProvider.identity()); } @Test |