package org.vaadin.viritin.v7; import com.vaadin.annotations.Theme; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.Notification; import java.util.Set; import org.vaadin.addonhelpers.AbstractTest; import org.vaadin.viritin.v7.fields.LabelField; import org.vaadin.viritin.v7.fields.MTextField; import org.vaadin.viritin.v7.fields.MultiSelectTable; import org.vaadin.viritin.v7.form.AbstractForm; import org.vaadin.viritin.layouts.MVerticalLayout; import org.vaadin.viritin.testdomain.Group; import org.vaadin.viritin.testdomain.Person; import org.vaadin.viritin.testdomain.Service; /** * * @author Matti Tahvonen */ @Theme("valo") public class MultiSelectTableWithCustomRelationMaintenance extends AbstractTest { private static final long serialVersionUID = -2682172644856319883L; public static class PersonForm extends AbstractForm<Person> { private static final long serialVersionUID = 4144805837285124445L; private final MTextField firstName = new MTextField("Name"); private final MTextField age = new MTextField("Age"); LabelField<Integer> id = new LabelField<>(Integer.class) .withCaption("ID"); private final MultiSelectTable<Group> groups = new MultiSelectTable<Group>(){ private static final long serialVersionUID = 1229334178491680961L; @Override protected void addRelation(Set<Group> newValues) { super.addRelation(newValues); /* * One could do custom maintenance here for each Group instances */ for (Group g : newValues) { System.out.println("Adding group " + g); } } @Override protected void removeRelation(Set<Group> orphaned) { super.removeRelation(orphaned); /* * One could do custom maintenance here for each Group instances */ for (Group g : orphaned) { System.out.println("Removing group " + g); } } }. withProperties("name") .setOptions(Service.getAvailableGroups()); public PersonForm() { } @Override protected Component createContent() { return new MVerticalLayout(id, firstName, age, groups, getToolbar()); } } @Override public Component getTestComponent() { final PersonForm form = new PersonForm(); form.addValidityChangedListener( new AbstractForm.ValidityChangedListener<Person>() { private static final long serialVersionUID = -3688956596748617476L; @Override public void onValidityChanged( AbstractForm.ValidityChangedEvent<Person> event) { if (event.getComponent().isValid()) { Notification.show("The form is now valid!", Notification.Type.TRAY_NOTIFICATION); } else { Notification.show( "Invalid values in form, clicking save is disabled!"); } } }); 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()); System.out.println("\nAdded relations:"); System.out.println(form.groups.getAllAddedRelations()); System.out.println("\nRemoved relations:"); System.out.println(form.groups.getAllRemovedRelations()); System.out.println("\nAll modified relations:"); System.out.println(form.groups.getAllModifiedRelations()); form.groups.clearModifiedRelations(); } }); 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); } }