Determines and Executes the action method for the task.
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);
}