package org.aperteworkflow.util.vaadin.ui; import com.vaadin.data.Item; import com.vaadin.ui.Component; import com.vaadin.ui.DefaultFieldFactory; import com.vaadin.ui.Field; import com.vaadin.ui.Select; import com.vaadin.ui.TextField; public class GenericValueFieldFactory extends DefaultFieldFactory { @Override public Field createField(Item item, Object propertyId, Component uiContext) { Class<?> type = item.getItemProperty(propertyId).getType(); Field field = createFieldByPropertyType(type); field.setCaption(createCaptionByPropertyId(propertyId)); return field; } public static Field createFieldByPropertyType(Class<?> type) { Field field = DefaultFieldFactory.createFieldByPropertyType(type); if (field instanceof TextField && !type.isAssignableFrom(String.class)) { if (type.isEnum()) { Select select = new Select(); for (Object value : type.getEnumConstants()) { select.addItem(value); } field = select; } else { field = new GenericValueTextField(); } } return field; } }