package com.mycompany; import com.mycompany.entity.User; import com.vaadin.data.Item; import com.vaadin.data.validator.BeanValidator; import com.vaadin.ui.*; import java.io.Serializable; import java.lang.reflect.Method; import java.util.Arrays; @SuppressWarnings("serial") public class UserEditor extends Window implements Button.ClickListener, FormFieldFactory { private final Item userItem; private Form editorForm; private Button saveButton; private Button cancelButton; public UserEditor(Item userItem) { this.userItem = userItem; editorForm = new Form(); editorForm.setFormFieldFactory(this); editorForm.setBuffered(true); editorForm.setImmediate(true); editorForm.setItemDataSource(userItem, Arrays.asList("firstName", "lastName", "phoneNumber", "street", "city", "zipCode", "department")); saveButton = new Button("Save", this); cancelButton = new Button("Cancel", this); editorForm.getFooter().addComponent(saveButton); editorForm.getFooter().addComponent(cancelButton); setSizeUndefined(); setContent(editorForm); setCaption(buildCaption()); } /** * @return the caption of the editor window */ private String buildCaption() { return String.format("%s %s", userItem.getItemProperty("firstName") .getValue(), userItem.getItemProperty("lastName").getValue()); } /* * (non-Javadoc) * * @see com.vaadin.ui.Button.ClickListener#buttonClick(com.vaadin.ui.Button. * ClickEvent) */ @Override public void buttonClick(Button.ClickEvent event) { if (event.getButton() == saveButton) { editorForm.commit(); fireEvent(new EditorSavedEvent(this, userItem)); } else if (event.getButton() == cancelButton) { editorForm.discard(); } close(); } /* * (non-Javadoc) * * @see com.vaadin.ui.FormFieldFactory#createField(com.vaadin.data.Item, * java.lang.Object, com.vaadin.ui.Component) */ @Override public Field createField(Item item, Object propertyId, Component uiContext) { Field field = DefaultFieldFactory.get().createField(item, propertyId, uiContext); if (field instanceof TextField) { ((TextField) field).setNullRepresentation(""); } field.addValidator(new BeanValidator(User.class, propertyId .toString())); return field; } public void addListener(EditorSavedListener listener) { try { Method method = EditorSavedListener.class.getDeclaredMethod( "editorSaved", new Class[] { EditorSavedEvent.class }); addListener(EditorSavedEvent.class, listener, method); } catch (final java.lang.NoSuchMethodException e) { // This should never happen throw new java.lang.RuntimeException( "Internal error, editor saved method not found"); } } public void removeListener(EditorSavedListener listener) { removeListener(EditorSavedEvent.class, listener); } public static class EditorSavedEvent extends Component.Event { private Item savedItem; public EditorSavedEvent(Component source, Item savedItem) { super(source); this.savedItem = savedItem; } public Item getSavedItem() { return savedItem; } } public interface EditorSavedListener extends Serializable { public void editorSaved(EditorSavedEvent event); } }