package com.vaadin.tests.minitutorials.v7a1; import java.util.Locale; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractReindeerTestUI; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Notification; import com.vaadin.v7.data.util.converter.Converter; import com.vaadin.v7.data.util.converter.Converter.ConversionException; import com.vaadin.v7.ui.TextField; public class StringMyTypeConverter extends AbstractReindeerTestUI { @Override protected void setup(VaadinRequest request) { Name name = new Name("Rudolph", "Reindeer"); final TextField textField = new TextField("Name"); textField.setConverter(new StringToNameConverter()); textField.setConvertedValue(name); addComponent(textField); addComponent(new Button("Submit value", new ClickListener() { @Override public void buttonClick(ClickEvent event) { try { Name name = (Name) textField.getConvertedValue(); Notification.show("First name: " + name.getFirstName() + "<br />Last name: " + name.getLastName()); } catch (ConversionException e) { e.printStackTrace(); Notification.show(e.getCause().getMessage()); } } })); } @Override protected String getTestDescription() { return "Mini tutorial for https://vaadin.com/wiki/-/wiki/Main/Creating%20your%20own%20converter%20for%20String%20-%20MyType%20conversion"; } @Override protected Integer getTicketNumber() { return null; } } class StringToNameConverter implements Converter<String, Name> { @Override public Name convertToModel(String text, Class<? extends Name> targetType, Locale locale) throws ConversionException { if (text == null) { return null; } String[] parts = text.split(" "); if (parts.length != 2) { throw new ConversionException( "Can not convert text to a name: " + text); } return new Name(parts[0], parts[1]); } @Override public String convertToPresentation(Name name, Class<? extends String> targetType, Locale locale) throws ConversionException { if (name == null) { return null; } else { return name.getFirstName() + " " + name.getLastName(); } } @Override public Class<Name> getModelType() { return Name.class; } @Override public Class<String> getPresentationType() { return String.class; } } class Name { private String firstName; private String lastName; public Name(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }