package com.dragome.forms.bindings.client.form.binding; import com.dragome.forms.bindings.client.binding.AbstractBinding; import com.dragome.forms.bindings.client.binding.Binder; import com.dragome.forms.bindings.client.binding.BindingBuilderCallback; import com.dragome.forms.bindings.client.binding.MutableListBindingBuilder; import com.dragome.forms.bindings.client.binding.MutableValueBindingBuilder; import com.dragome.forms.bindings.client.form.BindingCallback; import com.dragome.forms.bindings.client.form.FieldModel; import com.dragome.forms.bindings.client.form.FormattedFieldModel; import com.dragome.forms.bindings.client.form.FormattedListFieldModel; import com.dragome.forms.bindings.client.form.ListFieldModel; /** * FormBinder provides a builders to bind widgets to field models. During the binding process * any {@link com.pietschy.gwt.pectin.client.binding.BindingBuilderCallback}s installed by plugins will be automatically invoked. */ public class FormBinder extends Binder { public <T> MutableValueBindingBuilder<T> bind(final FieldModel<T> field) { return new MutableValueBindingBuilder<T>(field, new BindingBuilderCallback() { public void onBindingCreated(AbstractBinding binding, Object target) { registerDisposableAndUpdateTarget(binding); // now notify plugins.. for (BindingCallback callback : field.getFormModel().getBindingCallbacks()) { callback.onWidgetBinding(binding, field, target); } } }); } public <T> MutableListBindingBuilder<T> bind(final ListFieldModel<T> field) { return new MutableListBindingBuilder<T>(field, new BindingBuilderCallback() { public void onBindingCreated(AbstractBinding binding, Object target) { registerDisposableAndUpdateTarget(binding); for (BindingCallback callback : field.getFormModel().getBindingCallbacks()) { callback.onWidgetBinding(binding, field, target); } } }); } public <T> FormattedFieldBindingBuilder<T> bind(final FormattedFieldModel<T> field) { return new FormattedFieldBindingBuilder<T>(field, new BindingBuilderCallback() { public void onBindingCreated(AbstractBinding binding, Object target) { registerDisposableAndUpdateTarget(binding); for (BindingCallback callback : field.getFormModel().getBindingCallbacks()) { callback.onWidgetBinding(binding, field, target); } } }); } public <T> FormattedListFieldBindingBuilder<T> bind(final FormattedListFieldModel<T> formattedList) { return new FormattedListFieldBindingBuilder<T>(formattedList, new BindingBuilderCallback() { public void onBindingCreated(AbstractBinding binding, Object target) { registerDisposableAndUpdateTarget(binding); for (BindingCallback callback : formattedList.getFormModel().getBindingCallbacks()) { callback.onWidgetBinding(binding, formattedList, target); } } }); } }