package com.dragome.forms.bindings.client.binding; import com.dragome.forms.bindings.client.value.GuardedValueChangeHandler; import com.dragome.forms.bindings.client.value.ValueModel; import com.dragome.model.interfaces.ValueChangeEvent; /** * Created by IntelliJ IDEA. * User: andrew * Date: May 22, 2010 * Time: 9:20:15 AM * To change this template use File | Settings | File Templates. */ public abstract class AbstractValueBinding<T> extends AbstractBinding { private ValueModel<T> model; private ModelChangeHandler valueMonitor= new ModelChangeHandler(); public AbstractValueBinding(ValueModel<T> model) { this.model= model; registerDisposable(model.addValueChangeHandler(valueMonitor)); } protected ValueModel<T> getModel() { return model; } public void updateTarget() { updateTarget(model.getValue()); } protected abstract void updateTarget(T value); protected void whileIgnoringModelChanges(Runnable r) { valueMonitor.whileIgnoringEvents(r); } protected Boolean areEqual(T one, T two) { return one != null ? one.equals(two) : two == null; } private class ModelChangeHandler extends GuardedValueChangeHandler<T> { @Override public void onGuardedValueChanged(ValueChangeEvent<T> event) { T value= event.getValue(); updateTarget(value); } } }