package de.swm.mobile.kitchensink.client.showcase.forms;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.SimpleBeanEditorDriver;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasValue;
import com.google.gwt.user.client.ui.Widget;
import de.swm.commons.mobile.client.utils.Utils;
import de.swm.commons.mobile.client.validation.IValidator;
import de.swm.commons.mobile.client.widgets.*;
import de.swm.commons.mobile.client.widgets.date.DateTextBox;
import de.swm.mobile.kitchensink.client.base.ShowcaseDetailPage;
import de.swm.mobile.kitchensink.client.showcase.forms.utils.EnumRenderer;
import de.swm.mobile.kitchensink.client.showcase.forms.utils.Person;
import org.gwtbootstrap3.client.ui.ButtonGroup;
import java.util.Date;
//TODO: Refactoring neue Struktur
import static de.swm.mobile.kitchensink.client.ShowcaseAnnotations.ShowcaseSource;
import static de.swm.mobile.kitchensink.client.ShowcaseAnnotations.ShowcaseUiXML;
@ShowcaseSource
@ShowcaseUiXML({"EditorFormPage.ui.xml"})
public class EditorFormPage extends ShowcaseDetailPage implements Editor<Person> {
@UiField @Path("name")
TextBox nameTextBox;
@UiField @Path("email")
EmailTextBox mailTextBox;
@UiField @Path("birthdate")
DateTextBox birthdateTextBox;
@UiField @Path("name")
TextArea description;
@UiField @Path("job")
DropDownList<String> jobList;
@UiField @Path("option")
ButtonGroup radioButtonGroup;
@UiField @Path("genOption")
GenericRadioButtonGroup<EnumRenderer.ExampleEnum> radioButtonGroupGeneric;
@UiField @Ignore
DateTextBox timeTextBox;
@UiField @Ignore
DateTextBox scheduleTextBox;
@UiField @Ignore
Button saveButton;
@UiField @Ignore
Button cancelButton;
@UiField @Ignore
HeaderPanel header;
private static EditorPageUiBinder uiBinder = GWT.create(EditorPageUiBinder.class);
private Driver driver = GWT.create(Driver.class);
interface EditorPageUiBinder extends UiBinder<Widget, EditorFormPage> {}
interface Driver extends SimpleBeanEditorDriver<Person, EditorFormPage> {}
@SuppressWarnings("deprecation")
public EditorFormPage() {
super(EditorFormPage.class);
initWidget(uiBinder.createAndBindUi(this));
driver.initialize(this);
Person p = new Person();
p.setName("Alex");
p.setEmail("alex@swm.de");
Date date = new Date();
date.setYear(68);
p.setBirthdate(date);
driver.edit(p);
this.timeTextBox.setValue(date);
this.scheduleTextBox.setValue(date);
// test enum based radio group
radioButtonGroupGeneric.setRenderer(new EnumRenderer());
radioButtonGroupGeneric.setKeyValueProvider(new EnumRenderer());
EnumRenderer.setValues(radioButtonGroupGeneric);
radioButtonGroupGeneric.setValue(EnumRenderer.ExampleEnum.GENERIC_OPTION_3);
// test text area validation
description.addValidator(new IValidator<String>() {
@Override
public String validate(HasValue<String> field) {
String value = field.getValue();
if (value == null || value.length() == 0) {
return "Bitte einen Wert eingeben.";
}
return null;
}
});
}
@UiHandler("saveButton")
void onSaveButtonClicked(ClickEvent e) {
Person edited = driver.flush();
if (driver.hasErrors()) {
Utils.console(driver.getErrors().toString());
}
Window.alert(edited.toString());
}
@Override
public String getName() {
return "Editor form page";
}
@Override
public HeaderPanel getHeaderPanel() {
return header;
}
}