/* * Copyright 2009 Andrew Pietsch * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You may * obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing permissions * and limitations under the License. */ package com.dragome.forms.bindings.client.form.metadata.binding; import org.w3c.dom.Element; import com.dragome.forms.bindings.client.binding.AbstractBindingContainer; import com.dragome.forms.bindings.client.condition.Conditions; import com.dragome.forms.bindings.client.form.Field; import com.dragome.forms.bindings.client.form.metadata.Metadata; import com.dragome.forms.bindings.client.form.metadata.MetadataPlugin; import com.dragome.forms.bindings.client.value.ValueModel; import com.dragome.model.interfaces.HasEnabled; import com.dragome.model.interfaces.HasVisible; import com.dragome.model.interfaces.UIObject; //import com.google.gwt.user.client.ui.FocusWidget; //import com.google.gwt.user.client.ui.UIObject; /** * Created by IntelliJ IDEA. * User: andrew * Date: Jul 13, 2009 * Time: 12:44:37 PM * To change this template use File | Settings | File Templates. */ public class MetadataBinder extends AbstractBindingContainer { private static final MetadataEnabledAction enableUsingMetadataAction= new MetadataEnabledAction(); private static final MetadataVisibleAction showUsingMetadataAction= new MetadataVisibleAction(); private static final ShowWhenAction showWhenAction= new ShowWhenAction(); private static final HideWhenAction hideWhenAction= new HideWhenAction(); private static final EnableWhenAction enableAction= new EnableWhenAction(); private static final DisableWhenAction disableAction= new DisableWhenAction(); /** * Binds all the metadata of the specific field to a widget. The metadata will only be applied * if the widget has a supported binding. No errors will be thrown if it doesn't. * * @param field the field that has the metadata. * @return a builder to apply the styles to a widget. */ public AllMetadataBindingBuilder bindMetadataOf(Field field) { return new AllMetadataBindingBuilder(this, MetadataPlugin.getMetadata(field)); } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ @Deprecated public VisibilityBindingBuilder bindVisibilityOf(Field field) { return new VisibilityBindingBuilder(this, MetadataPlugin.getMetadata(field).getVisibleModel()); } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ @Deprecated public EnabledBindingBuilder bindEnabledOf(Field field) { return new EnabledBindingBuilder(this, MetadataPlugin.getMetadata(field).getEnabledModel()); } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ @Deprecated public EnabledBindingBuilder bindDisabledOf(Field field) { return new EnabledBindingBuilder(this, Conditions.isNot(MetadataPlugin.getMetadata(field).getEnabledModel())); } /** * Binds the value of an arbitrary boolean model to the enabledness and/or visibility of * component. * * @param model the value model to bind to. * @deprecated use show/hide enable/disable instead. */ @Deprecated public ValueOfBindingBuilder bindValueOf(ValueModel<Boolean> model) { return new ValueOfBindingBuilder(this, model); } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ public ConditionBinderBuilder<?> show(HasVisible uiObject) { return new ConditionBinderBuilder<HasVisible>(this, uiObject, showUsingMetadataAction, showWhenAction); } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ public ConditionBinderBuilder<?> hide(HasVisible uiObject) { return new ConditionBinderBuilder<HasVisible>(this, uiObject, showUsingMetadataAction, hideWhenAction); } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ // public ConditionBinderBuilder<?> show(UIObject uiObject) // { // return show(new HasVisibleUiObjectAdapter(uiObject)); // } // // /** // * @deprecated use {@link Binder} show/hide enable/disable instead. // */ // public ConditionBinderBuilder<?> hide(UIObject uiObject) // { // return hide(new HasVisibleUiObjectAdapter(uiObject)); // } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ public ConditionBinderBuilder<?> show(Element element) { return show(new HasVisibleElementAdapter(element)); } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ public ConditionBinderBuilder<?> hide(Element element) { return hide(new HasVisibleElementAdapter(element)); } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ public ConditionBinderBuilder<?> enable(HasEnabled widget) { return new ConditionBinderBuilder<HasEnabled>(this, widget, enableUsingMetadataAction, enableAction); } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ // public ConditionBinderBuilder<?> enable(final FocusWidget widget) // { // // hoping this will all get optimised away... // return enable(new EnabledFocusWidgetAdapter(widget)); // } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ public ConditionBinderBuilder<?> disable(HasEnabled widget) { return new ConditionBinderBuilder<HasEnabled>(this, widget, enableUsingMetadataAction, disableAction); } /** * @deprecated use {@link Binder} show/hide enable/disable instead. */ // public ConditionBinderBuilder<?> disable(final FocusWidget widget) // { // // hoping this will all get optimised away... // return disable(new EnabledFocusWidgetAdapter(widget)); // } // private static class EnabledFocusWidgetAdapter implements HasEnabled // { // private final FocusWidget widget; // // public EnabledFocusWidgetAdapter(FocusWidget widget) // { // this.widget = widget; // } // // public void setEnabled(boolean enabled) // { // widget.setEnabled(enabled); // } // // public boolean isEnabled() // { // return widget.isEnabled(); // } // } private static class MetadataEnabledAction implements ConditionBinderMetadataAction<HasEnabled> { public ValueModel<Boolean> getModel(Metadata metadata) { return metadata.getEnabledModel(); } public void apply(HasEnabled widget, boolean enabled) { widget.setEnabled(enabled); } } private static class MetadataVisibleAction implements ConditionBinderMetadataAction<HasVisible> { public ValueModel<Boolean> getModel(Metadata metadata) { return metadata.getVisibleModel(); } public void apply(HasVisible widget, boolean visible) { widget.setVisible(visible); } } private static class ShowWhenAction implements ConditionBinderWidgetAction<HasVisible> { public void apply(HasVisible target, boolean visible) { target.setVisible(visible); } } private static class HideWhenAction implements ConditionBinderWidgetAction<HasVisible> { public void apply(HasVisible target, boolean hidden) { target.setVisible(!hidden); } } private static class EnableWhenAction implements ConditionBinderWidgetAction<HasEnabled> { public void apply(HasEnabled target, boolean enabled) { target.setEnabled(enabled); } } private static class DisableWhenAction implements ConditionBinderWidgetAction<HasEnabled> { public void apply(HasEnabled target, boolean disabled) { target.setEnabled(!disabled); } } // private static class HasVisibleUiObjectAdapter implements HasVisible // { // private final UIObject widget; // // public HasVisibleUiObjectAdapter(UIObject widget) // { // this.widget = widget; // } // // public void setVisible(boolean visible) // { // widget.setVisible(visible); // } // // public boolean isVisible() // { // return widget.isVisible(); // } // } private static class HasVisibleElementAdapter implements HasVisible { private Element element; public HasVisibleElementAdapter(Element element) { this.element= element; } public void setVisible(boolean visible) { // UIObject.setVisible(element, visible); } public boolean isVisible() { return UIObject.isVisible(element); } } }