package com.dragome.forms.bindings.builders.helpers; import java.util.List; import com.dragome.forms.bindings.builders.ActionExecutor; import com.dragome.forms.bindings.builders.ChildrenBuilder; import com.dragome.forms.bindings.builders.ComponentBuilder; import com.dragome.forms.bindings.builders.Consumer; import com.dragome.forms.bindings.builders.Supplier; import com.dragome.forms.bindings.builders.TemplateBindingBuilder; import com.dragome.forms.bindings.builders.TemplateComponentBindingBuilder; import com.dragome.forms.bindings.client.value.ValueSource; import com.dragome.guia.components.interfaces.VisualButton; import com.dragome.guia.components.interfaces.VisualCheckbox; import com.dragome.guia.components.interfaces.VisualComponent; import com.dragome.guia.components.interfaces.VisualLabel; import com.dragome.guia.components.interfaces.VisualLink; import com.dragome.guia.components.interfaces.VisualPanel; import com.dragome.guia.components.interfaces.VisualTextField; import com.dragome.guia.events.listeners.interfaces.BlurListener; import com.dragome.guia.events.listeners.interfaces.DoubleClickListener; import com.dragome.guia.events.listeners.interfaces.KeyUpListener; public class BinderHelper { public static ComponentBuilder componentBuilder; private static TemplateBindingBuilder templateBindingBuilder; private String templateName; static TemplateComponentBindingBuilder<? extends VisualComponent> templateComponentBindingBuilder; private static VisualComponent component; public static Class<VisualPanel> PANEL= VisualPanel.class; public static Class<VisualButton> BUTTON= VisualButton.class; public static Class<VisualLabel> LABEL= VisualLabel.class; public static Class<VisualCheckbox> CHECKBOX= VisualCheckbox.class; public static Class<VisualTextField> TEXTFIELD= VisualTextField.class; public static Class<VisualLink> LINK= VisualLink.class; public BinderHelper(String aChildTemplateName) { this.templateName= aChildTemplateName; } public static BinderHelper bind(String aChildTemplateName) { return new BinderHelper(aChildTemplateName); } public <C extends VisualComponent> C as(Class<C> componentType, final ActionExecutor actionExecutor) { TemplateBindingBuilder lastTemplateBindingBuilder= templateBindingBuilder; templateBindingBuilder= componentBuilder.bindTemplate(templateName); templateComponentBindingBuilder= templateBindingBuilder.as(componentType); component= templateComponentBindingBuilder.component(); templateComponentBindingBuilder.buildChildren(new ChildrenBuilder() { public void build(ComponentBuilder builder) { ComponentBuilder lastComponentBuilder= componentBuilder; componentBuilder= builder; actionExecutor.execute(); componentBuilder= lastComponentBuilder; } }); templateComponentBindingBuilder.build(); templateBindingBuilder= lastTemplateBindingBuilder; return (C) component; } public static <S, C extends VisualComponent> TemplateComponentBindingBuilder<C> toProperty(final Supplier<S> getter, final Consumer<S> setter) { return (TemplateComponentBindingBuilder<C>) templateComponentBindingBuilder.toProperty(getter, setter); } public static <S> RepeaterBuilderHelper<S> toListProperty(final Supplier<List<S>> getter) { return new RepeaterBuilderHelper<S>(templateComponentBindingBuilder.toListProperty(getter)); } public static <S, C extends VisualComponent> TemplateComponentBindingBuilder<C> to(final ValueSource<S> valueSource) { return (TemplateComponentBindingBuilder<C>) templateComponentBindingBuilder.to(valueSource); } public static void showWhen(Supplier<Boolean> supplier) { componentBuilder.showWhen(supplier); } public static void onClick(final ActionExecutor actionExecutor) { templateComponentBindingBuilder.onClick(actionExecutor); } public static void onDoubleClick(final ActionExecutor actionExecutor) { templateComponentBindingBuilder.onDoubleClick(new DoubleClickListener() { public void doubleClickPerformed(VisualComponent aVisualComponent) { actionExecutor.execute(); } }); } public static void onKeyUp(final KeyUpListener keyUpListener, int... codes) { templateComponentBindingBuilder.onKeyUp(keyUpListener, codes); } public static void onBlur(BlurListener blurListener) { templateComponentBindingBuilder.onBlur(blurListener); } public static ComponentBuilder styleWith(String className) { return componentBuilder.styleWith(className); } public static ComponentBuilder style() { return componentBuilder.style(component); } public static void start(VisualPanel mainPanel) { componentBuilder= new ComponentBuilder(mainPanel); } }