You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sk...@apache.org on 2008/07/03 23:35:00 UTC

svn commit: r673822 [5/7] - in /myfaces/orchestra/trunk: examples/src/main/java/org/apache/myfaces/examples/annotations/ examples/src/main/java/org/apache/myfaces/examples/ballot/backings/ examples/src/main/java/org/apache/myfaces/examples/ballot/dao/ ...

Modified: myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilder.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilder.java?rev=673822&r1=673821&r2=673822&view=diff
==============================================================================
--- myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilder.java (original)
+++ myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilder.java Thu Jul  3 14:34:56 2008
@@ -72,1065 +72,1065 @@
  */
 public class JsfGuiBuilder extends GuiBuilder
 {
-	private FacesContext context;
-	private ELContext elcontext;
-	private NewComponentListener newComponentListener;
-	private String backingEntityPrefix;
-
-	private static final Map<String, JsfGuiElementBuilder> builderMap = new TreeMap<String, JsfGuiElementBuilder>();
-
-	public JsfGuiBuilder()
-	{
-	}
-
-	/**
-	 * Add a specialized builder. This builder will be used instead of any default.
-	 */
-	public static void addElementBuilder(Class<?> elementType, JsfGuiElementBuilder builder)
-	{
-		builderMap.put(elementType.getName(), builder);
-	}
-
-	public String getBackingEntityPrefix()
-	{
-		return backingEntityPrefix;
-	}
-
-	public void setBackingEntityPrefix(String backingEntityPrefix)
-	{
-		this.backingEntityPrefix = backingEntityPrefix;
-	}
-
-	public NewComponentListener getNewComponentListener()
-	{
-		return newComponentListener;
-	}
-
-	public void setNewComponentListener(NewComponentListener newComponentListener)
-	{
-		this.newComponentListener = newComponentListener;
-	}
-
-	public void setContext(FacesContext context)
-	{
-		this.context = context;
-	}
-
-	public FacesContext getContext()
-	{
-		return context;
-	}
-
-	public void setELContext(ELContext elcontext)
-	{
-		this.elcontext = elcontext;
-	}
-
-	public ELContext getELContext()
-	{
-		return this.elcontext;
-	}
-
-	/* fulfill the interface */
-	@Override
-	public void createOutputText(MetaField field)
-	{
-		UIComponent cmp = doCreateOutputText(field);
-		fireNewComponent(field, cmp);
-	}
-
-	@Override
-	public void createInputDate(MetaField field)
-	{
-		UIComponent cmp;
-		if (!isFieldDisplayOnly(field))
-		{
-			cmp = doCreateInputDate(field);
-		}
-		else
-		{
-			cmp = doCreateOutputText(field);
-		}
-		fireNewComponent(field, cmp);
-	}
-
-	@Override
-	public void createInputText(MetaField field)
-	{
-		UIComponent cmp;
-		if (!isFieldDisplayOnly(field))
-		{
-			cmp = doCreateInputText(field);
-		}
-		else
-		{
-			cmp = doCreateOutputText(field);
-		}
-		fireNewComponent(field, cmp);
-	}
-
-	@Override
-	public void createInputNumber(MetaField field)
-	{
-		UIComponent cmp;
-		if (!isFieldDisplayOnly(field))
-		{
-			cmp = doCreateInputNumber(field);
-		}
-		else
-		{
-			cmp = doCreateOutputText(field);
-		}
-		fireNewComponent(field, cmp);
-	}
-
-	@Override
-	public void createInputBoolean(MetaField field)
-	{
-		UIComponent cmp;
-		if (!isFieldDisplayOnly(field))
-		{
-			cmp = doCreateInputBoolean(field);
-		}
-		else
-		{
-			cmp = doCreateOutputText(field);
-		}
-		fireNewComponent(field, cmp);
-	}
-
-	@Override
-	public void createSelectOneMenu(MetaField field)
-	{
-		UIComponent cmp;
-		if (!isFieldDisplayOnly(field))
-		{
-			cmp = doCreateSelectOneMenu(field);
-		}
-		else
-		{
-			cmp = doCreateOutputText(field);
-		}
-		fireNewComponent(field, cmp);
-	}
-
-	@Override
-	public void createSearchFor(MetaField field)
-	{
-		UIComponent cmp;
-		if (!isFieldDisplayOnly(field))
-		{
-			cmp = doCreateSearchFor(field);
-		}
-		else
-		{
-			cmp = doCreateOutputText(field);
-		}
-		fireNewComponent(field, cmp);
-	}
-
-	@Override
-	public void createSearchForSelectMenu(MetaField field)
-	{
-		UIComponent cmp;
-		if (!isFieldDisplayOnly(field))
-		{
-			cmp = doCreateSearchForSelectMenu(field);
-		}
-		else
-		{
-			cmp = doCreateOutputText(field);
-		}
-		fireNewComponent(field, cmp);
-	}
-
-	@Override
-	public void createNative(MetaField field)
-	{
-		Object component = field.getWantedComponent();
-		if (!(component instanceof UIComponent))
-		{
-			throw new IllegalArgumentException("wanted component for field " + field.getName() + " not a UIComponent");
-		}
-
-		UIComponent uinew = cloneComponent((UIComponent) component);
-
-		doCreateNative(field, uinew);
-
-		fireNewComponent(field, uinew);
-	}
-
-	public static UIComponent cloneComponent(UIComponent uicomponent)
-	{
-		// a naive try to clone a component
-		UIComponent uinew;
-		try
-		{
-			uinew = uicomponent.getClass().newInstance();
-		}
-		catch (InstantiationException e)
-		{
-			throw new OrchestraException(e);
-		}
-		catch (IllegalAccessException e)
-		{
-			throw new OrchestraException(e);
-		}
-		uinew.restoreState(FacesContext.getCurrentInstance(), uicomponent.saveState(FacesContext.getCurrentInstance()));
-		return uinew;
-	}
-
-	/* do the hard work */
-	public HtmlOutputText doCreateOutputText(MetaField field)
-	{
-		HtmlOutputText cmp = doCreateOutputTextComponent();
-		initOutputDefaults(cmp, field);
-		return cmp;
-	}
-
-	public HtmlOutputText doCreateOutputTextComponent()
-	{
-		HtmlOutputText cmp = (HtmlOutputText) context.getApplication()
-			.createComponent("javax.faces.HtmlOutputText");
-		return cmp;
-	}
-
-	/**
-	 * Create an HtmlOutputLabel component, ie some text that
-	 * specifically describes another input component.
-	 * <p>
-	 * The labelKey parameter is translated using a resource-bundle
-	 * if possible. If no translation is available then the labelKey
-	 * text is used directly.
-	 */
-	public HtmlOutputLabel doCreateOutputLabel(String labelKey)
-	{
-		HtmlOutputLabel cmp = doCreateOutputLabelComponent();
-		initDefaults(cmp, null);
-		cmp.setValue(translateText(labelKey, labelKey));
-		return cmp;
-	}
-
-	/**
-	 * Create an HtmlOutputText component, ie a component that displays
-	 * a string.
-	 * <p>
-	 * Unlike doCreateOutputLabel, the parameter is the exact string to
-	 * be displayed, not a key into a resource-bundle. This method is used
-	 * to create components wrapping all sorts of strings, only some of
-	 * which may be "translatable" via a resource bundle. If an output
-	 * text component needs to contain translated text, then pass the
-	 * translated value in as the parameter.
-	 */
-	public HtmlOutputText doCreateOutputText(String text)
-	{
-		HtmlOutputText cmp = doCreateOutputTextComponent();
-		initDefaults(cmp, null);
-		cmp.setValue(text);
-		return cmp;
-	}
-
-	public HtmlOutputLabel doCreateOutputLabelComponent()
-	{
-		HtmlOutputLabel cmp = (HtmlOutputLabel) context.getApplication()
-			.createComponent("javax.faces.HtmlOutputLabel");
-		return cmp;
-	}
-
-	public HtmlInputText doCreateInputDate(MetaField field)
-	{
-		HtmlInputText cmp = doCreateInputDateComponent(field);
-		initInputDefaults(cmp, field);
-		// DateTimeConverter cnv = doCreateDateConverter();
-		// cmp.setConverter(cnv);
-		return cmp;
-	}
-
-	public HtmlInputText doCreateInputDateComponent(MetaField field)
-	{
-		HtmlInputText cmp = doCreateInputText(field);
-		return cmp;
-	}
-
-	public Converter doCreateConverter(MetaField field)
-	{
-		if (field.getConverterClass() != null)
-		{
-			return context.getApplication().createConverter(field.getConverterClass());
-		}
-
-		if (field.getConverterId() != null)
-		{
-			return context.getApplication().createConverter(field.getConverterId());
-		}
-
-		if (field.getConverterBean() != null)
-		{
-			String beanName = field.getConverterBean();
-			return new SerializableConverter(beanName);
-		}
-
-		Class<?> type = field.getType();
-		if (type == null)
-		{
-			return null;
-		}
-
-		if (Boolean.class.isAssignableFrom(type) || boolean.class.isAssignableFrom(type))
-		{
-			return context.getApplication().createConverter(BooleanConverter.CONVERTER_ID);
-		}
-		if (Character.class.isAssignableFrom(type) || char.class.isAssignableFrom(type))
-		{
-			return context.getApplication().createConverter(CharacterConverter.CONVERTER_ID);
-		}
-		if (Byte.class.isAssignableFrom(type) || byte.class.isAssignableFrom(type))
-		{
-			return context.getApplication().createConverter(ByteConverter.CONVERTER_ID);
-		}
-		if (Short.class.isAssignableFrom(type) || short.class.isAssignableFrom(type))
-		{
-			return context.getApplication().createConverter(ShortConverter.CONVERTER_ID);
-		}
-		if (Integer.class.isAssignableFrom(type) || int.class.isAssignableFrom(type))
-		{
-			return context.getApplication().createConverter(IntegerConverter.CONVERTER_ID);
-		}
-		if (Long.class.isAssignableFrom(type) || long.class.isAssignableFrom(type))
-		{
-			return context.getApplication().createConverter(LongConverter.CONVERTER_ID);
-		}
-		if (Float.class.isAssignableFrom(type) || float.class.isAssignableFrom(type))
-		{
-			return context.getApplication().createConverter(FloatConverter.CONVERTER_ID);
-		}
-		if (Double.class.isAssignableFrom(type) || double.class.isAssignableFrom(type))
-		{
-			// use the number converter to have locale sensitive input
-			return context.getApplication().createConverter(NumberConverter.CONVERTER_ID);
-		}
-		if (BigInteger.class.isAssignableFrom(type))
-		{
-			return context.getApplication().createConverter(BigIntegerConverter.CONVERTER_ID);
-		}
-		if (BigDecimal.class.isAssignableFrom(type))
-		{
-			return context.getApplication().createConverter(BigDecimalConverter.CONVERTER_ID);
-		}
-		if (Date.class.isAssignableFrom(type))
-		{
-			return doCreateDateConverter(field);
-		}
-
-		return null;
-	}
-
-	public DateTimeConverter doCreateDateConverter(MetaField field)
-	{
-		DateTimeConverter cnv = (DateTimeConverter) context.getApplication()
-			.createConverter("javax.faces.DateTime");
-		if (field.getTemporalType() != null)
-		{
-			switch (field.getTemporalType())
-			{
-				case DATE:
-					cnv.setType("date");
-					break;
-				case TIME:
-					cnv.setType("time");
-					break;
-				case TIMESTAMP:
-					cnv.setType("both");
-					break;
-			}
-		}
-		else
-		{
-			cnv.setType("both");
-		}
-		cnv.setDateStyle("short");
-		cnv.setTimeStyle("medium");
-		return cnv;
-	}
-
-	public HtmlInputText doCreateInputText(MetaField field)
-	{
-		HtmlInputText cmp = doCreateInputTextComponent();
-		initInputDefaults(cmp, field);
-		if (Boolean.FALSE.equals(field.getCanWrite()))
-		{
-			cmp.setReadonly(true);
-		}
-		if (Boolean.TRUE.equals(field.getDisabled()))
-		{
-			cmp.setDisabled(true);
-		}
-		return cmp;
-	}
-
-	public HtmlInputText doCreateInputTextComponent()
-	{
-		HtmlInputText cmp = (HtmlInputText) context.getApplication()
-			.createComponent("javax.faces.HtmlInputText");
-		return cmp;
-	}
-
-	public UISelectBoolean doCreateInputBoolean(MetaField field)
-	{
-		HtmlSelectBooleanCheckbox cmp = doCreateInputBooleanComponent();
-		initInputDefaults(cmp, field);
-		if (Boolean.FALSE.equals(field.getCanWrite()))
-		{
-			cmp.setReadonly(true);
-		}
-		if (Boolean.TRUE.equals(field.getDisabled()))
-		{
-			cmp.setDisabled(true);
-		}
-		return cmp;
-	}
-
-	public HtmlSelectBooleanCheckbox doCreateInputBooleanComponent()
-	{
-		HtmlSelectBooleanCheckbox cmp = (HtmlSelectBooleanCheckbox) context
-			.getApplication().createComponent("javax.faces.HtmlSelectBooleanCheckbox");
-		return cmp;
-	}
-
-	public HtmlInputText doCreateInputNumber(MetaField field)
-	{
-		HtmlInputText cmp = doCreateInputText(field);
-		cmp.setStyleClass("ff_inputNumber");
-		return cmp;
-	}
-
-	public HtmlSelectOneMenu doCreateSelectOneMenu(MetaField field)
-	{
-		HtmlSelectOneMenu cmp = doCreateSelectOneMenuComponent();
-		initInputDefaults(cmp, field);
-		initSelections(field, cmp);
-
-		if (Boolean.FALSE.equals(field.getCanWrite()))
-		{
-			cmp.setReadonly(true);
-		}
-		if (Boolean.TRUE.equals(field.getDisabled()))
-		{
-			cmp.setDisabled(true);
-		}
-
-		return cmp;
-	}
-
-	public HtmlSelectManyListbox doCreateSelectManyListbox(MetaField field)
-	{
-		HtmlSelectManyListbox cmp = doCreateSelectManyListboxComponent();
-		initInputDefaults(cmp, field);
-		initSelections(field, cmp);
-
-		if (Boolean.FALSE.equals(field.getCanWrite()))
-		{
-			cmp.setReadonly(true);
-		}
-		if (Boolean.TRUE.equals(field.getDisabled()))
-		{
-			cmp.setDisabled(true);
-		}
-
-		return cmp;
-	}
-
-	public HtmlSelectOneMenu doCreateSelectOneMenuComponent()
-	{
-		HtmlSelectOneMenu cmp = (HtmlSelectOneMenu) context.getApplication()
-			.createComponent("javax.faces.HtmlSelectOneMenu");
-		return cmp;
-	}
-
-	public HtmlSelectManyListbox doCreateSelectManyListboxComponent()
-	{
-		HtmlSelectManyListbox cmp = (HtmlSelectManyListbox) context.getApplication()
-			.createComponent("javax.faces.HtmlSelectManyListbox");
-		return cmp;
-	}
-
-	@SuppressWarnings("unchecked")
-	public UIComponent doCreateSearchFor(MetaField field)
-	{
-		throw new UnsupportedOperationException();
-		/*
-		HtmlPanelGroup panel = doCreatePanelGroupComponent();
-
-		HtmlCommandLink command = doCreateCommandLink(field);
-		// avoid duplicate id
-		command.setId("cmd_" + command.getId());
-		command.setValue("...");
-		command.setStyleClass("ff_searchLink");
-		command.setImmediate(true);
-
-		command.getChildren().add(
-				createParameter(SEARCH_ENTITY_TYPE, field.getType().getName()));
-		command.getChildren().add(
-				createParameter(SEARCH_ENTITY_BINDING,
-						createValueBindingString(field)));
-
-		Converter converter = context.getApplication().createConverter(field.getType());
-		HtmlOutputText text = doCreateOutputText(field);
-		if (converter != null)
-		{
-			text.setConverter(converter);
-		}
-		panel.getChildren().add(text);
-
-		panel.getChildren().add(command);
-
-		panel.setId("pnl_" + command.getId());
-
-		return panel;
-		*/
-	}
-
-	@SuppressWarnings("unchecked")
-	public UIInput doCreateSearchForSelectMenu(MetaField field)
-	{
-		UIInput select;
-
-		if (!field.getAllowMultipleSelections())
-		{
-			select = doCreateSelectOneMenu(field);
-		}
-		else
-		{
-			select = doCreateSelectManyListbox(field);
-		}
-
-		/*
-		SelectionSourceEnum selectionSource;
-		if (field.isEntityType())
-		{
-			selectionSource = SelectionSourceEnum.relation;
-		}
-		else
-		{
-			selectionSource = SelectionSourceEnum.distinct;
-		}
-		if (field.getSelectionSource() != null)
-		{
-			selectionSource = field.getSelectionSource();
-		}
-		if (!field.isEntityType() && SelectionSourceEnum.relation.equals(selectionSource))
-		{
-			throw new IllegalArgumentException("cant use selectionSource 'relation' for property " + field.getName());
-		}
-		*/
-
-		/*
-			String itemSource;
-			String itemSourceName;
-			switch (selectionSource)
-			{
-			case manual:
-				itemSource=null;
-				itemSourceName=null;
-				break;
-			case relation:
-				itemSource="relationValues";
-				itemSourceName=field.getType().getName();
-				break;
-			case distinct:
-				itemSource="distinctValues";
-				itemSourceName=field.getName();
-				break;
-			default:
-				throw new IllegalArgumentException("dont know how to handle selectionSource: " + field.getSelectionSource());
-			}
-		*/
-
-		if (!field.getAllowMultipleSelections() && !Boolean.TRUE.equals(field.getRequired()))
-		{
-			// not required - and a menu, so add the EMPTY entry
-			UISelectItem item = new UISelectItem();
-			// item.setItemValue(ObjectIdentifierConverter.SELECT_NULL_OBJECT);
-			item.setItemValue(ObjectSerializationConverter.SELECT_NULL_OBJECT);
-
-			String labelKey = "SelectAll." + field.getName();
-
-			item.setItemLabel(translateText(labelKey, ""));
-			select.getChildren().add(item);
-		}
-
-		MethodBinding mbValues = context.getApplication().createMethodBinding(
-			field.getDataSource(),
-			new Class[]{String.class});
-		MethodBinding mbLabels = context.getApplication().createMethodBinding(
-			field.getDataSourceDescription(),
-			new Class[]{field.getType()});
-
-		UISelectItems items = new UISelectItems();
-		items.setValueBinding("value",
-			new ValueBindingDataSourceAdapter(mbValues, mbLabels));
-		select.getChildren().add(items);
+    private FacesContext context;
+    private ELContext elcontext;
+    private NewComponentListener newComponentListener;
+    private String backingEntityPrefix;
+
+    private static final Map<String, JsfGuiElementBuilder> builderMap = new TreeMap<String, JsfGuiElementBuilder>();
+
+    public JsfGuiBuilder()
+    {
+    }
+
+    /**
+     * Add a specialized builder. This builder will be used instead of any default.
+     */
+    public static void addElementBuilder(Class<?> elementType, JsfGuiElementBuilder builder)
+    {
+        builderMap.put(elementType.getName(), builder);
+    }
+
+    public String getBackingEntityPrefix()
+    {
+        return backingEntityPrefix;
+    }
+
+    public void setBackingEntityPrefix(String backingEntityPrefix)
+    {
+        this.backingEntityPrefix = backingEntityPrefix;
+    }
+
+    public NewComponentListener getNewComponentListener()
+    {
+        return newComponentListener;
+    }
+
+    public void setNewComponentListener(NewComponentListener newComponentListener)
+    {
+        this.newComponentListener = newComponentListener;
+    }
+
+    public void setContext(FacesContext context)
+    {
+        this.context = context;
+    }
+
+    public FacesContext getContext()
+    {
+        return context;
+    }
+
+    public void setELContext(ELContext elcontext)
+    {
+        this.elcontext = elcontext;
+    }
+
+    public ELContext getELContext()
+    {
+        return this.elcontext;
+    }
+
+    /* fulfill the interface */
+    @Override
+    public void createOutputText(MetaField field)
+    {
+        UIComponent cmp = doCreateOutputText(field);
+        fireNewComponent(field, cmp);
+    }
+
+    @Override
+    public void createInputDate(MetaField field)
+    {
+        UIComponent cmp;
+        if (!isFieldDisplayOnly(field))
+        {
+            cmp = doCreateInputDate(field);
+        }
+        else
+        {
+            cmp = doCreateOutputText(field);
+        }
+        fireNewComponent(field, cmp);
+    }
+
+    @Override
+    public void createInputText(MetaField field)
+    {
+        UIComponent cmp;
+        if (!isFieldDisplayOnly(field))
+        {
+            cmp = doCreateInputText(field);
+        }
+        else
+        {
+            cmp = doCreateOutputText(field);
+        }
+        fireNewComponent(field, cmp);
+    }
+
+    @Override
+    public void createInputNumber(MetaField field)
+    {
+        UIComponent cmp;
+        if (!isFieldDisplayOnly(field))
+        {
+            cmp = doCreateInputNumber(field);
+        }
+        else
+        {
+            cmp = doCreateOutputText(field);
+        }
+        fireNewComponent(field, cmp);
+    }
+
+    @Override
+    public void createInputBoolean(MetaField field)
+    {
+        UIComponent cmp;
+        if (!isFieldDisplayOnly(field))
+        {
+            cmp = doCreateInputBoolean(field);
+        }
+        else
+        {
+            cmp = doCreateOutputText(field);
+        }
+        fireNewComponent(field, cmp);
+    }
+
+    @Override
+    public void createSelectOneMenu(MetaField field)
+    {
+        UIComponent cmp;
+        if (!isFieldDisplayOnly(field))
+        {
+            cmp = doCreateSelectOneMenu(field);
+        }
+        else
+        {
+            cmp = doCreateOutputText(field);
+        }
+        fireNewComponent(field, cmp);
+    }
+
+    @Override
+    public void createSearchFor(MetaField field)
+    {
+        UIComponent cmp;
+        if (!isFieldDisplayOnly(field))
+        {
+            cmp = doCreateSearchFor(field);
+        }
+        else
+        {
+            cmp = doCreateOutputText(field);
+        }
+        fireNewComponent(field, cmp);
+    }
+
+    @Override
+    public void createSearchForSelectMenu(MetaField field)
+    {
+        UIComponent cmp;
+        if (!isFieldDisplayOnly(field))
+        {
+            cmp = doCreateSearchForSelectMenu(field);
+        }
+        else
+        {
+            cmp = doCreateOutputText(field);
+        }
+        fireNewComponent(field, cmp);
+    }
+
+    @Override
+    public void createNative(MetaField field)
+    {
+        Object component = field.getWantedComponent();
+        if (!(component instanceof UIComponent))
+        {
+            throw new IllegalArgumentException("wanted component for field " + field.getName() + " not a UIComponent");
+        }
+
+        UIComponent uinew = cloneComponent((UIComponent) component);
+
+        doCreateNative(field, uinew);
+
+        fireNewComponent(field, uinew);
+    }
+
+    public static UIComponent cloneComponent(UIComponent uicomponent)
+    {
+        // a naive try to clone a component
+        UIComponent uinew;
+        try
+        {
+            uinew = uicomponent.getClass().newInstance();
+        }
+        catch (InstantiationException e)
+        {
+            throw new OrchestraException(e);
+        }
+        catch (IllegalAccessException e)
+        {
+            throw new OrchestraException(e);
+        }
+        uinew.restoreState(FacesContext.getCurrentInstance(), uicomponent.saveState(FacesContext.getCurrentInstance()));
+        return uinew;
+    }
+
+    /* do the hard work */
+    public HtmlOutputText doCreateOutputText(MetaField field)
+    {
+        HtmlOutputText cmp = doCreateOutputTextComponent();
+        initOutputDefaults(cmp, field);
+        return cmp;
+    }
+
+    public HtmlOutputText doCreateOutputTextComponent()
+    {
+        HtmlOutputText cmp = (HtmlOutputText) context.getApplication()
+            .createComponent("javax.faces.HtmlOutputText");
+        return cmp;
+    }
+
+    /**
+     * Create an HtmlOutputLabel component, ie some text that
+     * specifically describes another input component.
+     * <p>
+     * The labelKey parameter is translated using a resource-bundle
+     * if possible. If no translation is available then the labelKey
+     * text is used directly.
+     */
+    public HtmlOutputLabel doCreateOutputLabel(String labelKey)
+    {
+        HtmlOutputLabel cmp = doCreateOutputLabelComponent();
+        initDefaults(cmp, null);
+        cmp.setValue(translateText(labelKey, labelKey));
+        return cmp;
+    }
+
+    /**
+     * Create an HtmlOutputText component, ie a component that displays
+     * a string.
+     * <p>
+     * Unlike doCreateOutputLabel, the parameter is the exact string to
+     * be displayed, not a key into a resource-bundle. This method is used
+     * to create components wrapping all sorts of strings, only some of
+     * which may be "translatable" via a resource bundle. If an output
+     * text component needs to contain translated text, then pass the
+     * translated value in as the parameter.
+     */
+    public HtmlOutputText doCreateOutputText(String text)
+    {
+        HtmlOutputText cmp = doCreateOutputTextComponent();
+        initDefaults(cmp, null);
+        cmp.setValue(text);
+        return cmp;
+    }
+
+    public HtmlOutputLabel doCreateOutputLabelComponent()
+    {
+        HtmlOutputLabel cmp = (HtmlOutputLabel) context.getApplication()
+            .createComponent("javax.faces.HtmlOutputLabel");
+        return cmp;
+    }
+
+    public HtmlInputText doCreateInputDate(MetaField field)
+    {
+        HtmlInputText cmp = doCreateInputDateComponent(field);
+        initInputDefaults(cmp, field);
+        // DateTimeConverter cnv = doCreateDateConverter();
+        // cmp.setConverter(cnv);
+        return cmp;
+    }
+
+    public HtmlInputText doCreateInputDateComponent(MetaField field)
+    {
+        HtmlInputText cmp = doCreateInputText(field);
+        return cmp;
+    }
+
+    public Converter doCreateConverter(MetaField field)
+    {
+        if (field.getConverterClass() != null)
+        {
+            return context.getApplication().createConverter(field.getConverterClass());
+        }
+
+        if (field.getConverterId() != null)
+        {
+            return context.getApplication().createConverter(field.getConverterId());
+        }
+
+        if (field.getConverterBean() != null)
+        {
+            String beanName = field.getConverterBean();
+            return new SerializableConverter(beanName);
+        }
+
+        Class<?> type = field.getType();
+        if (type == null)
+        {
+            return null;
+        }
+
+        if (Boolean.class.isAssignableFrom(type) || boolean.class.isAssignableFrom(type))
+        {
+            return context.getApplication().createConverter(BooleanConverter.CONVERTER_ID);
+        }
+        if (Character.class.isAssignableFrom(type) || char.class.isAssignableFrom(type))
+        {
+            return context.getApplication().createConverter(CharacterConverter.CONVERTER_ID);
+        }
+        if (Byte.class.isAssignableFrom(type) || byte.class.isAssignableFrom(type))
+        {
+            return context.getApplication().createConverter(ByteConverter.CONVERTER_ID);
+        }
+        if (Short.class.isAssignableFrom(type) || short.class.isAssignableFrom(type))
+        {
+            return context.getApplication().createConverter(ShortConverter.CONVERTER_ID);
+        }
+        if (Integer.class.isAssignableFrom(type) || int.class.isAssignableFrom(type))
+        {
+            return context.getApplication().createConverter(IntegerConverter.CONVERTER_ID);
+        }
+        if (Long.class.isAssignableFrom(type) || long.class.isAssignableFrom(type))
+        {
+            return context.getApplication().createConverter(LongConverter.CONVERTER_ID);
+        }
+        if (Float.class.isAssignableFrom(type) || float.class.isAssignableFrom(type))
+        {
+            return context.getApplication().createConverter(FloatConverter.CONVERTER_ID);
+        }
+        if (Double.class.isAssignableFrom(type) || double.class.isAssignableFrom(type))
+        {
+            // use the number converter to have locale sensitive input
+            return context.getApplication().createConverter(NumberConverter.CONVERTER_ID);
+        }
+        if (BigInteger.class.isAssignableFrom(type))
+        {
+            return context.getApplication().createConverter(BigIntegerConverter.CONVERTER_ID);
+        }
+        if (BigDecimal.class.isAssignableFrom(type))
+        {
+            return context.getApplication().createConverter(BigDecimalConverter.CONVERTER_ID);
+        }
+        if (Date.class.isAssignableFrom(type))
+        {
+            return doCreateDateConverter(field);
+        }
+
+        return null;
+    }
+
+    public DateTimeConverter doCreateDateConverter(MetaField field)
+    {
+        DateTimeConverter cnv = (DateTimeConverter) context.getApplication()
+            .createConverter("javax.faces.DateTime");
+        if (field.getTemporalType() != null)
+        {
+            switch (field.getTemporalType())
+            {
+                case DATE:
+                    cnv.setType("date");
+                    break;
+                case TIME:
+                    cnv.setType("time");
+                    break;
+                case TIMESTAMP:
+                    cnv.setType("both");
+                    break;
+            }
+        }
+        else
+        {
+            cnv.setType("both");
+        }
+        cnv.setDateStyle("short");
+        cnv.setTimeStyle("medium");
+        return cnv;
+    }
+
+    public HtmlInputText doCreateInputText(MetaField field)
+    {
+        HtmlInputText cmp = doCreateInputTextComponent();
+        initInputDefaults(cmp, field);
+        if (Boolean.FALSE.equals(field.getCanWrite()))
+        {
+            cmp.setReadonly(true);
+        }
+        if (Boolean.TRUE.equals(field.getDisabled()))
+        {
+            cmp.setDisabled(true);
+        }
+        return cmp;
+    }
+
+    public HtmlInputText doCreateInputTextComponent()
+    {
+        HtmlInputText cmp = (HtmlInputText) context.getApplication()
+            .createComponent("javax.faces.HtmlInputText");
+        return cmp;
+    }
+
+    public UISelectBoolean doCreateInputBoolean(MetaField field)
+    {
+        HtmlSelectBooleanCheckbox cmp = doCreateInputBooleanComponent();
+        initInputDefaults(cmp, field);
+        if (Boolean.FALSE.equals(field.getCanWrite()))
+        {
+            cmp.setReadonly(true);
+        }
+        if (Boolean.TRUE.equals(field.getDisabled()))
+        {
+            cmp.setDisabled(true);
+        }
+        return cmp;
+    }
+
+    public HtmlSelectBooleanCheckbox doCreateInputBooleanComponent()
+    {
+        HtmlSelectBooleanCheckbox cmp = (HtmlSelectBooleanCheckbox) context
+            .getApplication().createComponent("javax.faces.HtmlSelectBooleanCheckbox");
+        return cmp;
+    }
+
+    public HtmlInputText doCreateInputNumber(MetaField field)
+    {
+        HtmlInputText cmp = doCreateInputText(field);
+        cmp.setStyleClass("ff_inputNumber");
+        return cmp;
+    }
+
+    public HtmlSelectOneMenu doCreateSelectOneMenu(MetaField field)
+    {
+        HtmlSelectOneMenu cmp = doCreateSelectOneMenuComponent();
+        initInputDefaults(cmp, field);
+        initSelections(field, cmp);
+
+        if (Boolean.FALSE.equals(field.getCanWrite()))
+        {
+            cmp.setReadonly(true);
+        }
+        if (Boolean.TRUE.equals(field.getDisabled()))
+        {
+            cmp.setDisabled(true);
+        }
+
+        return cmp;
+    }
+
+    public HtmlSelectManyListbox doCreateSelectManyListbox(MetaField field)
+    {
+        HtmlSelectManyListbox cmp = doCreateSelectManyListboxComponent();
+        initInputDefaults(cmp, field);
+        initSelections(field, cmp);
+
+        if (Boolean.FALSE.equals(field.getCanWrite()))
+        {
+            cmp.setReadonly(true);
+        }
+        if (Boolean.TRUE.equals(field.getDisabled()))
+        {
+            cmp.setDisabled(true);
+        }
+
+        return cmp;
+    }
+
+    public HtmlSelectOneMenu doCreateSelectOneMenuComponent()
+    {
+        HtmlSelectOneMenu cmp = (HtmlSelectOneMenu) context.getApplication()
+            .createComponent("javax.faces.HtmlSelectOneMenu");
+        return cmp;
+    }
+
+    public HtmlSelectManyListbox doCreateSelectManyListboxComponent()
+    {
+        HtmlSelectManyListbox cmp = (HtmlSelectManyListbox) context.getApplication()
+            .createComponent("javax.faces.HtmlSelectManyListbox");
+        return cmp;
+    }
+
+    @SuppressWarnings("unchecked")
+    public UIComponent doCreateSearchFor(MetaField field)
+    {
+        throw new UnsupportedOperationException();
+        /*
+        HtmlPanelGroup panel = doCreatePanelGroupComponent();
+
+        HtmlCommandLink command = doCreateCommandLink(field);
+        // avoid duplicate id
+        command.setId("cmd_" + command.getId());
+        command.setValue("...");
+        command.setStyleClass("ff_searchLink");
+        command.setImmediate(true);
+
+        command.getChildren().add(
+                createParameter(SEARCH_ENTITY_TYPE, field.getType().getName()));
+        command.getChildren().add(
+                createParameter(SEARCH_ENTITY_BINDING,
+                        createValueBindingString(field)));
+
+        Converter converter = context.getApplication().createConverter(field.getType());
+        HtmlOutputText text = doCreateOutputText(field);
+        if (converter != null)
+        {
+            text.setConverter(converter);
+        }
+        panel.getChildren().add(text);
+
+        panel.getChildren().add(command);
+
+        panel.setId("pnl_" + command.getId());
+
+        return panel;
+        */
+    }
+
+    @SuppressWarnings("unchecked")
+    public UIInput doCreateSearchForSelectMenu(MetaField field)
+    {
+        UIInput select;
+
+        if (!field.getAllowMultipleSelections())
+        {
+            select = doCreateSelectOneMenu(field);
+        }
+        else
+        {
+            select = doCreateSelectManyListbox(field);
+        }
+
+        /*
+        SelectionSourceEnum selectionSource;
+        if (field.isEntityType())
+        {
+            selectionSource = SelectionSourceEnum.relation;
+        }
+        else
+        {
+            selectionSource = SelectionSourceEnum.distinct;
+        }
+        if (field.getSelectionSource() != null)
+        {
+            selectionSource = field.getSelectionSource();
+        }
+        if (!field.isEntityType() && SelectionSourceEnum.relation.equals(selectionSource))
+        {
+            throw new IllegalArgumentException("cant use selectionSource 'relation' for property " + field.getName());
+        }
+        */
+
+        /*
+            String itemSource;
+            String itemSourceName;
+            switch (selectionSource)
+            {
+            case manual:
+                itemSource=null;
+                itemSourceName=null;
+                break;
+            case relation:
+                itemSource="relationValues";
+                itemSourceName=field.getType().getName();
+                break;
+            case distinct:
+                itemSource="distinctValues";
+                itemSourceName=field.getName();
+                break;
+            default:
+                throw new IllegalArgumentException("dont know how to handle selectionSource: " + field.getSelectionSource());
+            }
+        */
+
+        if (!field.getAllowMultipleSelections() && !Boolean.TRUE.equals(field.getRequired()))
+        {
+            // not required - and a menu, so add the EMPTY entry
+            UISelectItem item = new UISelectItem();
+            // item.setItemValue(ObjectIdentifierConverter.SELECT_NULL_OBJECT);
+            item.setItemValue(ObjectSerializationConverter.SELECT_NULL_OBJECT);
+
+            String labelKey = "SelectAll." + field.getName();
+
+            item.setItemLabel(translateText(labelKey, ""));
+            select.getChildren().add(item);
+        }
+
+        MethodBinding mbValues = context.getApplication().createMethodBinding(
+            field.getDataSource(),
+            new Class[]{String.class});
+        MethodBinding mbLabels = context.getApplication().createMethodBinding(
+            field.getDataSourceDescription(),
+            new Class[]{field.getType()});
+
+        UISelectItems items = new UISelectItems();
+        items.setValueBinding("value",
+            new ValueBindingDataSourceAdapter(mbValues, mbLabels));
+        select.getChildren().add(items);
 
 /*
-		if (itemSource != null)
-		{
-			UISelectItems items = new UISelectItems();
-			items.setValueBinding("value",
-					context.getApplication().createValueBinding(
-						"#{" + backingBeanPrefix + "." + itemSource + "['" + itemSourceName + "']}"));
-			select.getChildren().add(items);
-		}
+        if (itemSource != null)
+        {
+            UISelectItems items = new UISelectItems();
+            items.setValueBinding("value",
+                    context.getApplication().createValueBinding(
+                        "#{" + backingBeanPrefix + "." + itemSource + "['" + itemSourceName + "']}"));
+            select.getChildren().add(items);
+        }
 */
 
-		Converter converter;
-		/*
-		if (field.isEntityType() || SelectionSourceEnum.relation.equals(selectionSource))
-		{
-			// we know this must be an entity, so persist its id only
-			converter = new ObjectIdentifierConverter();
-		}
-		else
-		*/
-		{
-			// use the whole object as value - phu - any better idea?
-			converter = new ObjectSerializationConverter();
-		}
-		select.setConverter(converter);
-
-		return select;
-	}
-
-	/*
-	public HtmlCommandLink doCreateCommandLink(FieldInterface field)
-	{
-		HtmlCommandLink command = doCreateCommandLinkComponent();
-		iniCommandDefaults(command, field, "searchAction", null);
-		return command;
-	}
-	*/
-
-	/*
-	public HtmlCommandLink doCreateCommandLinkComponent()
-	{
-		HtmlCommandLink command = (HtmlCommandLink) context.getApplication()
-			.createComponent("javax.faces.HtmlCommandLink");
-		return command;
-	}
-	*/
-
-	public HtmlPanelGroup doCreatePanelGroupComponent()
-	{
-		HtmlPanelGroup panelGroup = (HtmlPanelGroup) context.getApplication()
-			.createComponent("javax.faces.HtmlPanelGroup");
-		return panelGroup;
-	}
-
-	public void doCreateNative(MetaField field, UIComponent uicomponent)
-	{
-		initDefaults(uicomponent, field);
-		initValueBinding(uicomponent, field);
-	}
-
-	public UIParameter createParameter(String name, String value)
-	{
-		UIParameter parameter = (UIParameter) context.getApplication()
-			.createComponent("javax.faces.Parameter");
-		parameter.setName(name);
-		parameter.setValue(value);
-		return parameter;
-	}
-
-	/**
-	 * jo, we made a component, create a possible label and fire its creation.
-	 */
-	@SuppressWarnings("unchecked")
-	public void fireNewComponent(MetaField field, UIComponent cmp)
-	{
-		UIOutput labelCmp = createLabelFor(field.getBaseName(), cmp);
-
-		cmp.getAttributes().put(DynaForm.DYNA_FORM_CREATED, Boolean.TRUE);
-
-		labelCmp.getAttributes().put(DynaForm.DYNA_FORM_CREATED, Boolean.TRUE);
-
-		newComponentListener.newComponent(field.getName(), labelCmp, cmp);
-	}
-
-	/**
-	 * Create a label for the specified component using the specified text.
-	 * <p>
-	 * If the component (or one of its children) is an input component, then an
-	 * HtmlOutputLabel component is created, with the "for" attribute referencing
-	 * the id of the input component. Otherwise a plain HtmlOutputText component
-	 * is created.
-	 */
-	public UIOutput createLabelFor(String labelKey, UIComponent cmp)
-	{
-		UIOutput labelCmp;
-		UIInput inputCmp = findInputComponent(cmp);
-		if (inputCmp != null)
-		{
-			HtmlOutputLabel label = doCreateOutputLabel(labelKey);
-			label.setFor(cmp.getId());
-			labelCmp = label;
-		}
-		else
-		{
-			// method doCreateOutputText does not internally translate keys,
-			// so do so here.
-			String labelText = translateText(labelKey, labelKey);
-			labelCmp = doCreateOutputText(labelText);
-		}
-		return labelCmp;
-	}
-
-	/**
-	 * Return the first UIInput component in the tree of components starting at
-	 * the specified node (including the node itself).
-	 */
-	public UIInput findInputComponent(UIComponent cmp)
-	{
-		if (cmp instanceof UIInput)
-		{
-			return (UIInput) cmp;
-		}
-
-		@SuppressWarnings("unchecked")
-		List<UIComponent> children = cmp.getChildren();
-		if (children != null)
-		{
-			for (Object child : children)
-			{
-				if (child instanceof UIComponent)
-				{
-					UIInput input = findInputComponent((UIComponent) child);
-					if (input != null)
-					{
-						return input;
-					}
-				}
-			}
-		}
-
-		return null;
-	}
-
-	/* inits */
-
-	/**
-	 * init global defaults like id
-	 */
-	public void initDefaults(UIComponent cmp, MetaField field)
-	{
-		if (field != null)
-		{
-			cmp.setId(getFieldId(field));
-		}
-	}
-
-	protected String getFieldId(MetaField field)
-	{
-		String idCandidate = field.getExternalName();
-		if (idCandidate == null)
-		{
-			idCandidate = field.getName();
-		}
-		return getCleanedNameForId(idCandidate);
-	}
-
-	/**
-	 * remove all not allowed characters for an jsf ID from the name
-	 */
-	protected String getCleanedNameForId(String name)
-	{
-		StringBuffer ret = new StringBuffer(name.length());
-		for (int i = 0; i < name.length(); i++)
-		{
-			char c = name.charAt(i);
-			if (Character.isDigit(c) || Character.isLetter(c) || c == '_' || c == '-')
-			{
-				ret.append(c);
-			}
-			else
-			{
-				ret.append("_");
-			}
-		}
-		return ret.toString();
-	}
-
-	/**
-	 * init global defaults for output fields
-	 */
-	public void initOutputDefaults(UIOutput cmp, MetaField field)
-	{
-		initDefaults(cmp, field);
-		initValueBinding(cmp, field);
-		initConverter(cmp, field);
-	}
-
-	/**
-	 * init the default value binding
-	 */
-	public void initValueBinding(UIComponent cmp, MetaField field)
-	{
-		String vbString = createValueBindingString(field);
-		_FacesUtils.setValueExpression(cmp, getELContext(), context, vbString);
-	}
-
-	protected String createValueBindingString(MetaField field)
-	{
-		return "#{" + backingEntityPrefix + "." + field.getExternalName() + "}";
-	}
-
-	/**
-	 * init defaults specifically for commands
-	public void iniCommandDefaults(UICommand cmp, FieldInterface field,
-								   String action, String actionListener)
-	{
-		initDefaults(cmp, field);
-
-		if (action == null)
-		{
-			action = "commandAction";
-		}
-
-		cmp.setAction(getContext().getApplication()
-			.createMethodBinding(
-			"#{" + backingBeanPrefix + "." + action
-				+ "}", null));
-
-		if (actionListener != null)
-		{
-			cmp.setActionListener(getContext().getApplication()
-				.createMethodBinding(
-				"#{" + backingBeanPrefix + "." + actionListener
-					+ "}", new Class[]
-				{ActionEvent.class}));
-		}
-	}
-	 */
-
-	/**
-	 * setup all the validators, maxlength, size, ... for HtmlInputText fields
-	 */
-	public void initInputDefaults(HtmlInputText cmp, MetaField field)
-	{
-		initInputDefaults((UIInput) cmp, field);
-
-		int size = -1;
-		int maxlength = -1;
-		Double minValue = null;
-		Double maxValue = null;
-
-		TypeInfos.Info typeInfo = TypeInfos.getInfo(field.getType());
-		if (typeInfo != null)
-		{
-			// init from constants
-			maxlength = typeInfo.getLength();
-			size = maxlength;
-			minValue = typeInfo.getMinValue();
-			maxValue = typeInfo.getMaxValue();
-		}
-
-		if (field.getMaxSize() != null)
-		{
-			maxlength = field.getMaxSize();
-			size = maxlength;
-		}
-		if (field.getMinSize() != null)
-		{
-			size = field.getMinSize();
-		}
-		if (field.getMinValue() != null)
-		{
-			minValue = field.getMinValue();
-		}
-		if (field.getMaxValue() != null)
-		{
-			maxValue = field.getMaxValue();
-		}
-
-		if (maxlength != -1)
-		{
-			cmp.setMaxlength(maxlength);
-		}
-
-		if (field.getDisplaySize() != null)
-		{
-			size = field.getDisplaySize();
-		}
-		else
-		{
-			if (field.getMinSize() == null)
-			{
-				// adjust automatically generated size info
-				if (typeInfo != null && typeInfo.isNumber() && size > 10)
-				{
-					size = 10;
-				}
-				else if (size > 60) // max
-				{
-					size = 60;
-				}
-			}
-		}
-
-		if (size > -1)
-		{
-			cmp.setSize(size);
-		}
-
-		attachRangeValidator(cmp, minValue, maxValue);
-		attachLengthValidator(cmp, field.getMinSize() != null ? field.getMinSize() : 0, maxlength);
-	}
-
-	protected void attachRangeValidator(HtmlInputText cmp, Double minValue, Double maxValue)
-	{
-		DoubleRangeValidator vld = null;
-		if (minValue != null)
-		{
-			if (vld == null)
-			{
-				vld = new DoubleRangeValidator();
-			}
-			vld.setMinimum(minValue);
-		}
-		if (maxValue != null)
-		{
-			if (vld == null)
-			{
-				vld = new DoubleRangeValidator();
-			}
-			vld.setMaximum(maxValue);
-		}
-
-		if (vld != null)
-		{
-			cmp.addValidator(vld);
-		}
-	}
-
-	protected void attachLengthValidator(HtmlInputText cmp, int minSize, int maxSize)
-	{
-		LengthValidator vld = null;
-		if (minSize != -1)
-		{
-			if (vld == null)
-			{
-				vld = new LengthValidator();
-			}
-			vld.setMinimum(minSize);
-		}
-		if (maxSize != -1)
-		{
-			if (vld == null)
-			{
-				vld = new LengthValidator();
-			}
-			vld.setMaximum(maxSize);
-		}
-
-		if (vld != null)
-		{
-			cmp.addValidator(vld);
-		}
-	}
-
-	/**
-	 * setup defaults for input fields like required
-	 */
-	public void initInputDefaults(UIInput cmp, MetaField field)
-	{
-		initDefaults(cmp, field);
-		initValueBinding(cmp, field);
-
-		if (Boolean.TRUE.equals(field.getRequired()))
-		{
-			cmp.setRequired(true);
-		}
-
-		initConverter(cmp, field);
-	}
-
-	/**
-	 * setup a converter if required
-	 */
-	public void initConverter(UIOutput cmp, MetaField field)
-	{
-		// if there is no converter setup one now.
-		// we need this if the binding point to a map instead to a bean.
-		// For a map JSF cant determine the wanted value type
-		if (cmp.getConverter() == null)
-		{
-			String dataSourceDescription = field.getDataSourceDescription();
-			if ((Boolean.TRUE.equals(field.getDisplayOnly()) || isFieldDisplayOnly(field))
-				&& dataSourceDescription != null)
-			{
-				// create a special converter for display-only based on the dataSource
-
-				MethodBinding mbLabel = FacesContext.getCurrentInstance().getApplication().createMethodBinding(
-					dataSourceDescription,
-					new Class[]
-						{
-							field.getType()
-						});
-
-				cmp.setConverter(new DataSourceLabelConverter(mbLabel));
-			}
-			else
-			{
-				Converter converter = doCreateConverter(field);
-				if (converter != null)
-				{
-					cmp.setConverter(converter);
-				}
-			}
-		}
-	}
-
-	/**
-	 * insert possible selection items
-	 */
-	@SuppressWarnings("unchecked")
-	public void initSelections(MetaField field, UIComponent cmp)
-	{
-		if (field.getAllowedSelections() == null)
-		{
-			return;
-		}
-
-		Selection[] selections = field.getAllowedSelections();
-		for (Selection selection : selections)
-		{
-			UISelectItem si = new UISelectItem();
-			String labelText = selection.getLabel();
-			si.setItemLabel(translateText(labelText, labelText));
-			si.setItemValue(selection.getValue());
-			cmp.getChildren().add(si);
-		}
-	}
-
-	@Override
-	protected boolean buildField(MetaField field)
-	{
-		String id = getFieldId(field);
-		if (newComponentListener.containsComponent(id))
-		{
-			return true;
-		}
-
-		if (field.getType() != null)
-		{
-			JsfGuiElementBuilder builder = builderMap.get(field.getType().getName());
-			if (builder != null)
-			{
-				if (builder.buildElement(this, field))
-				{
-					return true;
-				}
-			}
-		}
+        Converter converter;
+        /*
+        if (field.isEntityType() || SelectionSourceEnum.relation.equals(selectionSource))
+        {
+            // we know this must be an entity, so persist its id only
+            converter = new ObjectIdentifierConverter();
+        }
+        else
+        */
+        {
+            // use the whole object as value - phu - any better idea?
+            converter = new ObjectSerializationConverter();
+        }
+        select.setConverter(converter);
+
+        return select;
+    }
+
+    /*
+    public HtmlCommandLink doCreateCommandLink(FieldInterface field)
+    {
+        HtmlCommandLink command = doCreateCommandLinkComponent();
+        iniCommandDefaults(command, field, "searchAction", null);
+        return command;
+    }
+    */
+
+    /*
+    public HtmlCommandLink doCreateCommandLinkComponent()
+    {
+        HtmlCommandLink command = (HtmlCommandLink) context.getApplication()
+            .createComponent("javax.faces.HtmlCommandLink");
+        return command;
+    }
+    */
+
+    public HtmlPanelGroup doCreatePanelGroupComponent()
+    {
+        HtmlPanelGroup panelGroup = (HtmlPanelGroup) context.getApplication()
+            .createComponent("javax.faces.HtmlPanelGroup");
+        return panelGroup;
+    }
+
+    public void doCreateNative(MetaField field, UIComponent uicomponent)
+    {
+        initDefaults(uicomponent, field);
+        initValueBinding(uicomponent, field);
+    }
+
+    public UIParameter createParameter(String name, String value)
+    {
+        UIParameter parameter = (UIParameter) context.getApplication()
+            .createComponent("javax.faces.Parameter");
+        parameter.setName(name);
+        parameter.setValue(value);
+        return parameter;
+    }
+
+    /**
+     * jo, we made a component, create a possible label and fire its creation.
+     */
+    @SuppressWarnings("unchecked")
+    public void fireNewComponent(MetaField field, UIComponent cmp)
+    {
+        UIOutput labelCmp = createLabelFor(field.getBaseName(), cmp);
+
+        cmp.getAttributes().put(DynaForm.DYNA_FORM_CREATED, Boolean.TRUE);
+
+        labelCmp.getAttributes().put(DynaForm.DYNA_FORM_CREATED, Boolean.TRUE);
+
+        newComponentListener.newComponent(field.getName(), labelCmp, cmp);
+    }
+
+    /**
+     * Create a label for the specified component using the specified text.
+     * <p>
+     * If the component (or one of its children) is an input component, then an
+     * HtmlOutputLabel component is created, with the "for" attribute referencing
+     * the id of the input component. Otherwise a plain HtmlOutputText component
+     * is created.
+     */
+    public UIOutput createLabelFor(String labelKey, UIComponent cmp)
+    {
+        UIOutput labelCmp;
+        UIInput inputCmp = findInputComponent(cmp);
+        if (inputCmp != null)
+        {
+            HtmlOutputLabel label = doCreateOutputLabel(labelKey);
+            label.setFor(cmp.getId());
+            labelCmp = label;
+        }
+        else
+        {
+            // method doCreateOutputText does not internally translate keys,
+            // so do so here.
+            String labelText = translateText(labelKey, labelKey);
+            labelCmp = doCreateOutputText(labelText);
+        }
+        return labelCmp;
+    }
+
+    /**
+     * Return the first UIInput component in the tree of components starting at
+     * the specified node (including the node itself).
+     */
+    public UIInput findInputComponent(UIComponent cmp)
+    {
+        if (cmp instanceof UIInput)
+        {
+            return (UIInput) cmp;
+        }
+
+        @SuppressWarnings("unchecked")
+        List<UIComponent> children = cmp.getChildren();
+        if (children != null)
+        {
+            for (Object child : children)
+            {
+                if (child instanceof UIComponent)
+                {
+                    UIInput input = findInputComponent((UIComponent) child);
+                    if (input != null)
+                    {
+                        return input;
+                    }
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /* inits */
+
+    /**
+     * init global defaults like id
+     */
+    public void initDefaults(UIComponent cmp, MetaField field)
+    {
+        if (field != null)
+        {
+            cmp.setId(getFieldId(field));
+        }
+    }
+
+    protected String getFieldId(MetaField field)
+    {
+        String idCandidate = field.getExternalName();
+        if (idCandidate == null)
+        {
+            idCandidate = field.getName();
+        }
+        return getCleanedNameForId(idCandidate);
+    }
+
+    /**
+     * remove all not allowed characters for an jsf ID from the name
+     */
+    protected String getCleanedNameForId(String name)
+    {
+        StringBuffer ret = new StringBuffer(name.length());
+        for (int i = 0; i < name.length(); i++)
+        {
+            char c = name.charAt(i);
+            if (Character.isDigit(c) || Character.isLetter(c) || c == '_' || c == '-')
+            {
+                ret.append(c);
+            }
+            else
+            {
+                ret.append("_");
+            }
+        }
+        return ret.toString();
+    }
+
+    /**
+     * init global defaults for output fields
+     */
+    public void initOutputDefaults(UIOutput cmp, MetaField field)
+    {
+        initDefaults(cmp, field);
+        initValueBinding(cmp, field);
+        initConverter(cmp, field);
+    }
+
+    /**
+     * init the default value binding
+     */
+    public void initValueBinding(UIComponent cmp, MetaField field)
+    {
+        String vbString = createValueBindingString(field);
+        _FacesUtils.setValueExpression(cmp, getELContext(), context, vbString);
+    }
+
+    protected String createValueBindingString(MetaField field)
+    {
+        return "#{" + backingEntityPrefix + "." + field.getExternalName() + "}";
+    }
+
+    /**
+     * init defaults specifically for commands
+    public void iniCommandDefaults(UICommand cmp, FieldInterface field,
+                                   String action, String actionListener)
+    {
+        initDefaults(cmp, field);
+
+        if (action == null)
+        {
+            action = "commandAction";
+        }
+
+        cmp.setAction(getContext().getApplication()
+            .createMethodBinding(
+            "#{" + backingBeanPrefix + "." + action
+                + "}", null));
+
+        if (actionListener != null)
+        {
+            cmp.setActionListener(getContext().getApplication()
+                .createMethodBinding(
+                "#{" + backingBeanPrefix + "." + actionListener
+                    + "}", new Class[]
+                {ActionEvent.class}));
+        }
+    }
+     */
+
+    /**
+     * setup all the validators, maxlength, size, ... for HtmlInputText fields
+     */
+    public void initInputDefaults(HtmlInputText cmp, MetaField field)
+    {
+        initInputDefaults((UIInput) cmp, field);
+
+        int size = -1;
+        int maxlength = -1;
+        Double minValue = null;
+        Double maxValue = null;
+
+        TypeInfos.Info typeInfo = TypeInfos.getInfo(field.getType());
+        if (typeInfo != null)
+        {
+            // init from constants
+            maxlength = typeInfo.getLength();
+            size = maxlength;
+            minValue = typeInfo.getMinValue();
+            maxValue = typeInfo.getMaxValue();
+        }
+
+        if (field.getMaxSize() != null)
+        {
+            maxlength = field.getMaxSize();
+            size = maxlength;
+        }
+        if (field.getMinSize() != null)
+        {
+            size = field.getMinSize();
+        }
+        if (field.getMinValue() != null)
+        {
+            minValue = field.getMinValue();
+        }
+        if (field.getMaxValue() != null)
+        {
+            maxValue = field.getMaxValue();
+        }
+
+        if (maxlength != -1)
+        {
+            cmp.setMaxlength(maxlength);
+        }
+
+        if (field.getDisplaySize() != null)
+        {
+            size = field.getDisplaySize();
+        }
+        else
+        {
+            if (field.getMinSize() == null)
+            {
+                // adjust automatically generated size info
+                if (typeInfo != null && typeInfo.isNumber() && size > 10)
+                {
+                    size = 10;
+                }
+                else if (size > 60) // max
+                {
+                    size = 60;
+                }
+            }
+        }
+
+        if (size > -1)
+        {
+            cmp.setSize(size);
+        }
+
+        attachRangeValidator(cmp, minValue, maxValue);
+        attachLengthValidator(cmp, field.getMinSize() != null ? field.getMinSize() : 0, maxlength);
+    }
+
+    protected void attachRangeValidator(HtmlInputText cmp, Double minValue, Double maxValue)
+    {
+        DoubleRangeValidator vld = null;
+        if (minValue != null)
+        {
+            if (vld == null)
+            {
+                vld = new DoubleRangeValidator();
+            }
+            vld.setMinimum(minValue);
+        }
+        if (maxValue != null)
+        {
+            if (vld == null)
+            {
+                vld = new DoubleRangeValidator();
+            }
+            vld.setMaximum(maxValue);
+        }
+
+        if (vld != null)
+        {
+            cmp.addValidator(vld);
+        }
+    }
+
+    protected void attachLengthValidator(HtmlInputText cmp, int minSize, int maxSize)
+    {
+        LengthValidator vld = null;
+        if (minSize != -1)
+        {
+            if (vld == null)
+            {
+                vld = new LengthValidator();
+            }
+            vld.setMinimum(minSize);
+        }
+        if (maxSize != -1)
+        {
+            if (vld == null)
+            {
+                vld = new LengthValidator();
+            }
+            vld.setMaximum(maxSize);
+        }
+
+        if (vld != null)
+        {
+            cmp.addValidator(vld);
+        }
+    }
+
+    /**
+     * setup defaults for input fields like required
+     */
+    public void initInputDefaults(UIInput cmp, MetaField field)
+    {
+        initDefaults(cmp, field);
+        initValueBinding(cmp, field);
+
+        if (Boolean.TRUE.equals(field.getRequired()))
+        {
+            cmp.setRequired(true);
+        }
+
+        initConverter(cmp, field);
+    }
+
+    /**
+     * setup a converter if required
+     */
+    public void initConverter(UIOutput cmp, MetaField field)
+    {
+        // if there is no converter setup one now.
+        // we need this if the binding point to a map instead to a bean.
+        // For a map JSF cant determine the wanted value type
+        if (cmp.getConverter() == null)
+        {
+            String dataSourceDescription = field.getDataSourceDescription();
+            if ((Boolean.TRUE.equals(field.getDisplayOnly()) || isFieldDisplayOnly(field))
+                && dataSourceDescription != null)
+            {
+                // create a special converter for display-only based on the dataSource
+
+                MethodBinding mbLabel = FacesContext.getCurrentInstance().getApplication().createMethodBinding(
+                    dataSourceDescription,
+                    new Class[]
+                        {
+                            field.getType()
+                        });
+
+                cmp.setConverter(new DataSourceLabelConverter(mbLabel));
+            }
+            else
+            {
+                Converter converter = doCreateConverter(field);
+                if (converter != null)
+                {
+                    cmp.setConverter(converter);
+                }
+            }
+        }
+    }
+
+    /**
+     * insert possible selection items
+     */
+    @SuppressWarnings("unchecked")
+    public void initSelections(MetaField field, UIComponent cmp)
+    {
+        if (field.getAllowedSelections() == null)
+        {
+            return;
+        }
+
+        Selection[] selections = field.getAllowedSelections();
+        for (Selection selection : selections)
+        {
+            UISelectItem si = new UISelectItem();
+            String labelText = selection.getLabel();
+            si.setItemLabel(translateText(labelText, labelText));
+            si.setItemValue(selection.getValue());
+            cmp.getChildren().add(si);
+        }
+    }
+
+    @Override
+    protected boolean buildField(MetaField field)
+    {
+        String id = getFieldId(field);
+        if (newComponentListener.containsComponent(id))
+        {
+            return true;
+        }
+
+        if (field.getType() != null)
+        {
+            JsfGuiElementBuilder builder = builderMap.get(field.getType().getName());
+            if (builder != null)
+            {
+                if (builder.buildElement(this, field))
+                {
+                    return true;
+                }
+            }
+        }
 
-		return super.buildField(field);
-	}
+        return super.buildField(field);
+    }
 }
\ No newline at end of file

Modified: myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilderDecorator.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilderDecorator.java?rev=673822&r1=673821&r2=673822&view=diff
==============================================================================
--- myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilderDecorator.java (original)
+++ myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilderDecorator.java Thu Jul  3 14:34:56 2008
@@ -41,300 +41,300 @@
  */
 public class JsfGuiBuilderDecorator extends JsfGuiBuilder
 {
-	private final JsfGuiBuilder original;
+    private final JsfGuiBuilder original;
 
-	public JsfGuiBuilderDecorator(JsfGuiBuilder original)
-	{
-		this.original = original;
-	}
-
-	public JsfGuiBuilder getOriginal()
-	{
-		return original;
-	}
-
-	public void createInputBoolean(MetaField field)
-	{
-		original.createInputBoolean(field);
-	}
-
-	public void createInputDate(MetaField field)
-	{
-		original.createInputDate(field);
-	}
-
-	public void createInputNumber(MetaField field)
-	{
-		original.createInputNumber(field);
-	}
-
-	public void createInputText(MetaField field)
-	{
-		original.createInputText(field);
-	}
-
-	public UIOutput createLabelFor(String labelText, UIComponent cmp)
-	{
-		return original.createLabelFor(labelText, cmp);
-	}
-
-	public void createNative(MetaField field)
-	{
-		original.createNative(field);
-	}
-
-	public void createOutputText(MetaField field)
-	{
-		original.createOutputText(field);
-	}
-
-	public UIParameter createParameter(String name, String value)
-	{
-		return original.createParameter(name, value);
-	}
-
-	public void createSearchFor(MetaField field)
-	{
-		original.createSearchFor(field);
-	}
-
-	/*
-	public void createSearchForSelectMenu(MetaField field)
-	{
-		original.createSearchForSelectMenu(field);
-	}
-	*/
-
-	public void createSelectOneMenu(MetaField field)
-	{
-		original.createSelectOneMenu(field);
-	}
-
-	/*
-	public HtmlCommandLink doCreateCommandLinkComponent()
-	{
-		return original.doCreateCommandLinkComponent();
-	}
-	*/
-
-	public DateTimeConverter doCreateDateConverter(MetaField field)
-	{
-		return original.doCreateDateConverter(field);
-	}
-
-	public UISelectBoolean doCreateInputBoolean(MetaField field)
-	{
-		return original.doCreateInputBoolean(field);
-	}
-
-	public HtmlSelectBooleanCheckbox doCreateInputBooleanComponent()
-	{
-		return original.doCreateInputBooleanComponent();
-	}
-
-	public HtmlInputText doCreateInputDate(MetaField field)
-	{
-		return original.doCreateInputDate(field);
-	}
-
-	public HtmlInputText doCreateInputDateComponent(MetaField field)
-	{
-		return original.doCreateInputDateComponent(field);
-	}
-
-	public HtmlInputText doCreateInputNumber(MetaField field)
-	{
-		return original.doCreateInputNumber(field);
-	}
-
-	public HtmlInputText doCreateInputText(MetaField field)
-	{
-		return original.doCreateInputText(field);
-	}
-
-	public HtmlInputText doCreateInputTextComponent()
-	{
-		return original.doCreateInputTextComponent();
-	}
-
-	public void doCreateNative(MetaField field, UIComponent uicomponent)
-	{
-		original.doCreateNative(field, uicomponent);
-	}
-
-	public HtmlOutputLabel doCreateOutputLabel(String text)
-	{
-		return original.doCreateOutputLabel(text);
-	}
-
-	public HtmlOutputLabel doCreateOutputLabelComponent()
-	{
-		return original.doCreateOutputLabelComponent();
-	}
-
-	public HtmlOutputText doCreateOutputText(MetaField field)
-	{
-		return original.doCreateOutputText(field);
-	}
-
-	public HtmlOutputText doCreateOutputText(String text)
-	{
-		return original.doCreateOutputText(text);
-	}
-
-	public HtmlOutputText doCreateOutputTextComponent()
-	{
-		return original.doCreateOutputTextComponent();
-	}
-
-	public HtmlPanelGroup doCreatePanelGroupComponent()
-	{
-		return original.doCreatePanelGroupComponent();
-	}
-
-	public UIComponent doCreateSearchFor(MetaField field)
-	{
-		return original.doCreateSearchFor(field);
-	}
-
-	public HtmlSelectOneMenu doCreateSelectOneMenu(MetaField field)
-	{
-		return original.doCreateSelectOneMenu(field);
-	}
-
-	public HtmlSelectOneMenu doCreateSelectOneMenuComponent()
-	{
-		return original.doCreateSelectOneMenuComponent();
-	}
-
-	public UIInput findInputComponent(UIComponent cmp)
-	{
-		return original.findInputComponent(cmp);
-	}
-
-	public void fireNewComponent(MetaField field, UIComponent cmp)
-	{
-		original.fireNewComponent(field, cmp);
-	}
-
-	/*
-	public String getBackingBeanPrefix()
-	{
-		return original.getBackingBeanPrefix();
-	}
-	*/
-
-	public String getBackingEntityPrefix()
-	{
-		return original.getBackingEntityPrefix();
-	}
-
-	public FacesContext getContext()
-	{
-		return original.getContext();
-	}
-
-	public void setELContext(ELContext elcontext)
-	{
-		original.setELContext(elcontext);
-	}
-
-	public ELContext getELContext()
-	{
-		return original.getELContext();
-	}
-
-	public NewComponentListener getNewComponentListener()
-	{
-		return original.getNewComponentListener();
-	}
-
-	/*
-	public void iniCommandDefaults(UICommand cmp, FieldInterface field, String action, String actionListener)
-	{
-		original.iniCommandDefaults(cmp, field, action, actionListener);
-	}
-	*/
-
-	public void initDefaults(UIComponent cmp, MetaField field)
-	{
-		original.initDefaults(cmp, field);
-	}
-
-	public void initInputDefaults(HtmlInputText cmp, MetaField field)
-	{
-		original.initInputDefaults(cmp, field);
-	}
-
-	public void initInputDefaults(UIInput cmp, MetaField field)
-	{
-		original.initInputDefaults(cmp, field);
-	}
-
-	public void initOutputDefaults(UIOutput cmp, MetaField field)
-	{
-		original.initOutputDefaults(cmp, field);
-	}
-
-	public void initSelections(MetaField field, UIComponent cmp)
-	{
-		original.initSelections(field, cmp);
-	}
-
-	public void initValueBinding(UIComponent cmp, MetaField field)
-	{
-		original.initValueBinding(cmp, field);
-	}
-
-	/*
-	public void setBackingBeanPrefix(String backingBeanPrefix)
-	{
-		original.setBackingBeanPrefix(backingBeanPrefix);
-	}
-	*/
-
-	public void setBackingEntityPrefix(String backingEntityPrefix)
-	{
-		original.setBackingEntityPrefix(backingEntityPrefix);
-	}
-
-	public void setContext(FacesContext context)
-	{
-		original.setContext(context);
-	}
-
-	public void setFormDisplayOnly(boolean displayOnly)
-	{
-		original.setFormDisplayOnly(displayOnly);
-	}
-
-	public void setNewComponentListener(NewComponentListener newComponentListener)
-	{
-		original.setNewComponentListener(newComponentListener);
-	}
-
-	public Map<String, String> getLabelBundle()
-	{
-		return original.getLabelBundle();
-	}
-
-	public void setLabelBundle(Map<String, String> labelBundle)
-	{
-		original.setLabelBundle(labelBundle);
-	}
-
-	protected void attachLengthValidator(HtmlInputText cmp, int minSize, int maxSize)
-	{
-		original.attachLengthValidator(cmp, minSize, maxSize);
-	}
-
-	protected void attachRangeValidator(HtmlInputText cmp, double minValue, double maxValue)
-	{
-		original.attachRangeValidator(cmp, minValue, maxValue);
-	}
-
-	protected boolean buildField(MetaField field)
-	{
-		return super.buildField(field);
-	}
+    public JsfGuiBuilderDecorator(JsfGuiBuilder original)
+    {
+        this.original = original;
+    }
+
+    public JsfGuiBuilder getOriginal()
+    {
+        return original;
+    }
+
+    public void createInputBoolean(MetaField field)
+    {
+        original.createInputBoolean(field);
+    }
+
+    public void createInputDate(MetaField field)
+    {
+        original.createInputDate(field);
+    }
+
+    public void createInputNumber(MetaField field)
+    {
+        original.createInputNumber(field);
+    }
+
+    public void createInputText(MetaField field)
+    {
+        original.createInputText(field);
+    }
+
+    public UIOutput createLabelFor(String labelText, UIComponent cmp)
+    {
+        return original.createLabelFor(labelText, cmp);
+    }
+
+    public void createNative(MetaField field)
+    {
+        original.createNative(field);
+    }
+
+    public void createOutputText(MetaField field)
+    {
+        original.createOutputText(field);
+    }
+
+    public UIParameter createParameter(String name, String value)
+    {
+        return original.createParameter(name, value);
+    }
+
+    public void createSearchFor(MetaField field)
+    {
+        original.createSearchFor(field);
+    }
+
+    /*
+    public void createSearchForSelectMenu(MetaField field)
+    {
+        original.createSearchForSelectMenu(field);
+    }
+    */
+
+    public void createSelectOneMenu(MetaField field)
+    {
+        original.createSelectOneMenu(field);
+    }
+
+    /*
+    public HtmlCommandLink doCreateCommandLinkComponent()
+    {
+        return original.doCreateCommandLinkComponent();
+    }
+    */
+
+    public DateTimeConverter doCreateDateConverter(MetaField field)
+    {
+        return original.doCreateDateConverter(field);
+    }
+
+    public UISelectBoolean doCreateInputBoolean(MetaField field)
+    {
+        return original.doCreateInputBoolean(field);
+    }
+
+    public HtmlSelectBooleanCheckbox doCreateInputBooleanComponent()
+    {
+        return original.doCreateInputBooleanComponent();
+    }
+
+    public HtmlInputText doCreateInputDate(MetaField field)
+    {
+        return original.doCreateInputDate(field);
+    }
+
+    public HtmlInputText doCreateInputDateComponent(MetaField field)
+    {
+        return original.doCreateInputDateComponent(field);
+    }
+
+    public HtmlInputText doCreateInputNumber(MetaField field)
+    {
+        return original.doCreateInputNumber(field);
+    }
+
+    public HtmlInputText doCreateInputText(MetaField field)
+    {
+        return original.doCreateInputText(field);
+    }
+
+    public HtmlInputText doCreateInputTextComponent()
+    {
+        return original.doCreateInputTextComponent();
+    }
+
+    public void doCreateNative(MetaField field, UIComponent uicomponent)
+    {
+        original.doCreateNative(field, uicomponent);
+    }
+
+    public HtmlOutputLabel doCreateOutputLabel(String text)
+    {
+        return original.doCreateOutputLabel(text);
+    }
+
+    public HtmlOutputLabel doCreateOutputLabelComponent()
+    {
+        return original.doCreateOutputLabelComponent();
+    }
+
+    public HtmlOutputText doCreateOutputText(MetaField field)
+    {
+        return original.doCreateOutputText(field);
+    }
+
+    public HtmlOutputText doCreateOutputText(String text)
+    {
+        return original.doCreateOutputText(text);
+    }
+
+    public HtmlOutputText doCreateOutputTextComponent()
+    {
+        return original.doCreateOutputTextComponent();
+    }
+
+    public HtmlPanelGroup doCreatePanelGroupComponent()
+    {
+        return original.doCreatePanelGroupComponent();
+    }
+
+    public UIComponent doCreateSearchFor(MetaField field)
+    {
+        return original.doCreateSearchFor(field);
+    }
+
+    public HtmlSelectOneMenu doCreateSelectOneMenu(MetaField field)
+    {
+        return original.doCreateSelectOneMenu(field);
+    }
+
+    public HtmlSelectOneMenu doCreateSelectOneMenuComponent()
+    {
+        return original.doCreateSelectOneMenuComponent();
+    }
+
+    public UIInput findInputComponent(UIComponent cmp)
+    {
+        return original.findInputComponent(cmp);
+    }
+
+    public void fireNewComponent(MetaField field, UIComponent cmp)
+    {
+        original.fireNewComponent(field, cmp);
+    }
+
+    /*
+    public String getBackingBeanPrefix()
+    {
+        return original.getBackingBeanPrefix();
+    }
+    */
+
+    public String getBackingEntityPrefix()
+    {
+        return original.getBackingEntityPrefix();
+    }
+
+    public FacesContext getContext()
+    {
+        return original.getContext();
+    }
+
+    public void setELContext(ELContext elcontext)
+    {
+        original.setELContext(elcontext);
+    }
+
+    public ELContext getELContext()
+    {
+        return original.getELContext();
+    }
+
+    public NewComponentListener getNewComponentListener()
+    {
+        return original.getNewComponentListener();
+    }
+
+    /*
+    public void iniCommandDefaults(UICommand cmp, FieldInterface field, String action, String actionListener)
+    {
+        original.iniCommandDefaults(cmp, field, action, actionListener);
+    }
+    */
+
+    public void initDefaults(UIComponent cmp, MetaField field)
+    {
+        original.initDefaults(cmp, field);
+    }
+
+    public void initInputDefaults(HtmlInputText cmp, MetaField field)
+    {
+        original.initInputDefaults(cmp, field);
+    }
+
+    public void initInputDefaults(UIInput cmp, MetaField field)
+    {
+        original.initInputDefaults(cmp, field);
+    }
+
+    public void initOutputDefaults(UIOutput cmp, MetaField field)
+    {
+        original.initOutputDefaults(cmp, field);
+    }
+
+    public void initSelections(MetaField field, UIComponent cmp)
+    {
+        original.initSelections(field, cmp);
+    }
+
+    public void initValueBinding(UIComponent cmp, MetaField field)
+    {
+        original.initValueBinding(cmp, field);
+    }
+
+    /*
+    public void setBackingBeanPrefix(String backingBeanPrefix)
+    {
+        original.setBackingBeanPrefix(backingBeanPrefix);
+    }
+    */
+
+    public void setBackingEntityPrefix(String backingEntityPrefix)
+    {
+        original.setBackingEntityPrefix(backingEntityPrefix);
+    }
+
+    public void setContext(FacesContext context)
+    {
+        original.setContext(context);
+    }
+
+    public void setFormDisplayOnly(boolean displayOnly)
+    {
+        original.setFormDisplayOnly(displayOnly);
+    }
+
+    public void setNewComponentListener(NewComponentListener newComponentListener)
+    {
+        original.setNewComponentListener(newComponentListener);
+    }
+
+    public Map<String, String> getLabelBundle()
+    {
+        return original.getLabelBundle();
+    }
+
+    public void setLabelBundle(Map<String, String> labelBundle)
+    {
+        original.setLabelBundle(labelBundle);
+    }
+
+    protected void attachLengthValidator(HtmlInputText cmp, int minSize, int maxSize)
+    {
+        original.attachLengthValidator(cmp, minSize, maxSize);
+    }
+
+    protected void attachRangeValidator(HtmlInputText cmp, double minValue, double maxValue)
+    {
+        original.attachRangeValidator(cmp, minValue, maxValue);
+    }
+
+    protected boolean buildField(MetaField field)
+    {
+        return super.buildField(field);
+    }
 }

Modified: myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilderFactory.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilderFactory.java?rev=673822&r1=673821&r2=673822&view=diff
==============================================================================
--- myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilderFactory.java (original)
+++ myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiBuilderFactory.java Thu Jul  3 14:34:56 2008
@@ -29,107 +29,107 @@
 
 public class JsfGuiBuilderFactory
 {
-	public final static String CONTEXT_GUI_BUILDER = "org.apache.myfaces.custom.dynaForm.GUI_BUILDER";
+    public final static String CONTEXT_GUI_BUILDER = "org.apache.myfaces.custom.dynaForm.GUI_BUILDER";
 
-	private JsfGuiBuilderFactory()
-	{
-	}
-
-	public static JsfGuiBuilder create(final FacesContext facesContext)
-	{
-		JsfGuiBuilder guiBuilder = null;
-
-		String guiBuilderName = facesContext.getExternalContext().getInitParameter(CONTEXT_GUI_BUILDER);
-		if (guiBuilderName == null)
-		{
-			guiBuilder = createGuiBuilderInternal();
-		}
-		else
-		{
-			try
-			{
-				@SuppressWarnings("unchecked")
-				Class<? extends JsfGuiBuilder> guiBuilderClass = 
-					(Class<? extends JsfGuiBuilder>) Class.forName(guiBuilderName);
-				try
-				{
-					// try to find a decorator constructor
-					Constructor<? extends JsfGuiBuilder> decoratorConst = 
-						guiBuilderClass.getConstructor(new Class[]{JsfGuiBuilder.class});
-					return decoratorConst.newInstance(new Object[]{
-						createGuiBuilderInternal()
-					});
-				}
-				catch (NoSuchMethodException e)
-				{
-					// not - so letz create a plain instance
-					return (JsfGuiBuilder) guiBuilderClass.newInstance();
-				}
-			}
-			catch (IllegalArgumentException e)
-			{
-				throw new OrchestraException(e);
-			}
-			catch (InvocationTargetException e)
-			{
-				throw new OrchestraException(e);
-			}
-			catch (SecurityException e)
-			{
-				throw new OrchestraException(e);
-			}
-			catch (InstantiationException e)
-			{
-				throw new OrchestraException(e);
-			}
-			catch (IllegalAccessException e)
-			{
-				throw new OrchestraException(e);
-			}
-			catch (ClassNotFoundException e)
-			{
-				throw new OrchestraException(e);
-			}
-		}
-		return guiBuilder;
-	}
-
-	protected static JsfGuiBuilder createGuiBuilderInternal()
-	{
-		JsfGuiBuilder guiBuilder = null;
-		if (MyFacesCheck.isMyFacesAvailable())
-		{
-			try
-			{
-				// See whether the sandbox implementation is also in the classpath. This
-				// generates nicer output...
-				String myfacesImpl = "org.apache.myfaces.orchestra.dynaForm.jsf.guiBuilder.impl.myfaces.MyFacesGuiBuilder";
-				@SuppressWarnings("unchecked")
-				Class<? extends JsfGuiBuilder> myfacesGuiBuilder = 
-					ClassUtils.classForName(myfacesImpl);
-				guiBuilder = (JsfGuiBuilder) myfacesGuiBuilder.newInstance();
-			}
-			catch (ClassNotFoundException e)
-			{
-				LogFactory.getLog(JsfGuiBuilderFactory.class)
-					.warn("consider using the myfaces-orchestra-sandbox for better gui support", e);
-			}
-			catch (InstantiationException e)
-			{
-				LogFactory.getLog(JsfGuiBuilderFactory.class)
-					.warn("can't create the myfaces gui builder - reverting to plain JSF", e);
-			}
-			catch (IllegalAccessException e)
-			{
-				LogFactory.getLog(JsfGuiBuilderFactory.class)
-					.warn("can't create the myfaces gui builder - reverting to plain JSF", e);
-			}
-		}
-
-		if (guiBuilder == null)
-		{
-			guiBuilder = new JsfGuiBuilder();
-		}
-		return guiBuilder;
-	}
+    private JsfGuiBuilderFactory()
+    {
+    }
+
+    public static JsfGuiBuilder create(final FacesContext facesContext)
+    {
+        JsfGuiBuilder guiBuilder = null;
+
+        String guiBuilderName = facesContext.getExternalContext().getInitParameter(CONTEXT_GUI_BUILDER);
+        if (guiBuilderName == null)
+        {
+            guiBuilder = createGuiBuilderInternal();
+        }
+        else
+        {
+            try
+            {
+                @SuppressWarnings("unchecked")
+                Class<? extends JsfGuiBuilder> guiBuilderClass = 
+                    (Class<? extends JsfGuiBuilder>) Class.forName(guiBuilderName);
+                try
+                {
+                    // try to find a decorator constructor
+                    Constructor<? extends JsfGuiBuilder> decoratorConst = 
+                        guiBuilderClass.getConstructor(new Class[]{JsfGuiBuilder.class});
+                    return decoratorConst.newInstance(new Object[]{
+                        createGuiBuilderInternal()
+                    });
+                }
+                catch (NoSuchMethodException e)
+                {
+                    // not - so letz create a plain instance
+                    return (JsfGuiBuilder) guiBuilderClass.newInstance();
+                }
+            }
+            catch (IllegalArgumentException e)
+            {
+                throw new OrchestraException(e);
+            }
+            catch (InvocationTargetException e)
+            {
+                throw new OrchestraException(e);
+            }
+            catch (SecurityException e)
+            {
+                throw new OrchestraException(e);
+            }
+            catch (InstantiationException e)
+            {
+                throw new OrchestraException(e);
+            }
+            catch (IllegalAccessException e)
+            {
+                throw new OrchestraException(e);
+            }
+            catch (ClassNotFoundException e)
+            {
+                throw new OrchestraException(e);
+            }
+        }
+        return guiBuilder;
+    }
+
+    protected static JsfGuiBuilder createGuiBuilderInternal()
+    {
+        JsfGuiBuilder guiBuilder = null;
+        if (MyFacesCheck.isMyFacesAvailable())
+        {
+            try
+            {
+                // See whether the sandbox implementation is also in the classpath. This
+                // generates nicer output...
+                String myfacesImpl = "org.apache.myfaces.orchestra.dynaForm.jsf.guiBuilder.impl.myfaces.MyFacesGuiBuilder";
+                @SuppressWarnings("unchecked")
+                Class<? extends JsfGuiBuilder> myfacesGuiBuilder = 
+                    ClassUtils.classForName(myfacesImpl);
+                guiBuilder = (JsfGuiBuilder) myfacesGuiBuilder.newInstance();
+            }
+            catch (ClassNotFoundException e)
+            {
+                LogFactory.getLog(JsfGuiBuilderFactory.class)
+                    .warn("consider using the myfaces-orchestra-sandbox for better gui support", e);
+            }
+            catch (InstantiationException e)
+            {
+                LogFactory.getLog(JsfGuiBuilderFactory.class)
+                    .warn("can't create the myfaces gui builder - reverting to plain JSF", e);
+            }
+            catch (IllegalAccessException e)
+            {
+                LogFactory.getLog(JsfGuiBuilderFactory.class)
+                    .warn("can't create the myfaces gui builder - reverting to plain JSF", e);
+            }
+        }
+
+        if (guiBuilder == null)
+        {
+            guiBuilder = new JsfGuiBuilder();
+        }
+        return guiBuilder;
+    }
 }

Modified: myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiElementBuilder.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiElementBuilder.java?rev=673822&r1=673821&r2=673822&view=diff
==============================================================================
--- myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiElementBuilder.java (original)
+++ myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/JsfGuiElementBuilder.java Thu Jul  3 14:34:56 2008
@@ -22,5 +22,5 @@
 
 public interface JsfGuiElementBuilder
 {
-	public boolean buildElement(JsfGuiBuilder builder, MetaField field);
+    public boolean buildElement(JsfGuiBuilder builder, MetaField field);
 }

Modified: myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/NewComponentListener.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/NewComponentListener.java?rev=673822&r1=673821&r2=673822&view=diff
==============================================================================
--- myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/NewComponentListener.java (original)
+++ myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/NewComponentListener.java Thu Jul  3 14:34:56 2008
@@ -28,18 +28,18 @@
  */
 public interface NewComponentListener
 {
-	/**
-	 * the new component and its label
-	 */
-	public void newComponent(String fieldName, UIComponent label, UIComponent component);
+    /**
+     * the new component and its label
+     */
+    public void newComponent(String fieldName, UIComponent label, UIComponent component);
 
-	/**
-	 * check if the component has been added already
-	 */
-	public boolean containsComponent(String id);
+    /**
+     * check if the component has been added already
+     */
+    public boolean containsComponent(String id);
 
-	/**
-	 * find a component by id
-	 */
-	public UIComponent findComponent(String id);
+    /**
+     * find a component by id
+     */
+    public UIComponent findComponent(String id);
 }

Modified: myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/ValueBindingDataSourceAdapter.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/ValueBindingDataSourceAdapter.java?rev=673822&r1=673821&r2=673822&view=diff
==============================================================================
--- myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/ValueBindingDataSourceAdapter.java (original)
+++ myfaces/orchestra/trunk/sandbox/src/main/java/org/apache/myfaces/orchestra/dynaForm/jsf/guiBuilder/impl/jsf/ValueBindingDataSourceAdapter.java Thu Jul  3 14:34:56 2008
@@ -33,98 +33,98 @@
  */
 public class ValueBindingDataSourceAdapter extends ValueBinding implements StateHolder
 {
-	private MethodBinding mbValues;
-	private MethodBinding mbLabels;
+    private MethodBinding mbValues;
+    private MethodBinding mbLabels;
 
-	private boolean _transient = false;
+    private boolean _transient = false;
 
-	public ValueBindingDataSourceAdapter()
-	{
-	}
-
-	public ValueBindingDataSourceAdapter(MethodBinding mbValues, MethodBinding mbLabels)
-	{
-		this.mbValues = mbValues;
-		this.mbLabels = mbLabels;
-	}
-
-
-	@Override
-	public Class<?> getType(FacesContext facesContext) throws EvaluationException, PropertyNotFoundException
-	{
-		return SelectItem[].class;
-	}
-
-	@Override
-	public Object getValue(FacesContext facesContext) throws EvaluationException, PropertyNotFoundException
-	{
-		Object valueList = mbValues.invoke(facesContext, new Object[]{null});
-		if (valueList == null)
-		{
-			return null;
-		}
-
-		if (valueList instanceof Collection)
-		{
-			Collection<?> valueCollection = (Collection<?>) valueList;
-
-			SelectItem[] selectItems = new SelectItem[valueCollection.size()];
-
-			int i = -1;
-			for (Object value : valueCollection)
-			{
-				i++;
-
-				String label = (String) mbLabels.invoke(facesContext, new Object[]
-					{
-						value
-					});
-
-				SelectItem si = new SelectItem(value, label);
-				selectItems[i] = si;
-			}
-
-			return selectItems;
-		}
-
-		throw new IllegalArgumentException("don't know how to access " + valueList.getClass().getName());
-	}
-
-	@Override
-	public boolean isReadOnly(FacesContext facesContext) throws EvaluationException, PropertyNotFoundException
-	{
-		return true;
-	}
-
-	@Override
-	public void setValue(FacesContext facesContext, Object object) throws EvaluationException, PropertyNotFoundException
-	{
-		throw new UnsupportedOperationException();
-	}
-
-	public Object saveState(FacesContext facesContext)
-	{
-		return new Object[]
-			{
-				UIComponentBase.saveAttachedState(facesContext, mbValues),
-				UIComponentBase.saveAttachedState(facesContext, mbLabels),
-			};
-	}
-
-	public void restoreState(FacesContext facesContext, Object object)
-	{
-		Object[] states = (Object[]) object;
-		mbValues = (MethodBinding) UIComponentBase.restoreAttachedState(facesContext, states[0]);
-		mbLabels = (MethodBinding) UIComponentBase.restoreAttachedState(facesContext, states[1]);
-	}
-
-	public boolean isTransient()
-	{
-		return _transient;
-	}
-
-	public void setTransient(boolean flag)
-	{
-		_transient = flag;
-	}
+    public ValueBindingDataSourceAdapter()
+    {
+    }
+
+    public ValueBindingDataSourceAdapter(MethodBinding mbValues, MethodBinding mbLabels)
+    {
+        this.mbValues = mbValues;
+        this.mbLabels = mbLabels;
+    }
+
+
+    @Override
+    public Class<?> getType(FacesContext facesContext) throws EvaluationException, PropertyNotFoundException
+    {
+        return SelectItem[].class;
+    }
+
+    @Override
+    public Object getValue(FacesContext facesContext) throws EvaluationException, PropertyNotFoundException
+    {
+        Object valueList = mbValues.invoke(facesContext, new Object[]{null});
+        if (valueList == null)
+        {
+            return null;
+        }
+
+        if (valueList instanceof Collection)
+        {
+            Collection<?> valueCollection = (Collection<?>) valueList;
+
+            SelectItem[] selectItems = new SelectItem[valueCollection.size()];
+
+            int i = -1;
+            for (Object value : valueCollection)
+            {
+                i++;
+
+                String label = (String) mbLabels.invoke(facesContext, new Object[]
+                    {
+                        value
+                    });
+
+                SelectItem si = new SelectItem(value, label);
+                selectItems[i] = si;
+            }
+
+            return selectItems;
+        }
+
+        throw new IllegalArgumentException("don't know how to access " + valueList.getClass().getName());
+    }
+
+    @Override
+    public boolean isReadOnly(FacesContext facesContext) throws EvaluationException, PropertyNotFoundException
+    {
+        return true;
+    }
+
+    @Override
+    public void setValue(FacesContext facesContext, Object object) throws EvaluationException, PropertyNotFoundException
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    public Object saveState(FacesContext facesContext)
+    {
+        return new Object[]
+            {
+                UIComponentBase.saveAttachedState(facesContext, mbValues),
+                UIComponentBase.saveAttachedState(facesContext, mbLabels),
+            };
+    }
+
+    public void restoreState(FacesContext facesContext, Object object)
+    {
+        Object[] states = (Object[]) object;
+        mbValues = (MethodBinding) UIComponentBase.restoreAttachedState(facesContext, states[0]);
+        mbLabels = (MethodBinding) UIComponentBase.restoreAttachedState(facesContext, states[1]);
+    }
+
+    public boolean isTransient()
+    {
+        return _transient;
+    }
+
+    public void setTransient(boolean flag)
+    {
+        _transient = flag;
+    }
 }