FileDocCategorySizeDatePackage
DispatchUtils.javaAPI DocApache Ant 1.705763Wed Dec 13 06:16:18 GMT 2006org.apache.tools.ant.dispatch

DispatchUtils

public class DispatchUtils extends Object
Determines and Executes the action method for the task.

Fields Summary
Constructors Summary
Methods Summary
public static final voidexecute(java.lang.Object task)
Determines and Executes the action method for the task.

param
task the task to execute.
throws
BuildException on error.

        String methodName = "execute";
        Dispatchable dispatchable = null;
        try {
            if (task instanceof Dispatchable) {
                dispatchable = (Dispatchable) task;
            } else if (task instanceof UnknownElement) {
                UnknownElement ue = (UnknownElement) task;
                Object realThing = ue.getRealThing();
                if (realThing != null
                    && realThing instanceof Dispatchable
                    && realThing instanceof Task) {
                    dispatchable = (Dispatchable) realThing;
                }
            }
            if (dispatchable != null) {
                String mName = null;
                try {
                    final String name = dispatchable.getActionParameterName();
                    if (name != null && name.trim().length() > 0) {
                        mName = "get" + name.trim().substring(0, 1).toUpperCase();
                        if (name.length() > 1) {
                            mName += name.substring(1);
                        }
                        final Class c = dispatchable.getClass();
                        final Method actionM = c.getMethod(mName, new Class[0]);
                        if (actionM != null) {
                            final Object o = actionM.invoke(dispatchable, (Object[]) null);
                            if (o != null) {
                                final String s = o.toString();
                                if (s != null && s.trim().length() > 0) {
                                    methodName = s.trim();
                                    Method executeM = null;
                                    executeM = dispatchable.getClass().getMethod(
                                        methodName, new Class[0]);
                                    if (executeM == null) {
                                        throw new BuildException(
                                            "No public " + methodName + "() in "
                                            + dispatchable.getClass());
                                    }
                                    executeM.invoke(dispatchable, (Object[]) null);
                                    if (task instanceof UnknownElement) {
                                        ((UnknownElement) task).setRealThing(null);
                                    }
                                } else {
                                    throw new BuildException(
                                        "Dispatchable Task attribute '" + name.trim()
                                        + "' not set or value is empty.");
                                }
                            } else {
                                    throw new BuildException(
                                        "Dispatchable Task attribute '" + name.trim()
                                        + "' not set or value is empty.");
                            }
                        }
                    } else {
                        throw new BuildException(
                            "Action Parameter Name must not be empty for Dispatchable Task.");
                    }
                } catch (NoSuchMethodException nsme) {
                    throw new BuildException("No public " + mName + "() in " + task.getClass());
                }
            } else {
                Method executeM = null;
                executeM = task.getClass().getMethod(methodName, new Class[0]);
                if (executeM == null) {
                    throw new BuildException("No public " + methodName + "() in "
                        + task.getClass());
                }
                executeM.invoke(task, (Object[]) null);
                if (task instanceof UnknownElement) {
                    ((UnknownElement) task).setRealThing(null);
                }
            }
        } catch (InvocationTargetException ie) {
            Throwable t = ie.getTargetException();
            if (t instanceof BuildException) {
                throw ((BuildException) t);
            } else {
                throw new BuildException(t);
            }
        } catch (NoSuchMethodException e) {
            throw new BuildException(e);
        } catch (IllegalAccessException e) {
            throw new BuildException(e);
        }