// Path: src/main/java/org/vaadin/easybinder/ui/EComboBox.java
// public class EComboBox<T> extends ComboBox<T> implements HasGenericType<T> {
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	protected Class<T> type;
// 
// 	public EComboBox(Class<T> type, String caption) {
// 		super(caption);
// 		this.type = type;
// 	}
// 
// 	public EComboBox(Class<T> type, String caption, ListDataProvider<T> dataProvider) {
// 		super(caption);
// 		this.type = type;
// 		setDataProvider(dataProvider);
// 	}
// 
// 	public EComboBox(Class<T> type, String caption, Collection<T> items) {
// 		super(caption, items);
// 		this.type = type;
// 	}
// 
// 	public EComboBox(Class<T> type) {
// 		super();
// 		this.type = type;
// 	}
// 
// 	@Override
// 	public Class<T> getGenericType() {
// 		return type;
// 	}
// 
// }


import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.vaadin.easybinder.ui.EComboBox;
import com.googlecode.gentyref.GenericTypeReflector;
import com.vaadin.shared.util.SharedUtil;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.DateField;
import com.vaadin.ui.DateTimeField;
import com.vaadin.ui.Grid;
import com.vaadin.ui.TextField;
import com.vaadin.ui.TwinColSelect;
		addBuildPattern(Float.class, e -> true, e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(float.class, e -> true, e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(Double.class, e -> true, e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(double.class, e -> true, e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(BigInteger.class, e -> true,
				e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(BigDecimal.class, e -> true,
				e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(Character.class, e -> true,
				e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(char.class, e -> true, e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));

		addBuildPattern(Date.class,
				e -> Arrays.asList(e.getAnnotations()).stream().filter(f -> f instanceof Temporal)
						.map(f -> (Temporal) f).filter(f -> f.value() == TemporalType.TIMESTAMP).findAny().isPresent(),
				e -> new DateTimeField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(Date.class,
				e -> !Arrays.asList(e.getAnnotations()).stream().filter(f -> f instanceof Temporal)
						.map(f -> (Temporal) f).filter(f -> f.value() == TemporalType.TIMESTAMP).findAny().isPresent(),
				e -> new DateField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(LocalDate.class, e -> true,
				e -> new DateField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(LocalDateTime.class, e -> true,
				e -> new DateTimeField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(Boolean.class, e -> true, e -> new CheckBox(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(boolean.class, e -> true, e -> new CheckBox(SharedUtil.camelCaseToHumanFriendly(e.getName())));

		addBuildPattern(Enum.class, e -> true, e -> {
			Class<?> clazz = e.getGenericType() != null ? (Class<?>) e.getGenericType() : e.getType();
			@SuppressWarnings({ "rawtypes", "unchecked" })
// Path: src/main/java/org/vaadin/easybinder/ui/EComboBox.java
// public class EComboBox<T> extends ComboBox<T> implements HasGenericType<T> {
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	protected Class<T> type;
// 
// 	public EComboBox(Class<T> type, String caption) {
// 		super(caption);
// 		this.type = type;
// 	}
// 
// 	public EComboBox(Class<T> type, String caption, ListDataProvider<T> dataProvider) {
// 		super(caption);
// 		this.type = type;
// 		setDataProvider(dataProvider);
// 	}
// 
// 	public EComboBox(Class<T> type, String caption, Collection<T> items) {
// 		super(caption, items);
// 		this.type = type;
// 	}
// 
// 	public EComboBox(Class<T> type) {
// 		super();
// 		this.type = type;
// 	}
// 
// 	@Override
// 	public Class<T> getGenericType() {
// 		return type;
// 	}
// 
// }


// Path: src/main/java/org/vaadin/easybinder/data/ComponentFactoryRegistry.java
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.vaadin.easybinder.ui.EComboBox;
import com.googlecode.gentyref.GenericTypeReflector;
import com.vaadin.shared.util.SharedUtil;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.DateField;
import com.vaadin.ui.DateTimeField;
import com.vaadin.ui.Grid;
import com.vaadin.ui.TextField;
import com.vaadin.ui.TwinColSelect;

		addBuildPattern(Float.class, e -> true, e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(float.class, e -> true, e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(Double.class, e -> true, e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(double.class, e -> true, e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(BigInteger.class, e -> true,
				e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(BigDecimal.class, e -> true,
				e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(Character.class, e -> true,
				e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(char.class, e -> true, e -> new TextField(SharedUtil.camelCaseToHumanFriendly(e.getName())));

		addBuildPattern(Date.class,
				e -> Arrays.asList(e.getAnnotations()).stream().filter(f -> f instanceof Temporal)
						.map(f -> (Temporal) f).filter(f -> f.value() == TemporalType.TIMESTAMP).findAny().isPresent(),
				e -> new DateTimeField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(Date.class,
				e -> !Arrays.asList(e.getAnnotations()).stream().filter(f -> f instanceof Temporal)
						.map(f -> (Temporal) f).filter(f -> f.value() == TemporalType.TIMESTAMP).findAny().isPresent(),
				e -> new DateField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(LocalDate.class, e -> true,
				e -> new DateField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(LocalDateTime.class, e -> true,
				e -> new DateTimeField(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(Boolean.class, e -> true, e -> new CheckBox(SharedUtil.camelCaseToHumanFriendly(e.getName())));
		addBuildPattern(boolean.class, e -> true, e -> new CheckBox(SharedUtil.camelCaseToHumanFriendly(e.getName())));

		addBuildPattern(Enum.class, e -> true, e -> {
			Class<?> clazz = e.getGenericType() != null ? (Class<?>) e.getGenericType() : e.getType();
			@SuppressWarnings({ "rawtypes", "unchecked" })
			Component c = new EComboBox(clazz, SharedUtil.camelCaseToHumanFriendly(e.getName()),