/******************************************************************************* * Copyright (c) 2011-2014 Fernando Petrola * * This file is part of Dragome SDK. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html ******************************************************************************/ package com.dragome.examples.pectin; import static com.dragome.forms.bindings.client.condition.Conditions.valueOf; import static com.dragome.forms.bindings.client.form.metadata.MetadataPlugin.metadataOf; import com.dragome.forms.bindings.client.form.FieldModelBase; import com.dragome.forms.bindings.client.form.FormModel; import com.dragome.forms.bindings.client.form.ListFieldModelBase; import com.dragome.forms.bindings.client.form.binding.FormBinder; import com.dragome.forms.bindings.client.form.validation.binding.ValidationBinder; import com.dragome.forms.bindings.client.style.StyleBinder; import com.dragome.guia.components.VisualButtonImpl; import com.dragome.guia.components.VisualCheckboxImpl; import com.dragome.guia.components.VisualLabelImpl; import com.dragome.guia.components.VisualRadioButton; import com.dragome.guia.components.VisualRadioButtonImpl; import com.dragome.guia.components.VisualTextFieldImpl; import com.dragome.guia.components.interfaces.VisualButton; import com.dragome.guia.components.interfaces.VisualCheckbox; import com.dragome.guia.components.interfaces.VisualLabel; import com.dragome.guia.components.interfaces.VisualPanel; import com.dragome.guia.components.interfaces.VisualTextField; import com.dragome.model.pectin.HasClickHandlersAdapter; import com.dragome.model.pectin.VisualComponentHasEnabled; public class PersonForm { private FormBinder binder= new FormBinder(); private StyleBinder style= new StyleBinder(); private ValidationBinder validation= new ValidationBinder(); private VisualTextField<String> title= new VisualTextFieldImpl<String>("title"); private VisualLabel<String> nickNameLabel= new VisualLabelImpl<String>("nickNameLabel", "Nick Name"); private VisualTextField<String> givenName= new VisualTextFieldImpl<String>("givenName"); private VisualTextField<String> surname= new VisualTextFieldImpl<String>("surname"); private VisualTextField<String> age= new VisualTextFieldImpl<String>("age"); private NickNameEditor nickName= new NickNameEditor("nicknameEditor"); // private VisualTextField moneyInBank= new TextBox(); private VisualCheckbox hasNickName= new VisualCheckboxImpl("hasNickName", "I have a nick name", false); private VisualRadioButton maleRadio= new VisualRadioButtonImpl("g1", "male", "Male"); private VisualRadioButton femaleRadio= new VisualRadioButtonImpl("g1", "female", "Female"); private VisualCheckbox cabSavCheckBox= new VisualCheckboxImpl("CabSav"); private VisualCheckbox merlotCheckBox= new VisualCheckboxImpl("Merlot"); private VisualCheckbox shirazCheckBox= new VisualCheckboxImpl("Shiraz"); private VisualCheckbox wineLoverCheckBox= new VisualCheckboxImpl("wineLoverCheckBox", "I like wine", false); private VisualButton validateButton= new VisualButtonImpl("validateButton", "Validate"); private VisualButton clearButton= new VisualButtonImpl("clearButton", "Clear"); private VisualButton fakeServerErrorButton= new VisualButtonImpl("fakeValidationButton", "Fake a Server Validation Error"); public PersonForm(PersonFormModel model, VisualPanel panel) { binder.bind(model.givenName).to(givenName); binder.bind(model.surname).to(surname); binder.bind(model.age).to(age); binder.bind(model.gender).withValue(Gender.MALE).to(maleRadio); binder.bind(model.gender).withValue(Gender.FEMALE).to(femaleRadio); binder.bind(model.hasNickName).to(hasNickName); binder.bind(model.nickName).to(nickName); binder.bind(model.wineLover).to(wineLoverCheckBox); binder.bind(model.favoriteWines).containingValue(Wine.CAB_SAV).to(cabSavCheckBox); binder.bind(model.favoriteWines).containingValue(Wine.MERLOT).to(merlotCheckBox); binder.bind(model.favoriteWines).containingValue(Wine.SHIRAZ).to(shirazCheckBox); binder.bind(model.title).to(title); binder.bind(model.validateCommand).to(new HasClickHandlersAdapter(validateButton)); binder.bind(model.clearCommand).to(new HasClickHandlersAdapter(clearButton)); binder.bind(model.fakeServerErrorCommand).to(new HasClickHandlersAdapter(fakeServerErrorButton)); style.style(title).with("LordVadar").when(valueOf(model.title).is("lord vadar")); // Here our nick name label has it's style configured from the metadata // of the nickName field. Could have also used the withValue approach // above in this case as well. style.style(nickNameLabel).with("disabled").when(metadataOf(model.nickName).isDisabled()); //style.style(nickName).with("disabled").when(metadataOf(model.nickName).isDisabled()); binder.disable(new VisualComponentHasEnabled(nickName)).when(metadataOf(model.nickName).isDisabled()); binder.enable(new VisualComponentHasEnabled(cabSavCheckBox)).when(model.wineLover); binder.enable(new VisualComponentHasEnabled(merlotCheckBox)).when(model.wineLover); binder.enable(new VisualComponentHasEnabled(shirazCheckBox)).when(model.wineLover); validation.bindValidationOf(model.givenName).toStyleOf(givenName); validation.bindValidationOf(model.surname).toStyleOf(surname); panel.addChild(createValidationLabel(model.givenName, "givenNameLabel")); panel.addChild(createValidationLabel(model.surname, "surnameLabel")); panel.addChild(createValidationLabel(model.favoriteWines)); panel.addChild(createValidationPanel(model)); panel.addChild(givenName); panel.addChild(surname); panel.addChild(age); panel.addChild(cabSavCheckBox); panel.addChild(merlotCheckBox); panel.addChild(shirazCheckBox); panel.addChild(maleRadio); panel.addChild(femaleRadio); panel.addChild(hasNickName); panel.addChild(nickName); panel.addChild(wineLoverCheckBox); panel.addChild(title); panel.addChild(nickNameLabel); panel.addChild(validateButton); panel.addChild(clearButton); panel.addChild(fakeServerErrorButton); } private VisualLabel<String> createValidationLabel(FieldModelBase<?> field, String labelName) { VisualLabel<String> label= new VisualLabelImpl<String>(labelName); validation.bindValidationOf(field).to(label); return label; } private VisualLabel<String> createValidationLabel(ListFieldModelBase<?> field) { VisualLabel<String> label= new VisualLabelImpl<String>("label2"); validation.bindValidationOf(field).to(label); return label; } private VisualLabel<String> createValidationPanel(FormModel form) { VisualLabel<String> panel= new VisualLabelImpl<String>("label3"); validation.bindValidationOf(form).to(panel); return panel; } }