aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/main/java/com/vaadin
diff options
context:
space:
mode:
authorDenis Anisimov <denis@vaadin.com>2016-10-20 08:27:11 +0000
committerVaadin Code Review <review@vaadin.com>2016-10-20 08:43:41 +0000
commit1c11016e7a5b3528001b9ddab513a9d2a94012bc (patch)
tree5a443a8295238289ce5459471c4879fd7dae3e09 /server/src/main/java/com/vaadin
parent4e33a308d3fd24747e4c16094a0f60b75f60a2a8 (diff)
downloadvaadin-framework-1c11016e7a5b3528001b9ddab513a9d2a94012bc.tar.gz
vaadin-framework-1c11016e7a5b3528001b9ddab513a9d2a94012bc.zip
Revert "Initial support for null representations in Binder"
This reverts commit 9f672890c143098b266ede6397e89379a38cc098. Change-Id: I0952a7f9c7efc8a5d7de9987277b835d92d52b39
Diffstat (limited to 'server/src/main/java/com/vaadin')
-rw-r--r--server/src/main/java/com/vaadin/data/BeanBinder.java7
-rw-r--r--server/src/main/java/com/vaadin/data/Binder.java54
-rw-r--r--server/src/main/java/com/vaadin/data/HasValue.java32
-rw-r--r--server/src/main/java/com/vaadin/ui/AbstractTextField.java23
4 files changed, 30 insertions, 86 deletions
diff --git a/server/src/main/java/com/vaadin/data/BeanBinder.java b/server/src/main/java/com/vaadin/data/BeanBinder.java
index 4af38f7862..c73b89de81 100644
--- a/server/src/main/java/com/vaadin/data/BeanBinder.java
+++ b/server/src/main/java/com/vaadin/data/BeanBinder.java
@@ -269,11 +269,8 @@ public class BeanBinder<BEAN> extends Binder<BEAN> {
@Override
public <FIELDVALUE> BeanBinding<BEAN, FIELDVALUE, FIELDVALUE> forField(
HasValue<FIELDVALUE> field) {
- BeanBindingImpl<BEAN, FIELDVALUE, FIELDVALUE> binding = createBinding(
- field, Converter.identity(), this::handleValidationStatus);
- return binding.withConverter(fieldValue -> fieldValue,
- modelValue -> modelValue != null ? modelValue
- : field.getEmptyValue());
+ return createBinding(field, Converter.identity(),
+ this::handleValidationStatus);
}
@Override
diff --git a/server/src/main/java/com/vaadin/data/Binder.java b/server/src/main/java/com/vaadin/data/Binder.java
index 8603ed9946..df29f8d480 100644
--- a/server/src/main/java/com/vaadin/data/Binder.java
+++ b/server/src/main/java/com/vaadin/data/Binder.java
@@ -282,23 +282,6 @@ public class Binder<BEAN> implements Serializable {
}
/**
- * Maps binding value {@code null} to given null representation and back
- * to {@code null} when converting back to model value.
- *
- * @param nullRepresentation
- * the value to use instead of {@code null}
- * @return a new binding with null representation handling.
- */
- public default Binding<BEAN, FIELDVALUE, TARGET> withNullRepresentation(
- TARGET nullRepresentation) {
- return withConverter(
- fieldValue -> Objects.equals(fieldValue, nullRepresentation)
- ? null : fieldValue,
- modelValue -> Objects.equals(modelValue, null)
- ? nullRepresentation : modelValue);
- }
-
- /**
* Gets the field the binding uses.
*
* @return the field for the binding
@@ -634,6 +617,10 @@ public class Binder<BEAN> implements Serializable {
return validationStatus;
}
+ private void setBeanValue(BEAN bean, TARGET value) {
+ setter.accept(bean, value);
+ }
+
private void notifyStatusHandler(ValidationStatus<?> status) {
statusHandler.accept(status);
}
@@ -709,13 +696,6 @@ public class Binder<BEAN> implements Serializable {
* {@link Binding#bind(Function, BiConsumer) Binding.bind} which completes
* the binding. Until {@code Binding.bind} is called, the binding has no
* effect.
- * <p>
- * <strong>Note:</strong> Not all {@link HasValue} implementations support
- * passing {@code null} as the value. For these the Binder will
- * automatically change {@code null} to a null representation provided by
- * {@link HasValue#getEmptyValue()}. This conversion is one-way only, if you
- * want to have a two-way mapping back to {@code null}, use
- * {@link Binding#withNullRepresentation(Object))}.
*
* @param <FIELDVALUE>
* the value type of the field
@@ -732,12 +712,8 @@ public class Binder<BEAN> implements Serializable {
clearError(field);
getStatusLabel().ifPresent(label -> label.setValue(""));
- BindingImpl<BEAN, FIELDVALUE, FIELDVALUE> createBinding = createBinding(
- field, Converter.identity(), this::handleValidationStatus);
-
- return createBinding.withConverter(fieldValue -> fieldValue,
- modelValue -> modelValue != null ? modelValue
- : field.getEmptyValue());
+ return createBinding(field, Converter.identity(),
+ this::handleValidationStatus);
}
/**
@@ -826,14 +802,6 @@ public class Binder<BEAN> implements Serializable {
* Use the {@link #forField(HasValue)} overload instead if you want to
* further configure the new binding.
* <p>
- * <strong>Note:</strong> Not all {@link HasValue} implementations support
- * passing {@code null} as the value. For these the Binder will
- * automatically change {@code null} to a null representation provided by
- * {@link HasValue#getEmptyValue()}. This conversion is one-way only, if you
- * want to have a two-way mapping back to {@code null}, use
- * {@link #forField(HasValue)} and
- * {@link Binding#withNullRepresentation(Object))}.
- * <p>
* When a bean is bound with {@link Binder#bind(BEAN)}, the field value is
* set to the return value of the given getter. The property value is then
* updated via the given setter whenever the field value changes. The setter
@@ -954,7 +922,7 @@ public class Binder<BEAN> implements Serializable {
* <pre>
* class Feature {
* public enum Browser { CHROME, EDGE, FIREFOX, IE, OPERA, SAFARI }
-
+
* public Set&lt;Browser> getSupportedBrowsers() { ... }
* public void setSupportedBrowsers(Set&lt;Browser> title) { ... }
* }
@@ -1122,8 +1090,8 @@ public class Binder<BEAN> implements Serializable {
// Save old bean values so we can restore them if validators fail
Map<Binding<BEAN, ?, ?>, Object> oldValues = new HashMap<>();
- bindings.forEach(
- binding -> oldValues.put(binding, binding.getter.apply(bean)));
+ bindings.forEach(binding -> oldValues.put(binding,
+ binding.convertDataToFieldType(bean)));
bindings.forEach(binding -> binding.storeFieldValue(bean));
// Now run bean level validation against the updated bean
@@ -1132,8 +1100,8 @@ public class Binder<BEAN> implements Serializable {
.findAny().isPresent();
if (hasErrors) {
// Bean validator failed, revert values
- bindings.forEach((BindingImpl binding) -> binding.setter
- .accept(bean, oldValues.get(binding)));
+ bindings.forEach((BindingImpl binding) -> binding.setBeanValue(bean,
+ oldValues.get(binding)));
} else {
// Save successful, reset hasChanges to false
setHasChanges(false);
diff --git a/server/src/main/java/com/vaadin/data/HasValue.java b/server/src/main/java/com/vaadin/data/HasValue.java
index 26fd345d91..8333c8a02a 100644
--- a/server/src/main/java/com/vaadin/data/HasValue.java
+++ b/server/src/main/java/com/vaadin/data/HasValue.java
@@ -17,9 +17,6 @@ package com.vaadin.data;
import java.io.Serializable;
import java.lang.reflect.Method;
-import java.util.Objects;
-import java.util.function.BiConsumer;
-import java.util.function.Function;
import com.vaadin.event.ConnectorEvent;
import com.vaadin.event.EventListener;
@@ -119,8 +116,8 @@ public interface HasValue<V> extends Serializable {
* @see Registration
*/
@FunctionalInterface
- public interface ValueChangeListener<V>
- extends EventListener<ValueChange<V>> {
+ public interface ValueChangeListener<V> extends
+ EventListener<ValueChange<V>> {
@Deprecated
public static final Method VALUE_CHANGE_METHOD = ReflectTools
@@ -173,29 +170,4 @@ public interface HasValue<V> extends Serializable {
*/
public Registration addValueChangeListener(
ValueChangeListener<? super V> listener);
-
- /**
- * Returns the value that represents an empty value.
- * <p>
- * By default {@link HasValue} is expected to support {@code null} as empty
- * values. Specific implementations might not support this.
- *
- * @return empty value
- * @see Binder#bind(HasValue, Function, BiConsumer)
- */
- public default V getEmptyValue() {
- return null;
- }
-
- /**
- * Returns whether this {@code HasValue} is considered to be empty.
- * <p>
- * By default this is an equality check between current value and empty
- * value.
- *
- * @return {@code true} if considered empty; {@code false} if not
- */
- public default boolean isEmpty() {
- return Objects.equals(getValue(), getEmptyValue());
- }
}
diff --git a/server/src/main/java/com/vaadin/ui/AbstractTextField.java b/server/src/main/java/com/vaadin/ui/AbstractTextField.java
index 9c2720efd8..b5119ec92c 100644
--- a/server/src/main/java/com/vaadin/ui/AbstractTextField.java
+++ b/server/src/main/java/com/vaadin/ui/AbstractTextField.java
@@ -17,7 +17,6 @@
package com.vaadin.ui;
import java.util.Collection;
-import java.util.Objects;
import org.jsoup.nodes.Attributes;
import org.jsoup.nodes.Element;
@@ -81,8 +80,11 @@ public abstract class AbstractTextField extends AbstractField<String>
@Override
public void setValue(String value) {
- Objects.requireNonNull(value, "Null value not supported");
- setValue(value, false);
+ if (value == null) {
+ setValue("", false);
+ } else {
+ setValue(value, false);
+ }
}
/**
@@ -268,6 +270,16 @@ public abstract class AbstractTextField extends AbstractField<String>
setValue("");
}
+ /**
+ * Checks if the field is empty.
+ *
+ * @return <code>true</code> if the field value is an empty string,
+ * <code>false</code> otherwise
+ */
+ public boolean isEmpty() {
+ return "".equals(getValue());
+ }
+
@Override
public void writeDesign(Element design, DesignContext designContext) {
super.writeDesign(design, designContext);
@@ -287,9 +299,4 @@ public abstract class AbstractTextField extends AbstractField<String>
customAttributes.add("cursor-position");
return customAttributes;
}
-
- @Override
- public String getEmptyValue() {
- return "";
- }
}