package org.eclipse.osbp.runtime.web.ecview.presentation.vaadin.internal;

import com.vaadin.data.Container;
import com.vaadin.data.Property;
import com.vaadin.ui.Component;
import com.vaadin.ui.DefaultFieldFactory;
import com.vaadin.ui.Field;
import com.vaadin.ui.RichTextArea;
import com.vaadin.ui.TextField;

@SuppressWarnings("serial")
public class CustomTableFieldFactory extends DefaultFieldFactory {
	@SuppressWarnings("rawtypes")
	@Override
	public Field createField(Container container, Object itemId, Object propertyId, Component uiContext) {
		Class<?> clz = container.getType(propertyId);
		if(String.class.isAssignableFrom(clz)) {
	        Property containerProperty = container.getContainerProperty(itemId,
	                propertyId);
	        Class<?> type = containerProperty.getType();
	        if (type == null) {
	            return null;
	        }
	        Field<?> field = new RichTextArea();
	        field.setCaption(createCaptionByPropertyId(propertyId));
			return field;
		} else {
			Field<?> field = new TextField();//super.createField(container, itemId, propertyId, uiContext);
	        field.setCaption(createCaptionByPropertyId(propertyId));
			return field;
		}
	}
}
