package org.vaadin.viritin.it;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.Notification;
import com.vaadin.ui.themes.ValoTheme;
import java.util.List;
import org.vaadin.addonhelpers.AbstractTest;
import org.vaadin.viritin.fields.ElementCollectionField;
import org.vaadin.viritin.fields.EnumSelect;
import org.vaadin.viritin.fields.IntegerField;
import org.vaadin.viritin.fields.LabelField;
import org.vaadin.viritin.fields.MTextField;
import org.vaadin.viritin.form.AbstractForm;
import org.vaadin.viritin.layouts.MVerticalLayout;
import org.vaadin.viritin.testdomain.Address;
import org.vaadin.viritin.testdomain.Address.AddressType;
import org.vaadin.viritin.testdomain.Person;
import org.vaadin.viritin.testdomain.Service;
/**
*
* @author Matti Tahvonen
*/
public class EditPersonV8 extends AbstractTest {
private static final long serialVersionUID = 8480545478837182696L;
public static class AddressRow {
EnumSelect<AddressType> type = new EnumSelect<>(AddressType.class);
MTextField street = new MTextField().withInputPrompt("street");
MTextField city = new MTextField().withInputPrompt("city");
// TODO try to make MBinder that configures basic converters automatically
// e.g. if using basic MTextField for zipCode
IntegerField zipCode = new IntegerField().withPlaceHolder("zip");
{
type.setStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL);
// If you don't want toString presentation of your enums,
// you can do whatwever you want here
type.setItemCaptionGenerator( (AddressType option) -> {
return option.toString().toLowerCase();
}
);
}
}
public static class PersonForm extends AbstractForm<Person> {
private static final long serialVersionUID = -2299890309080845494L;
private final MTextField firstName = new MTextField("Name")
.withAutocompleteOff()
.withAutoCorrectOff()
.withAutoCapitalizeOff()
.withSpellCheckOff();
// TODO figure out what is wrong with IntegerField, not bound properly
private final IntegerField age = new IntegerField("Age");
private final LabelField<Integer> id = new LabelField<Integer>().withCaption("ID");
private final ElementCollectionField<Address, List<Address>> addresses = new ElementCollectionField<Address, List<Address>>(
Address.class, AddressRow.class).withCaption("Addressess")
// .addElementAddedListener(ElementCollections.addedListener)
// .addElementRemovedListener(ElementCollections.removeListener)
;
// private final MultiSelectTable<Group> groups = new MultiSelectTable<Group>().
// withProperties("name")
// .setOptions(Service.getAvailableGroups());
public PersonForm() {
super(Person.class);
}
@Override
protected Component createContent() {
return new MVerticalLayout(id, firstName, age, addresses,
getToolbar());
}
}
@Override
public Component getTestComponent() {
PersonForm form = new PersonForm();
form.getBinder().addStatusChangeListener(event -> {
if (!event.hasValidationErrors()) {
Notification.show("The form is now valid!",
Notification.Type.TRAY_NOTIFICATION);
} else {
Notification.show(
"Invalid values in form, clicking save is disabled!");
}
});
form.getBinder().addValueChangeListener(e -> {
Notification.show("Value change:" + e.getComponent() + " " + e.getValue(),
Notification.Type.TRAY_NOTIFICATION);
});
Person p = Service.getPerson();
Address address = new Address();
address.setCity("Paimio");
address.setStreet("Sampsala");
address.setType(AddressType.Home);
address.setZipCode(1234);
p.getAddresses().add(address);
form.setEntity(p);
form.setSavedHandler(new AbstractForm.SavedHandler<Person>() {
private static final long serialVersionUID = 1008970415395369248L;
@Override
public void onSave(Person entity) {
Notification.show(entity.toString());
}
});
form.setDeleteHandler(new AbstractForm.DeleteHandler<Person>() {
private static final long serialVersionUID = -6298152846013943120L;
@Override
public void onDelete(Person entity) {
Notification.show("Delete: " + entity.toString());
}
});
Button openInPopup = new Button("Open in popup");
openInPopup.addClickListener(new Button.ClickListener() {
private static final long serialVersionUID = 5019806363620874205L;
@Override
public void buttonClick(Button.ClickEvent event) {
final PersonForm form = new PersonForm();
Person p = Service.getPerson();
form.setEntity(p);
form.setSavedHandler(new AbstractForm.SavedHandler<Person>() {
private static final long serialVersionUID = 1008970415395369248L;
@Override
public void onSave(Person entity) {
Notification.show(entity.toString());
}
});
form.setDeleteHandler(new AbstractForm.DeleteHandler<Person>() {
private static final long serialVersionUID = -6298152846013943120L;
@Override
public void onDelete(Person entity) {
Notification.show("Delete: " + entity.toString());
}
});
form.setResetHandler(new AbstractForm.ResetHandler<Person>() {
private static final long serialVersionUID = -1695108652595021734L;
@Override
public void onReset(Person entity) {
Notification.show("Nothing done");
form.getPopup().close();
}
});
form.openInModalPopup();
}
});
return new MVerticalLayout(form, openInPopup);
}
}