in empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControlManager.java [112:166]
public static <T extends UIComponent> T createComponent(FacesContext context, Class<T> clazz)
{
// Get component type from class
String type = componentTypeMap.get(clazz);
if (type == null)
{ // Detect type
try
{ // Detect component type
Field field = clazz.getDeclaredField("COMPONENT_TYPE");
if (field != null)
type = StringUtils.toString(field.get(null), ""); // Empty string is default
else
type = ""; // Empty string is default
// show
log.debug("Component-Type for class {} is {}", clazz.getName(), type);
}
catch (SecurityException e)
{
throw new InternalException(e);
}
catch (NoSuchFieldException e)
{ // No COMPONENT_TYPE field
log.debug("No Component-Type available for class {}!", clazz.getName());
type = ""; // Empty string is default
}
catch (IllegalArgumentException e)
{
throw new InternalException(e);
}
catch (IllegalAccessException e)
{
throw new InternalException(e);
}
// put in map
componentTypeMap.put(clazz, type);
}
// Now, create the instance
if (StringUtils.isEmpty(type))
{
try
{ // create instance directly
return clazz.newInstance();
}
catch (InstantiationException e)
{
throw new InternalException(e);
}
catch (IllegalAccessException e)
{
throw new InternalException(e);
}
}
// otherwise ask the application
return (T) context.getApplication().createComponent(type);
}