/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.view.component;
import java.util.Collection;
import com.vaadin.data.Property;
import com.vaadin.data.Validator;
import com.vaadin.data.Validator.InvalidValueException;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Field;
/**
* A {@link CustomComponent} that also implements the {@link Field} interface, so
* form fields can be created by composing Vaadin components.
*
* Subclasses need to set the composition root, which is done in the constructor
* typically.
*
* See {@link Field} for more information on the individual methods. Typically,
* only {@link #setValue(Object)}, {@link #getValue()} and {@link #getType()}
* need to be overridden.
*
*/
public abstract class CustomField extends CustomComponent implements Field {
private final class AbstractFieldDelegator extends AbstractField {
private static final long serialVersionUID = 1L;
@Override
public Class<?> getType() {
return CustomField.this.getType();
}
@Override
public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
if (isReadThrough() || !isModified()) {
fireValueChange(false);
}
}
@Override
public void setValue(Object newValue) throws ReadOnlyException, ConversionException {
CustomField.this.setValue(newValue);
}
@Override
public Object getValue() {
return CustomField.this.getValue();
}
private Object superGetValue(){
return super.getValue();
}
private void superSetValue(Object newValue){
super.setValue(newValue);
}
}
private static final long serialVersionUID = 1L;
private AbstractFieldDelegator abstractField;
public CustomField() {
abstractField = new AbstractFieldDelegator();
}
@Override
public boolean isInvalidCommitted() {
return abstractField.isInvalidCommitted();
}
@Override
public void setInvalidCommitted(boolean isCommitted) {
abstractField.setInvalidCommitted(isCommitted);
}
@Override
public void commit() throws SourceException, InvalidValueException {
abstractField.commit();
}
@Override
public void discard() throws SourceException {
abstractField.discard();
}
@Override
public boolean isWriteThrough() {
return abstractField.isWriteThrough();
}
@Override
public void setWriteThrough(boolean writeThrough) throws SourceException, InvalidValueException {
abstractField.setWriteThrough(writeThrough);
}
@Override
public boolean isReadThrough() {
return abstractField.isReadThrough();
}
@Override
public void setReadThrough(boolean readThrough) throws SourceException {
abstractField.setReadThrough(readThrough);
}
@Override
public boolean isModified() {
return abstractField.isModified();
}
@Override
public void addValidator(Validator validator) {
abstractField.addValidator(validator);
}
@Override
public void removeValidator(Validator validator) {
abstractField.removeValidator(validator);
}
@Override
public Collection<Validator> getValidators() {
return abstractField.getValidators();
}
@Override
public boolean isValid() {
return abstractField.isValid();
}
@Override
public void validate() throws InvalidValueException {
abstractField.validate();
}
@Override
public boolean isInvalidAllowed() {
return abstractField.isInvalidAllowed();
}
@Override
public void setInvalidAllowed(boolean invalidValueAllowed) throws UnsupportedOperationException {
abstractField.setInvalidAllowed(invalidValueAllowed);
}
@Override
public Object getValue() {
return abstractField.superGetValue();
}
@Override
public void setValue(Object newValue) throws ReadOnlyException, ConversionException {
abstractField.superSetValue(newValue);
}
@Override
public abstract Class<?> getType();
@Override
public void addListener(ValueChangeListener listener) {
abstractField.addListener(listener);
}
@Override
public void removeListener(ValueChangeListener listener) {
abstractField.removeListener(listener);
}
@Override
public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
abstractField.valueChange(event);
}
@Override
public void setPropertyDataSource(Property newDataSource) {
abstractField.setPropertyDataSource(newDataSource);
}
@Override
public Property getPropertyDataSource() {
return abstractField.getPropertyDataSource();
}
@Override
public int getTabIndex() {
return abstractField.getTabIndex();
}
@Override
public void setTabIndex(int tabIndex) {
abstractField.setTabIndex(tabIndex);
}
@Override
public boolean isRequired() {
return abstractField.isRequired();
}
@Override
public void setRequired(boolean required) {
abstractField.setRequired(required);
}
@Override
public void setRequiredError(String requiredMessage) {
abstractField.setRequiredError(requiredMessage);
}
@Override
public String getRequiredError() {
return abstractField.getRequiredError();
}
@Override
public void focus() {
super.focus();
}
@Override
public String toString() {
return abstractField.toString();
}
}