package org.vaadin.jefferson.demo.addressbook.content; import org.vaadin.jefferson.Presentation; import org.vaadin.jefferson.content.SelectionControl; import org.vaadin.jefferson.demo.addressbook.domain.Person; import org.vaadin.jefferson.demo.addressbook.domain.PersonContainer; import com.vaadin.data.Container; import com.vaadin.terminal.ExternalResource; import com.vaadin.ui.AbstractSelect; import com.vaadin.ui.Component; import com.vaadin.ui.Link; import com.vaadin.ui.Table; import com.vaadin.ui.Table.ColumnGenerator; @SuppressWarnings("serial") public class PersonList extends SelectionControl<Person> { private Container dataSource; public PersonList(AddressBookView root) { super("Person list", Person.class); dataSource = root.getDataSource(); } @Override public Table createFallback() { return new Table(); } @Override protected AbstractSelect accept(Presentation presentation) { AbstractSelect rendition = super.accept(presentation); rendition.setContainerDataSource(dataSource); rendition.setNullSelectionAllowed(false); if (rendition instanceof Table) { Table table = (Table) rendition; table.setVisibleColumns(PersonContainer.NATURAL_COL_ORDER); table.setColumnHeaders(PersonContainer.COL_HEADERS_ENGLISH); table.addGeneratedColumn("email", new EmailColumn()); } return rendition; } private final static class EmailColumn implements ColumnGenerator { public Component generateCell(Table source, Object itemId, Object columnId) { Person person = (Person) itemId; Link cell = new Link(); cell.setResource(new ExternalResource("mailto:" + person.getEmail())); cell.setCaption(person.getEmail()); return cell; } } }