All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vaadin.data.ReadOnlyHasValue Maven / Gradle / Ivy

There is a newer version: 8.27.3
Show newest version
/*
 * Copyright (C) 2000-2024 Vaadin Ltd
 *
 * This program is available under Vaadin Commercial License and Service Terms.
 *
 * See  for the full
 * license.
 */
package com.vaadin.data;

import com.vaadin.server.SerializableConsumer;
import com.vaadin.shared.Registration;
import com.vaadin.ui.Label;

import java.io.Serializable;
import java.util.LinkedHashSet;
import java.util.Objects;

/**
 * Generic {@link HasValue} to use any type of component with Vaadin data
 * binding.
 * 

* Example: * *

 * Label label = new Label();
 * ReadOnlyHasValue<String> hasValue = new ReadOnlyHasValue<>(
 *         label::setCaption);
 * binder.forField(hasValue).bind(SomeBean::getName);
 * 
* * @param * the value type * @since 8.4 */ public class ReadOnlyHasValue implements HasValue, Serializable { private V value; private final SerializableConsumer valueProcessor; private final V emptyValue; private LinkedHashSet> listenerList; /** * Creates new {@code ReadOnlyHasValue}. * * @param valueProcessor * the value valueProcessor, e.g. {@link Label#setValue} * @param emptyValue * the value to be used as empty, {@code null} by default */ public ReadOnlyHasValue(SerializableConsumer valueProcessor, V emptyValue) { this.valueProcessor = valueProcessor; this.emptyValue = emptyValue; } /** * Creates new {@code ReadOnlyHasValue} with {@code null} as an empty value. * * @param valueProcessor * the value valueProcessor, e.g. {@link Label#setValue} */ public ReadOnlyHasValue(SerializableConsumer valueProcessor) { this(valueProcessor, null); } @Override public void setValue(V value) { V oldValue = this.value; this.value = value; valueProcessor.accept(value); if (listenerList != null && !Objects.equals(oldValue, value)) { for (ValueChangeListener valueChangeListener : listenerList) { valueChangeListener.valueChange( new ValueChangeEvent<>(null, this, oldValue, false)); } } } @Override public V getValue() { return value; } @Override public Registration addValueChangeListener( ValueChangeListener listener) { Objects.requireNonNull(listener, "Listener must not be null."); if (listenerList == null) { listenerList = new LinkedHashSet<>(); } listenerList.add(listener); return () -> listenerList.remove(listener); } @Override public boolean isRequiredIndicatorVisible() { return false; } @Override public void setRequiredIndicatorVisible(boolean requiredIndicatorVisible) { if (requiredIndicatorVisible) throw new IllegalArgumentException("Not Writable"); } @Override public void setReadOnly(boolean readOnly) { if (!readOnly) throw new IllegalArgumentException("Not Writable"); } @Override public boolean isReadOnly() { return true; } @Override public V getEmptyValue() { return emptyValue; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy