package com.vaadin.tests.components.customfield;
import com.vaadin.data.Item;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.Person;
import com.vaadin.ui.Table;
/**
* Demonstrate the use of a form as a custom field within another form.
*/
public abstract class AbstractNestedFormExample extends TestBase {
private NestedPersonForm personForm;
private boolean embeddedAddress;
public void setup(boolean embeddedAddress) {
this.embeddedAddress = embeddedAddress;
addComponent(getPersonTable());
}
/**
* Creates a table with two person objects
*/
public Table getPersonTable() {
Table table = new Table();
table.setPageLength(5);
table.setSelectable(true);
table.setImmediate(true);
table.setNullSelectionAllowed(true);
table.addContainerProperty("Name", String.class, null);
table.addListener(getTableValueChangeListener());
Person person = new Person("Teppo", "Testaaja",
"teppo.testaaja@example.com", "", "Ruukinkatu 2–4", 20540,
"Turku");
Person person2 = new Person("Taina", "Testaaja",
"taina.testaaja@example.com", "", "Ruukinkatu 2–4", 20540,
"Turku");
Item item = table.addItem(person);
item.getItemProperty("Name").setValue(
person.getFirstName() + " " + person.getLastName());
item = table.addItem(person2);
item.getItemProperty("Name").setValue(
person2.getFirstName() + " " + person2.getLastName());
return table;
}
/**
* Creates value change listener for the table
*/
private Property.ValueChangeListener getTableValueChangeListener() {
return new Property.ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
if (personForm != null) {
removeComponent(personForm);
}
if (event.getProperty().getValue() != null) {
personForm = new NestedPersonForm((Person) event
.getProperty().getValue(), embeddedAddress);
personForm.setWidth("350px");
addComponent(personForm);
}
}
};
}
@Override
protected Integer getTicketNumber() {
return null;
}
}