/*
* Copyright 2016 Matti Tahvonen.
*
* 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 org.vaadin.viritin.v7.fluency.ui;
import org.vaadin.viritin.fluency.ui.FluentAbstractComponent;
import org.vaadin.viritin.v7.fluency.data.FluentProperty;
import com.vaadin.v7.data.util.converter.Converter;
import com.vaadin.v7.ui.AbstractField;
/**
* A {@link AbstractField} complemented by fluent setters.
*
* @author Max Schuster
* @param <S>
* Self-referential generic type
* @param <T>
* The type of values in the field, which might not be the same type
* as that of the data source if converters are used
* @see AbstractField
*/
public interface FluentAbstractField<S extends FluentAbstractField<S, T>, T>
extends FluentAbstractComponent<S>, FluentField<S, T>,
FluentProperty.FluentReadOnlyStatusChangeNotifier<S> {
// Javadoc copied form Vaadin Framework
/**
* Retrieves a converter for the field from the converter factory defined
* for the application. Clears the converter if no application reference is
* available or if the factory returns null.
*
* @param datamodelType
* The type of the data model that we want to be able to convert
* from
* @return this (for method chaining)
* @see AbstractField#setConverter(java.lang.Class)
*/
public default S withConverter(Class<?> datamodelType) {
((AbstractField<T>) this).setConverter(datamodelType);
return (S) this;
}
// Javadoc copied form Vaadin Framework
/**
* Sets the value of the field using a value of the data source type. The
* value given is converted to the field type and then assigned to the
* field. This will update the property data source in the same way as when
* {@link #setValue(Object)} is called.
*
* @param value
* The value to set. Must be the same type as the data source.
* @return this (for method chaining)
* @see AbstractField#setConvertedValue(java.lang.Object)
*/
public default S withConvertedValue(Object value) {
((AbstractField<S>) this).setConvertedValue(value);
return (S) this;
}
// Javadoc copied form Vaadin Framework
/**
* Sets the error that is shown if the field value cannot be converted to
* the data source type. If {0} is present in the message, it will be
* replaced by the simple name of the data source type. If {1} is present in
* the message, it will be replaced by the ConversionException message.
*
* @param valueConversionError
* Message to be shown when conversion of the value fails
* @return this (for method chaining)
* @see AbstractField#setConversionError(java.lang.String)
*/
public default S withConversionError(String valueConversionError) {
((AbstractField<S>) this).setConversionError(valueConversionError);
return (S) this;
}
// Javadoc copied form Vaadin Framework
/**
* Enable or disable automatic, visible validation.
*
* If automatic validation is enabled, any validators connected to this
* component are evaluated while painting the component and potential error
* messages are sent to client. If the automatic validation is turned off,
* isValid() and validate() methods still work, but one must show the
* validation in their own code.
*
* @param validateAutomatically
* True, if automatic validation is enabled.
* @return this (for method chaining)
* @see AbstractField#setValidationVisible(boolean)
*/
public default S withValidationVisible(boolean validateAutomatically) {
((AbstractField<T>) this).setValidationVisible(validateAutomatically);
return (S) this;
}
// Javadoc copied form Vaadin Framework
/**
* Sets the current buffered source exception.
*
* @param currentBufferedSourceException
* The new current buffered source exception.
* @return this (for method chaining)
* @see AbstractField#setCurrentBufferedSourceException(com.vaadin.v7.data.Buffered.SourceException)
*/
public default S withCurrentBufferedSourceException(
SourceException currentBufferedSourceException) {
((AbstractField<T>) this).setCurrentBufferedSourceException(
currentBufferedSourceException);
return (S) this;
}
// Javadoc copied form Vaadin Framework
/**
* Sets the converter used to convert the field value to property data
* source type. The converter must have a presentation type that matches the
* field type.
*
* @param converter
* The new converter to use.
* @return this (for method chaining)
* @see AbstractField#setConverter(com.vaadin.v7.data.util.converter.Converter)
*/
public default S withConverter(Converter<T, ?> converter) {
((AbstractField<T>) this).setConverter(converter);
return (S) this;
}
}