@Override public TYPE fromModel(MODEL value) { return converter.fromModel(value, property); }
/** * Check property value before putting it in PropertyBox. * @param <T> Property and value type * @param property Property * @param value Property value * @return Checked property value * @throws TypeMismatchException Value is not consistent with property type */ @SuppressWarnings("unchecked") protected <T> T checkupPropertyValue(Property<T> property, T value) throws TypeMismatchException { return validatePropertyValue(property, property.getConverter().filter(c -> isModelTypeConvertible(value, c)) .map(cv -> ((PropertyValueConverter<T, Object>) cv).fromModel(value, property)) .orElseGet(() -> checkValueTypeConsistency(property, value))); }
/** * Create a new {@link Input} from another {@link Input} with a different value type, using given * {@link PropertyValueConverter} to perform value conversions. * @param <T> New value type * @param <V> Original value type * @param input Actual input (not null) * @param property Property to provide to the converter * @param converter Value converter (not null) * @return A new {@link Input} of the converted value type */ static <T, V> Input<T> from(Input<V> input, Property<T> property, PropertyValueConverter<T, V> converter) { ObjectUtils.argumentNotNull(converter, "PropertyValueConverter must be not null"); return new InputConverterAdapter<>(input, Converter.from(value -> converter.fromModel(value, property), value -> converter.toModel(value, property), e -> e.getMessage())); }
/** * Create a new {@link Input} from another {@link Input} with a different value type, using given * {@link PropertyValueConverter} to perform value conversions. * @param <T> New value type * @param <V> Original value type * @param input Actual input (not null) * @param property Property to provide to the converter * @param converter Value converter (not null) * @return A new {@link Input} of the converted value type */ static <T, V> Input<T> from(Input<V> input, Property<T> property, PropertyValueConverter<T, V> converter) { ObjectUtils.argumentNotNull(converter, "PropertyValueConverter must be not null"); return new InputConverterAdapter<>(input, Converter.from(value -> converter.fromModel(value, property), value -> converter.toModel(value, property), e -> e.getMessage())); }
.map(cv -> ((PropertyValueConverter) cv).fromModel(value, property)).orElse(value), instanceToWrite);
@SuppressWarnings("unchecked") @Override public <MODEL> B elementConverter(PropertyValueConverter<E, MODEL> elementConverter) { ObjectUtils.argumentNotNull(elementConverter, "Element value converter must be not null"); return converter(new CollectionCallbackPropertyValueConverter<>(getType(), elementConverter.getModelType(), v -> elementConverter.fromModel(v, (Property<E>) this), v -> elementConverter.toModel(v, (Property<E>) this), getDefaultInstanceProvider())); }
@SuppressWarnings("unchecked") @Override public <MODEL> B elementConverter(PropertyValueConverter<E, MODEL> elementConverter) { ObjectUtils.argumentNotNull(elementConverter, "Element value converter must be not null"); return converter(new CollectionCallbackPropertyValueConverter<>(getType(), elementConverter.getModelType(), v -> elementConverter.fromModel(v, (Property<E>) this), v -> elementConverter.toModel(v, (Property<E>) this), getDefaultInstanceProvider())); }