Class AbstractCompositeField<C extends Component,​S extends AbstractCompositeField<C,​S,​T>,​T>

    • Constructor Detail

      • AbstractCompositeField

        public AbstractCompositeField​(T defaultValue)
        Creates a new field. The provided default value is used by getEmptyValue() and is also used as the initial value of this instance.
        Parameters:
        defaultValue - the default value
    • Method Detail

      • setValue

        public void setValue​(T value)
        Description copied from interface: HasValue
        Sets the value of this object. If the new value is not equal to getValue(), fires a value change event. May throw IllegalArgumentException if the value is not acceptable.

        Implementation note: the implementing class should document whether null values are accepted or not, and override HasValue.getEmptyValue() if the empty value is not null.

        Specified by:
        setValue in interface HasValue<C extends Component,​S extends AbstractCompositeField<C,​S,​T>>
        Parameters:
        value - the new value
      • getValue

        public T getValue()
        Description copied from interface: HasValue
        Returns the current value of this object.

        Implementation note: the implementing class should document whether null values may be returned or not, and override HasValue.getEmptyValue() if the empty value is not null.

        Specified by:
        getValue in interface HasValue<C extends Component,​S extends AbstractCompositeField<C,​S,​T>>
        Returns:
        the current value
      • getEmptyValue

        public T getEmptyValue()
        Description copied from interface: HasValue
        Returns the value that represents an empty value.

        By default HasValue is expected to support null as empty values. Specific implementations might not support this.

        Specified by:
        getEmptyValue in interface HasValue<C extends Component,​S extends AbstractCompositeField<C,​S,​T>>
        Returns:
        empty value
      • isEmpty

        public boolean isEmpty()
        Description copied from interface: HasValue
        Returns whether this HasValue is considered to be empty.

        By default this is an equality check between current value and empty value.

        Specified by:
        isEmpty in interface HasValue<C extends Component,​S extends AbstractCompositeField<C,​S,​T>>
        Returns:
        true if considered empty; false if not
      • setPresentationValue

        protected abstract void setPresentationValue​(T newPresentationValue)
        Updates the presentation of this field to display the provided value. Subclasses should override this method to show the value to the user. This is typically done by setting an element property or by applying changes to child components.

        If setModelValue(Object, boolean) is called from within this method, then value of the last invocation will be used as the model value instead of the value passed to this method. In this case setPresentationValue(Object) will not be called again. Changing the provided value might be useful if the provided value is sanitized.

        See AbstractField for an overall description on the difference between model values and presentation values.

        Parameters:
        newPresentationValue - the new value to show
      • setModelValue

        protected void setModelValue​(T newModelValue,
                                     boolean fromClient)
        Updates the model value if the value has actually changed. Subclasses should call this method whenever the user has changed the value. A value change event is fired if the new value is different from the previous value according to valueEquals(Object, Object).

        If the value is from the client-side and this field is in readonly mode, then the new model value will be ignored. setPresentationValue(Object) will be called with the previous model value so that the representation shown to the user can be reverted.

        See AbstractField for an overall description on the difference between model values and presentation values.

        Parameters:
        newModelValue - the new internal value to use
        fromClient - true if the new value originates from the client; otherwise false
      • valueEquals

        protected boolean valueEquals​(T value1,
                                      T value2)
        Compares to value instances to each other to determine whether they are equal. Equality is used to determine whether to update internal state and fire an event when setValue(Object) or setModelValue(Object, boolean) is called. Subclasses can override this method to define an alternative comparison method instead of Object.equals(Object).
        Parameters:
        value1 - the first instance
        value2 - the second instance
        Returns:
        true if the instances are equal; otherwise false