/* @ITMillApache2LicenseForJavaFiles@ */ package com.vaadin.ui; import java.util.Date; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.data.Property; /** * Default implementation of the the following Field types are used by default: *

* Boolean: Button(switchMode:true).
* Date: DateField(resolution: day).
* Item: Form.
* default field type: TextField. *

* * @author IT Mill Ltd. * @version * @VERSION@ * @since 3.1 */ @SuppressWarnings("serial") public class BaseFieldFactory implements FieldFactory { /** * Creates the field based on type of data. * * * @param type * the type of data presented in field. * @param uiContext * the context where the Field is presented. * * @see com.vaadin.ui.FieldFactory#createField(Class, Component) */ public Field createField(Class type, Component uiContext) { // Null typed properties can not be edited if (type == null) { return null; } // Item field if (Item.class.isAssignableFrom(type)) { return new Form(); } // Date field if (Date.class.isAssignableFrom(type)) { final DateField df = new DateField(); df.setResolution(DateField.RESOLUTION_DAY); return df; } // Boolean field if (Boolean.class.isAssignableFrom(type)) { final Button button = new Button(); button.setSwitchMode(true); button.setImmediate(false); return button; } // Nested form is used by default return new TextField(); } /** * Creates the field based on the datasource property. * * @see com.vaadin.ui.FieldFactory#createField(Property, Component) */ public Field createField(Property property, Component uiContext) { if (property != null) { return createField(property.getType(), uiContext); } else { return null; } } /** * Creates the field based on the item and property id. * * @see com.vaadin.ui.FieldFactory#createField(Item, Object, * Component) */ public Field createField(Item item, Object propertyId, Component uiContext) { if (item != null && propertyId != null) { final Field f = createField(item.getItemProperty(propertyId), uiContext); if (f instanceof AbstractComponent) { String name = propertyId.toString(); if (name.length() > 0) { // If name follows method naming conventions, convert the // name to spaced uppercased text. For example, convert // "firstName" to "First Name" if (name.indexOf(' ') < 0 && name.charAt(0) == Character.toLowerCase(name .charAt(0)) && name.charAt(0) != Character.toUpperCase(name .charAt(0))) { StringBuffer out = new StringBuffer(); out.append(Character.toUpperCase(name.charAt(0))); int i = 1; while (i < name.length()) { int j = i; for (; j < name.length(); j++) { char c = name.charAt(j); if (Character.toLowerCase(c) != c && Character.toUpperCase(c) == c) { break; } } if (j == name.length()) { out.append(name.substring(i)); } else { out.append(name.substring(i, j)); out.append(" " + name.charAt(j)); } i = j + 1; } name = out.toString(); } ((AbstractComponent) f).setCaption(name); } } return f; } else { return null; } } /** * @see com.vaadin.ui.FieldFactory#createField(com.vaadin.data.Container, * java.lang.Object, java.lang.Object, com.vaadin.ui.Component) */ public Field createField(Container container, Object itemId, Object propertyId, Component uiContext) { return createField(container.getContainerProperty(itemId, propertyId), uiContext); } }