package au.com.vaadinutils.fields; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.vaadin.data.Property; import com.vaadin.data.Validator; import com.vaadin.data.Validator.InvalidValueException; import com.vaadin.ui.Button; import com.vaadin.ui.Field; public class DataBoundButton<T> extends Button implements Field<T> { /** * */ private static final long serialVersionUID = 2137449474336770169L; private Property<T> dataSource; private boolean required = false; private String requiredMessage = ""; private T value; final Class<T> type; private boolean invalidCommitted = false; private boolean buffered = false; Set<Validator> validators = new HashSet<Validator>(); private boolean invalidAllowed = true; transient Logger logger = LogManager.getLogger(DataBoundButton.class); Set<ValueChangeListener> listeners = new HashSet<ValueChangeListener>(); DataBoundButton(Class<T> type) { super(); this.type = type; } public DataBoundButton(String fieldLabel, Class<T> type2) { super(fieldLabel); type = type2; } @Override public boolean isInvalidCommitted() { return invalidCommitted; } @Override public void setInvalidCommitted(boolean isCommitted) { invalidCommitted = isCommitted; } @Override public void commit() throws SourceException, InvalidValueException { dataSource.setValue(value); } @Override public void discard() throws SourceException { value = dataSource.getValue(); } @Override public void setBuffered(boolean buffered) { this.buffered = buffered; } @Override public boolean isBuffered() { return buffered; } @Override public boolean isModified() { return false; } @Override public void addValidator(Validator validator) { validators.add(validator); } @Override public void removeValidator(Validator validator) { validators.remove(validator); } @Override public void removeAllValidators() { validators.clear(); } @Override public Collection<Validator> getValidators() { return validators; } @Override public boolean isValid() { return true; } @Override public void validate() throws InvalidValueException { } @Override public boolean isInvalidAllowed() { return invalidAllowed; } @Override public void setInvalidAllowed(boolean invalidValueAllowed) throws UnsupportedOperationException { invalidAllowed = invalidValueAllowed; } @Override public T getValue() { logger.info(value); return value; } @Override public void setValue(T newValue) throws ReadOnlyException { logger.info(value); value = newValue; } @Override public Class<T> getType() { return type; } @Override public void addValueChangeListener(ValueChangeListener listener) { listeners.add(listener); } @Override public void addListener(ValueChangeListener listener) { listeners.add(listener); } @Override public void removeValueChangeListener(ValueChangeListener listener) { listeners.remove(listener); } @Override public void removeListener(ValueChangeListener listener) { listeners.remove(listener); } @Override public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) { logger.info("Value changed"); } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void setPropertyDataSource(Property newDataSource) { logger.info("data source set"); this.dataSource = newDataSource; value = dataSource.getValue(); } @Override public Property<T> getPropertyDataSource() { return dataSource; } @Override public boolean isRequired() { return required; } @Override public void setRequired(boolean required) { this.required = required; } @Override public void setRequiredError(String requiredMessage) { this.requiredMessage = requiredMessage; } @Override public String getRequiredError() { return requiredMessage; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return false; } @Override public void clear() { // TODO Auto-generated method stub } }