package com.dragome.forms.bindings.client.form.metadata.binding; import static com.dragome.forms.bindings.client.form.metadata.MetadataPlugin.getMetadata; import com.dragome.forms.bindings.client.binding.AbstractValueBinding; import com.dragome.forms.bindings.client.form.Field; import com.dragome.forms.bindings.client.value.ValueModel; /** * Created by IntelliJ IDEA. * User: andrew * Date: Feb 24, 2010 * Time: 1:23:47 PM * To change this template use File | Settings | File Templates. */ public class ConditionBinderBuilder<T> { private MetadataBinder binder; private T target; private ConditionBinderWidgetAction<T> action; private ConditionBinderMetadataAction<T> metadataAction; public ConditionBinderBuilder(MetadataBinder metadataBinder, T target, ConditionBinderMetadataAction<T> metadataAction, ConditionBinderWidgetAction<T> action) { binder= metadataBinder; this.target= target; this.metadataAction= metadataAction; this.action= action; } public void when(ValueModel<Boolean> condition) { binder.registerDisposableAndUpdateTarget(new ConditionBinding<T>(target, condition, action)); } /** * This method is deprecated, use {@link com.pietschy.gwt.pectin.client.form.metadata.MetadataPlugin#metadataOf(com.pietschy.gwt.pectin.client.form.Field)} instead. * E.g. <pre>binder.show(someWidget).when(metadataOf(someField).isVisible());</pre> * @deprecated use {@link com.pietschy.gwt.pectin.client.form.metadata.MetadataPlugin#metadataOf(com.pietschy.gwt.pectin.client.form.Field)} instead. * E.g. <pre>binder.show(someWidget).when(metadataOf(someField).isVisible());</pre> * @param field the field of interest. */ @Deprecated public void usingMetadataOf(Field field) { ValueModel<Boolean> condition= metadataAction.getModel(getMetadata(field)); binder.registerDisposableAndUpdateTarget(new ConditionBinding<T>(target, condition, metadataAction)); } private class ConditionBinding<T> extends AbstractValueBinding<Boolean> { private T target; private ConditionBinderWidgetAction<T> action; private ConditionBinding(T target, ValueModel<Boolean> condition, ConditionBinderWidgetAction<T> action) { super(condition); this.target= target; this.action= action; } @Override protected void updateTarget(Boolean value) { action.apply(target, value != null ? value : false); } @Override public T getTarget() { return target; } } }