Change-Id: I0000c1caf7c129634473161fe4876931f3c8dabftags/8.0.0.alpha6
@@ -80,6 +80,7 @@ public interface HasValue<V> extends Serializable { | |||
* {@code true} if this event originates from the client, | |||
* {@code false} otherwise. | |||
*/ | |||
public ValueChangeEvent(Component component, HasValue<V> hasValue, | |||
boolean userOriginated) { | |||
super(hasValue); | |||
@@ -141,7 +142,6 @@ public interface HasValue<V> extends Serializable { | |||
@FunctionalInterface | |||
public interface ValueChangeListener<V> | |||
extends Consumer<ValueChangeEvent<V>>, Serializable { | |||
@Deprecated | |||
public static final Method VALUE_CHANGE_METHOD = ReflectTools | |||
.findMethod(ValueChangeListener.class, "accept", |
@@ -164,10 +164,12 @@ public abstract class AbstractColorPicker extends AbstractField<Color> { | |||
/** | |||
* Sets the selected color of this color picker. If the new color is not | |||
* equal to getValue(), fires a value change event. | |||
* equal to getValue(), fires a {@link ValueChangeEvent}. | |||
* | |||
* @param color | |||
* the new selected color, not null | |||
* @throws NullPointerException | |||
* if {@code color} is {@code null} | |||
*/ | |||
@Override | |||
public void setValue(Color color) { |
@@ -484,6 +484,13 @@ public abstract class AbstractDateField extends AbstractField<LocalDate> | |||
return value; | |||
} | |||
/** | |||
* Sets the value of this object. If the new value is not equal to | |||
* {@code getValue()}, fires a {@link ValueChangeEvent} . | |||
* | |||
* @param value | |||
* the new value, may be {@code null} | |||
*/ | |||
@Override | |||
public void setValue(LocalDate value) { | |||
/* |
@@ -52,8 +52,8 @@ public abstract class AbstractField<T> extends AbstractComponent | |||
implements HasValue<T>, HasRequired, Focusable { | |||
@Deprecated | |||
private static final Method VALUE_CHANGE_METHOD = ReflectTools | |||
.findMethod(ValueChangeListener.class, "accept", ValueChangeEvent.class); | |||
private static final Method VALUE_CHANGE_METHOD = ReflectTools.findMethod( | |||
ValueChangeListener.class, "accept", ValueChangeEvent.class); | |||
@Override | |||
public void setValue(T value) { |
@@ -366,7 +366,7 @@ public abstract class AbstractMultiSelect<T> | |||
* | |||
* @param value | |||
* the items to select, not {@code null} | |||
* @throws IllegalArgumentException | |||
* @throws NullPointerException | |||
* if the value is invalid | |||
*/ | |||
@Override |
@@ -79,9 +79,19 @@ public abstract class AbstractTextField extends AbstractField<String> | |||
registerRpc(new AbstractTextFieldFocusAndBlurRpcImpl()); | |||
} | |||
/** | |||
* Sets the value of this text field. If the new value is not equal to | |||
* {@code getValue()}, fires a {@link ValueChangeEvent}. Throws | |||
* {@code NullPointerException} if the value is not null. | |||
* | |||
* @param value | |||
* the new value, not {@code null} | |||
* @throws NullPointerException | |||
* if {@code value} is {@code null} | |||
*/ | |||
@Override | |||
public void setValue(String value) { | |||
Objects.requireNonNull(value, "Null value not supported"); | |||
Objects.requireNonNull(value, "value cannot be null"); | |||
setValue(value, false); | |||
} | |||
@@ -17,6 +17,7 @@ | |||
package com.vaadin.ui; | |||
import java.util.Collection; | |||
import java.util.Objects; | |||
import org.jsoup.nodes.Attributes; | |||
import org.jsoup.nodes.Element; | |||
@@ -115,21 +116,18 @@ public class CheckBox extends AbstractField<Boolean> | |||
} | |||
/** | |||
* Sets the value of this ComboBox. If the new value is not equal to | |||
* {@code getValue()}, fires a value change event. Throws | |||
* {@code IllegalArgumentException} if the value is null. | |||
* Sets the value of this CheckBox. If the new value is not equal to | |||
* {@code getValue()}, fires a {@link ValueChangeEvent}. Throws | |||
* {@code NullPointerException} if the value is null. | |||
* | |||
* @param value | |||
* the new value | |||
* @throws IllegalArgumentException | |||
* if the value is null | |||
* the new value, not {@code null} | |||
* @throws NullPointerException | |||
* if {@code value} is {@code null} | |||
*/ | |||
@Override | |||
public void setValue(Boolean value) { | |||
if (value == null) { | |||
throw new IllegalArgumentException( | |||
"CheckBox value must not be null"); | |||
} | |||
Objects.requireNonNull(value, "CheckBox value must not be null"); | |||
super.setValue(value); | |||
} | |||
@@ -548,6 +548,13 @@ public class ComboBox<T> extends AbstractSingleSelect<T> implements HasValue<T>, | |||
this.filter = filter; | |||
} | |||
/** | |||
* Sets the value of this object. If the new value is not equal to | |||
* {@code getValue()}, fires a {@link ValueChangeEvent}. | |||
* | |||
* @param value | |||
* the new value, may be {@code null} | |||
*/ | |||
@Override | |||
public void setValue(T value) { | |||
getSelectionModel().setSelectedFromServer(value); |
@@ -16,6 +16,8 @@ | |||
package com.vaadin.ui; | |||
import java.util.Objects; | |||
import org.jsoup.nodes.Element; | |||
import com.vaadin.shared.ui.ValueChangeMode; | |||
@@ -100,13 +102,20 @@ public class RichTextArea extends AbstractField<String> | |||
return (RichTextAreaState) super.getState(markAsDirty); | |||
} | |||
/** | |||
* Sets the value of this object. If the new value is not equal to | |||
* {@code getValue()}, fires a {@link ValueChangeEvent}. Throws | |||
* {@code NullPointerException} if the value is null. | |||
* | |||
* @param value | |||
* the new value, not {@code null} | |||
* @throws NullPointerException | |||
* if {@code value} is {@code null} | |||
*/ | |||
@Override | |||
public void setValue(String value) { | |||
if (value == null) { | |||
setValue("", false); | |||
} else { | |||
setValue(value, false); | |||
} | |||
Objects.requireNonNull(value, "value cannot be null"); | |||
setValue(value, false); | |||
} | |||
@Override |
@@ -17,6 +17,7 @@ | |||
package com.vaadin.ui; | |||
import java.util.Collection; | |||
import java.util.Objects; | |||
import org.jsoup.nodes.Attributes; | |||
import org.jsoup.nodes.Element; | |||
@@ -289,6 +290,22 @@ public class Slider extends AbstractField<Double> { | |||
getState().value = trimmedValue; | |||
} | |||
/** | |||
* Sets the value of this object. If the new value is not equal to | |||
* {@code getValue()}, fires a {@link ValueChangeEvent}. Throws | |||
* {@code NullPointerException} if the value is null. | |||
* | |||
* @param value | |||
* the new value, not {@code null} | |||
* @throws NullPointerException | |||
* if {@code value} is {@code null} | |||
*/ | |||
@Override | |||
public void setValue(Double value) { | |||
Objects.requireNonNull(value, "color cannot be null"); | |||
super.setValue(value); | |||
} | |||
@Override | |||
public Double getValue() { | |||
return getState().value; |
@@ -15,6 +15,8 @@ | |||
*/ | |||
package com.vaadin.ui.components.colorpicker; | |||
import java.util.Objects; | |||
import com.vaadin.shared.ui.colorpicker.Color; | |||
import com.vaadin.shared.ui.colorpicker.ColorPickerGradientServerRpc; | |||
import com.vaadin.shared.ui.colorpicker.ColorPickerGradientState; | |||
@@ -64,6 +66,22 @@ public class ColorPickerGradient extends AbstractField<Color> { | |||
this.converter = converter; | |||
} | |||
/** | |||
* Sets the value of this object. If the new value is not equal to | |||
* {@code getValue()}, fires a {@link ValueChangeEvent}. Throws | |||
* {@code NullPointerException} if the value is null. | |||
* | |||
* @param color | |||
* the new color, not {@code null} | |||
* @throws NullPointerException | |||
* if {@code color} is {@code null} | |||
*/ | |||
@Override | |||
public void setValue(Color color) { | |||
Objects.requireNonNull(color, "value must not be null"); | |||
super.setValue(color); | |||
} | |||
@Override | |||
public Color getValue() { | |||
return color; |
@@ -18,6 +18,7 @@ package com.vaadin.ui.components.colorpicker; | |||
import java.awt.Point; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
import java.util.Objects; | |||
import com.vaadin.shared.ui.colorpicker.Color; | |||
import com.vaadin.shared.ui.colorpicker.ColorPickerGridServerRpc; | |||
@@ -174,6 +175,22 @@ public class ColorPickerGrid extends AbstractField<Color> { | |||
return new int[] { x, y }; | |||
} | |||
/** | |||
* Sets the value of this object. If the new value is not equal to | |||
* {@code getValue()}, fires a {@link ValueChangeEvent}. Throws | |||
* {@code NullPointerException} if the value is null. | |||
* | |||
* @param color | |||
* the new value, not {@code null} | |||
* @throws NullPointerException | |||
* if {@code color} is {@code null} | |||
*/ | |||
@Override | |||
public void setValue(Color color) { | |||
Objects.requireNonNull(color, "value cannot be null"); | |||
super.setValue(color); | |||
} | |||
@Override | |||
public Color getValue() { | |||
return colorGrid[x][y]; |
@@ -458,11 +458,19 @@ public class ColorPickerPopup extends Window implements HasValue<Color> { | |||
return history; | |||
} | |||
/** | |||
* Sets the value of this object. If the new value is not equal to | |||
* {@code getValue()}, fires a {@link ValueChangeEvent}. Throws | |||
* {@code NullPointerException} if the value is null. | |||
* | |||
* @param color | |||
* the new value, not {@code null} | |||
* @throws NullPointerException | |||
* if {@code color} is {@code null} | |||
*/ | |||
@Override | |||
public void setValue(Color color) { | |||
if (color == null) { | |||
return; | |||
} | |||
Objects.requireNonNull(color, "color cannot be null"); | |||
selectedColor = color; | |||
@@ -63,8 +63,19 @@ public class ColorPickerPreview extends CssLayout implements HasValue<Color> { | |||
setValue(color); | |||
} | |||
/** | |||
* Sets the value of this object. If the new value is not equal to | |||
* {@code getValue()}, fires a {@link ValueChangeEvent}. Throws | |||
* {@code NullPointerException} if the value is null. | |||
* | |||
* @param color | |||
* the new value, not {@code null} | |||
* @throws NullPointerException | |||
* if {@code color} is {@code null} | |||
*/ | |||
@Override | |||
public void setValue(Color color) { | |||
Objects.requireNonNull(color, "color cannot be null"); | |||
this.color = color; | |||
// Unregister listener | |||
@@ -160,7 +171,8 @@ public class ColorPickerPreview extends CssLayout implements HasValue<Color> { | |||
} | |||
oldValue = value; | |||
fireEvent(new ValueChangeEvent<>(this, event.isUserOriginated())); | |||
fireEvent( | |||
new ValueChangeEvent<>(this, event.isUserOriginated())); | |||
} | |||
} catch (NumberFormatException nfe) { |
@@ -0,0 +1,36 @@ | |||
/* | |||
* 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.tests.server.component.abstracttextfield; | |||
import org.junit.Test; | |||
import org.mockito.Mockito; | |||
import com.vaadin.ui.AbstractTextField; | |||
/** | |||
* @author Vaadin Ltd | |||
* | |||
*/ | |||
public class AbstractTextFieldTest { | |||
@Test(expected = NullPointerException.class) | |||
public void setValue_nullValue_throwsNPE() { | |||
AbstractTextField field = Mockito.mock(AbstractTextField.class); | |||
Mockito.doCallRealMethod().when(field).setValue(null); | |||
field.setValue(null); | |||
} | |||
} |
@@ -0,0 +1,36 @@ | |||
/* | |||
* 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.tests.server.component.colorpicker; | |||
import org.junit.Test; | |||
import org.mockito.Mockito; | |||
import com.vaadin.ui.AbstractColorPicker; | |||
/** | |||
* @author Vaadin Ltd | |||
* | |||
*/ | |||
public class AbstractColorPickerTest { | |||
@Test(expected = NullPointerException.class) | |||
public void setValue_nullValue_throwsNPE() { | |||
AbstractColorPicker picker = Mockito.mock(AbstractColorPicker.class); | |||
Mockito.doCallRealMethod().when(picker).setValue(null); | |||
picker.setValue(null); | |||
} | |||
} |
@@ -0,0 +1,58 @@ | |||
/* | |||
* 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.tests.server.component.colorpicker; | |||
import org.junit.Test; | |||
import org.mockito.Mockito; | |||
import com.vaadin.shared.ui.colorpicker.Color; | |||
import com.vaadin.ui.AbstractColorPicker.Coordinates2Color; | |||
import com.vaadin.ui.components.colorpicker.ColorPickerGradient; | |||
import com.vaadin.ui.components.colorpicker.ColorPickerGrid; | |||
import com.vaadin.ui.components.colorpicker.ColorPickerPopup; | |||
import com.vaadin.ui.components.colorpicker.ColorPickerPreview; | |||
/** | |||
* @author Vaadin Ltd | |||
* | |||
*/ | |||
public class ColorPickerComponentsTest { | |||
@Test(expected = NullPointerException.class) | |||
public void setValue_nullValue_colorPickerGradientThrowsNPE() { | |||
ColorPickerGradient gradient = new ColorPickerGradient("foo", | |||
Mockito.mock(Coordinates2Color.class)); | |||
gradient.setValue(null); | |||
} | |||
@Test(expected = NullPointerException.class) | |||
public void setValue_nullValue_colorPickerGridThrowsNPE() { | |||
ColorPickerGrid grid = new ColorPickerGrid(); | |||
grid.setValue(null); | |||
} | |||
@Test(expected = NullPointerException.class) | |||
public void setValue_nullValue_colorPickerPopupThrowsNPE() { | |||
ColorPickerPopup popup = new ColorPickerPopup(Color.WHITE); | |||
popup.setValue(null); | |||
} | |||
@Test(expected = NullPointerException.class) | |||
public void setValue_nullValue_colorPickerPreviewThrowsNPE() { | |||
ColorPickerPreview preview = new ColorPickerPreview(Color.WHITE); | |||
preview.setValue(null); | |||
} | |||
} |
@@ -126,4 +126,10 @@ public class SliderTest { | |||
assertThat(slider.getValue(), is(1.23)); | |||
} | |||
@Test(expected = NullPointerException.class) | |||
public void setValue_nullValue_throwNPE() { | |||
Slider slider = new Slider(); | |||
slider.setValue(null); | |||
} | |||
} |
@@ -34,4 +34,10 @@ public class CheckBoxTest { | |||
Assert.assertFalse(cb.getValue()); | |||
} | |||
@Test(expected = NullPointerException.class) | |||
public void setValue_nullValue_throwsNPE() { | |||
CheckBox cb = new CheckBox(); | |||
cb.setValue(null); | |||
} | |||
} |
@@ -88,11 +88,10 @@ public class RichTextAreaTest extends ComponentTest { | |||
Assert.assertEquals("bar", tf.getValue()); | |||
} | |||
@Test | |||
public void setValueNullBecomesEmptyString() { | |||
@Test(expected = NullPointerException.class) | |||
public void setValue_nullValue_throwsNPE() { | |||
RichTextArea tf = new RichTextArea(); | |||
tf.setValue(null); | |||
Assert.assertEquals("", tf.getValue()); | |||
} | |||
@Test |