org.apache.tools.ant

Class ComponentHelper

public class ComponentHelper extends Object

Component creation and configuration. The class is based around handing component definitions in an AntTypeTable. The old task/type methods have been kept for backward compatibly. Project will just delegate its calls to this class. A very simple hook mechanism is provided that allows users to plug in custom code. It is also possible to replace the default behavior ( for example in an app embedding ant )

Since: Ant1.6

Field Summary
static StringCOMPONENT_HELPER_REFERENCE
reference under which we register ourselves with a project -
Constructor Summary
protected ComponentHelper()
Creates a new ComponentHelper instance.
Method Summary
voidaddDataTypeDefinition(String typeName, Class typeClass)
Adds a new datatype definition.
voidaddDataTypeDefinition(AntTypeDefinition def)
Describe addDataTypeDefinition method here.
voidaddTaskDefinition(String taskName, Class taskClass)
Adds a new task definition to the project.
voidcheckTaskClass(Class taskClass)
Checks whether or not a class is suitable for serving as Ant task.
ObjectcreateComponent(UnknownElement ue, String ns, String componentType)
Factory method to create the components.
ObjectcreateComponent(String componentName)
Create an object for a component.
ObjectcreateDataType(String typeName)
Creates a new instance of a data type.
TaskcreateTask(String taskType)
Creates a new instance of a task.
StringdiagnoseCreationFailure(String componentName, String type)
Handler called to do decent diagnosis on instantiation failure.
voidenterAntLib(String uri)
Called at the start of processing an antlib.
voidexitAntLib()
Called at the end of processing an antlib.
HashtablegetAntTypeTable()
Returns the current datatype definition hashtable.
ClassgetComponentClass(String componentName)
Return the class of the component name.
static ComponentHelpergetComponentHelper(Project project)
Find a project component for a specific project, creating it if it does not exist.
StringgetCurrentAntlibUri()
HashtablegetDataTypeDefinitions()
Returns the current type definition hashtable.
AntTypeDefinitiongetDefinition(String componentName)
Return the antTypeDefinition for a componentName.
StringgetElementName(Object element)
Returns a description of the type of the given element.
StringgetElementName(Object o, boolean brief)
Returns a description of the type of the given element.
static StringgetElementName(Project p, Object o, boolean brief)
Convenient way to get some element name even when you may not have a Project context.
ComponentHelpergetNext()
Get the next chained component helper.
ProjectgetProject()
Get the project.
ListgetRestrictedDefinitions(String componentName)
This returns a list of restricted definitions for a name.
HashtablegetTaskDefinitions()
Returns the current task definition hashtable.
voidinitDefaultDefinitions()
This method is initialization code implementing the original ant component loading from /org/apache/tools/ant/taskdefs/default.properties and /org/apache/tools/ant/types/default.properties.
voidinitSubProject(ComponentHelper helper)
Used with creating child projects.
voidsetNext(ComponentHelper next)
Set the next chained component helper.
voidsetProject(Project project)
Sets the project for this component helper.

Field Detail

COMPONENT_HELPER_REFERENCE

public static final String COMPONENT_HELPER_REFERENCE
reference under which we register ourselves with a project -{@value }

Constructor Detail

ComponentHelper

protected ComponentHelper()
Creates a new ComponentHelper instance.

Method Detail

addDataTypeDefinition

public void addDataTypeDefinition(String typeName, Class typeClass)
Adds a new datatype definition. Attempting to override an existing definition with an equivalent one (i.e. with the same classname) results in a verbose log message. Attempting to override an existing definition with a different one results in a warning log message, but the definition is changed.

Parameters: typeName The name of the datatype. Must not be null. typeClass The full name of the class implementing the datatype. Must not be null.

addDataTypeDefinition

public void addDataTypeDefinition(AntTypeDefinition def)
Describe addDataTypeDefinition method here.

Parameters: def an AntTypeDefinition value.

addTaskDefinition

public void addTaskDefinition(String taskName, Class taskClass)
Adds a new task definition to the project. Attempting to override an existing definition with an equivalent one (i.e. with the same classname) results in a verbose log message. Attempting to override an existing definition with a different one results in a warning log message.

Parameters: taskName The name of the task to add. Must not be null. taskClass The full name of the class implementing the task. Must not be null.

Throws: BuildException if the class is unsuitable for being an Ant task. An error level message is logged before this exception is thrown.

See Also: checkTaskClass

checkTaskClass

public void checkTaskClass(Class taskClass)
Checks whether or not a class is suitable for serving as Ant task. Ant task implementation classes must be public, concrete, and have a no-arg constructor.

Parameters: taskClass The class to be checked. Must not be null.

Throws: BuildException if the class is unsuitable for being an Ant task. An error level message is logged before this exception is thrown.

createComponent

public Object createComponent(UnknownElement ue, String ns, String componentType)
Factory method to create the components. This should be called by UnknownElement.

Parameters: ue The Unknown Element creating this component. ns Namespace URI. Also available as ue.getNamespace(). componentType The component type, Also available as ue.getComponentName().

Returns: the created component.

Throws: BuildException if an error occurs.

createComponent

public Object createComponent(String componentName)
Create an object for a component.

Parameters: componentName the name of the component, if the component is in a namespace, the name is prefixed with the namespace uri and ":".

Returns: the class if found or null if not.

createDataType

public Object createDataType(String typeName)
Creates a new instance of a data type.

Parameters: typeName The name of the data type to create an instance of. Must not be null.

Returns: an instance of the specified data type, or null if the data type name is not recognised.

Throws: BuildException if the data type name is recognised but instance creation fails.

createTask

public Task createTask(String taskType)
Creates a new instance of a task. Called from Project.createTask(), which can be called by tasks.

Parameters: taskType The name of the task to create an instance of. Must not be null.

Returns: an instance of the specified task, or null if the task name is not recognised.

Throws: BuildException if the task name is recognised but task creation fails.

diagnoseCreationFailure

public String diagnoseCreationFailure(String componentName, String type)
Handler called to do decent diagnosis on instantiation failure.

Parameters: componentName component name. type component type, used in error messages

Returns: a string containing as much diagnostics info as possible.

enterAntLib

public void enterAntLib(String uri)
Called at the start of processing an antlib.

Parameters: uri the uri that is associated with this antlib.

exitAntLib

public void exitAntLib()
Called at the end of processing an antlib.

getAntTypeTable

public Hashtable getAntTypeTable()
Returns the current datatype definition hashtable. The returned hashtable is "live" and so should not be modified.

Returns: a map of from datatype name to implementing class (String to Class).

getComponentClass

public Class getComponentClass(String componentName)
Return the class of the component name.

Parameters: componentName the name of the component, if the component is in a namespace, the name is prefixed with the namespace uri and ":".

Returns: the class if found or null if not.

getComponentHelper

public static ComponentHelper getComponentHelper(Project project)
Find a project component for a specific project, creating it if it does not exist.

Parameters: project the project.

Returns: the project component for a specific project.

getCurrentAntlibUri

public String getCurrentAntlibUri()

Returns: the current antlib uri.

getDataTypeDefinitions

public Hashtable getDataTypeDefinitions()
Returns the current type definition hashtable. The returned hashtable is "live" and so should not be modified.

Returns: a map of from type name to implementing class (String to Class).

getDefinition

public AntTypeDefinition getDefinition(String componentName)
Return the antTypeDefinition for a componentName.

Parameters: componentName the name of the component.

Returns: the ant definition or null if not present.

getElementName

public String getElementName(Object element)
Returns a description of the type of the given element.

This is useful for logging purposes.

Parameters: element The element to describe. Must not be null.

Returns: a description of the element type.

Since: Ant 1.6

getElementName

public String getElementName(Object o, boolean brief)
Returns a description of the type of the given element.

This is useful for logging purposes.

Parameters: o The element to describe. Must not be null. brief whether to use a brief description.

Returns: a description of the element type.

Since: Ant 1.7

getElementName

public static String getElementName(Project p, Object o, boolean brief)
Convenient way to get some element name even when you may not have a Project context.

Parameters: p The optional Project instance. o The element to describe. Must not be null. brief whether to use a brief description.

Returns: a description of the element type.

Since: Ant 1.7

getNext

public ComponentHelper getNext()
Get the next chained component helper.

Returns: the next chained component helper.

getProject

public Project getProject()
Get the project.

Returns: the project owner of this helper.

getRestrictedDefinitions

public List getRestrictedDefinitions(String componentName)
This returns a list of restricted definitions for a name. The returned List is "live" and so should not be modified. Also, the returned list may be modifed asynchronously. Any access must be guarded with a lock on the list itself.

Parameters: componentName the name to use.

Returns: the list of restricted definitions for a particular name.

getTaskDefinitions

public Hashtable getTaskDefinitions()
Returns the current task definition hashtable. The returned hashtable is "live" and so should not be modified. Also, the returned table may be modifed asynchronously.

Returns: a map of from task name to implementing class (String to Class).

initDefaultDefinitions

public void initDefaultDefinitions()
This method is initialization code implementing the original ant component loading from /org/apache/tools/ant/taskdefs/default.properties and /org/apache/tools/ant/types/default.properties.

initSubProject

public void initSubProject(ComponentHelper helper)
Used with creating child projects. Each child project inherits the component definitions from its parent.

Parameters: helper the component helper of the parent project.

setNext

public void setNext(ComponentHelper next)
Set the next chained component helper.

Parameters: next the next chained component helper.

setProject

public void setProject(Project project)
Sets the project for this component helper.

Parameters: project the project for this helper.