package org.vaadin.viritin.v7; import com.vaadin.annotations.Theme; import com.vaadin.ui.Component; import com.vaadin.v7.ui.TextField; import org.vaadin.addonhelpers.AbstractTest; import org.vaadin.viritin.v7.MBeanFieldGroup; import org.vaadin.viritin.layouts.MVerticalLayout; import org.vaadin.viritin.NestedPropertyTest; import org.vaadin.viritin.v7.fields.MTable; import org.vaadin.viritin.v7.fields.MTextField; import org.vaadin.viritin.v7.fields.MValueChangeEvent; import org.vaadin.viritin.v7.fields.MValueChangeListener; import org.vaadin.viritin.v7.form.AbstractForm; @Theme("valo") public class MTableWithNestedProperty extends AbstractTest { public static class Form extends AbstractForm<NestedPropertyTest.Entity> { private static final long serialVersionUID = -3164966078873765005L; private final TextField property = new MTextField("property"); // Appears not to work, core issue!? @PropertyId("detail.property") private final TextField nestedPropertyField = new MTextField("detail.property"); @Override protected Component createContent() { return new MVerticalLayout(property, nestedPropertyField, getToolbar()); } @Override protected MBeanFieldGroup<NestedPropertyTest.Entity> bindEntity( NestedPropertyTest.Entity entity) { final MBeanFieldGroup<NestedPropertyTest.Entity> mbfg = super.bindEntity(entity); mbfg.bind(nestedPropertyField, "detail.property"); return mbfg; } } @Override public Component getTestComponent() { final MTable<NestedPropertyTest.Entity> table = new MTable(NestedPropertyTest.getEntities(3)) .withProperties( "id", "property", "detail.property", // "property" field from object in "detail" field "numbers[2]", // third object from collection in field "integers" "stringToInteger(foo)", // Integer with key "foo" from map stringToInteger "detailList[1].detail2.property", "detailList[1].moreDetails[1].property" ) .withHeight("300px"); final Form form = new Form(); form.setSavedHandler( new AbstractForm.SavedHandler<NestedPropertyTest.Entity>() { private static final long serialVersionUID = 5142651230686909799L; @Override public void onSave(NestedPropertyTest.Entity entity) { table.refreshRowCache(); } }); table.addMValueChangeListener(new MValueChangeListener<NestedPropertyTest.Entity>() { private static final long serialVersionUID = -2918207986940924806L; @Override public void valueChange( MValueChangeEvent<NestedPropertyTest.Entity> event) { if(event.getValue() != null) { form.setEntity(event.getValue()); } } }); return new MVerticalLayout( table, form); } }