umagesh 2004/06/10 11:01:47
Modified: src/main/org/apache/tools/ant Task.java TaskAdapter.java
UnknownElement.java
src/main/org/apache/tools/ant/dispatch DispatchTask.java
Added: src/main/org/apache/tools/ant/dispatch DispatchUtils.java
Log:
Tasks extending from oata.Task and implementing Dispatchable are not
dispatchable.
Revision Changes Path
1.60 +3 -1 ant/src/main/org/apache/tools/ant/Task.java
Index: Task.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/Task.java,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- Task.java 10 Jun 2004 17:32:14 -0000 1.59
+++ Task.java 10 Jun 2004 18:01:47 -0000 1.60
@@ -17,6 +17,8 @@
package org.apache.tools.ant;
+import org.apache.tools.ant.dispatch.DispatchUtils;
+
import java.util.Enumeration;
import java.io.IOException;
@@ -361,7 +363,7 @@
Throwable reason = null;
try {
maybeConfigure();
- execute();
+ DispatchUtils.execute(this);
} catch (BuildException ex) {
if (ex.getLocation() == Location.UNKNOWN_LOCATION) {
ex.setLocation(getLocation());
1.30 +2 -49 ant/src/main/org/apache/tools/ant/TaskAdapter.java
Index: TaskAdapter.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/TaskAdapter.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- TaskAdapter.java 6 Jun 2004 17:31:50 -0000 1.29
+++ TaskAdapter.java 10 Jun 2004 18:01:47 -0000 1.30
@@ -17,9 +17,9 @@
package org.apache.tools.ant;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.tools.ant.dispatch.Dispatchable;
+import org.apache.tools.ant.dispatch.DispatchUtils;
/**
* Uses introspection to "adapt" an arbitrary Bean which doesn't
@@ -93,37 +93,6 @@
}
/**
- * Returns the name of the action method that the task must
- * execute.
- */
- private final String getExecuteMethodName() throws NoSuchMethodException,
- InvocationTargetException, IllegalAccessException {
- String methodName = "execute";
- if (proxy instanceof Dispatchable) {
- final Dispatchable dispatchable = (Dispatchable) proxy;
- final String name = dispatchable.getActionParameterName();
- if (name != null && name.trim().length() > 0) {
- String mName = "get" + name.trim().substring(0,
1).toUpperCase();
- if (name.length() > 1) {
- mName += name.substring(1);
- }
- final Class c = proxy.getClass();
- final Method actionM = c.getMethod(mName, new Class[0]);
- if (actionM != null) {
- final Object o = actionM.invoke(proxy, null);
- if (o != null) {
- final String s = o.toString();
- if (s != null && s.trim().length() > 0) {
- methodName = s.trim();
- }
- }
- }
- }
- }
- return methodName;
- }
-
- /**
* Executes the proxied task.
*
* @exception BuildException if the project could not be set
@@ -151,24 +120,8 @@
Method executeM = null;
try {
Class c = proxy.getClass();
- final String methodName = getExecuteMethodName();
- executeM = c.getMethod(methodName, new Class[0]);
- if (executeM == null) {
- log("No public " + methodName + " in " + proxy.getClass(),
- Project.MSG_ERR);
- throw new BuildException("No public " + methodName + "() in "
- + proxy.getClass());
- }
- executeM.invoke(proxy, null);
+ DispatchUtils.execute(proxy);
return;
- } catch (java.lang.reflect.InvocationTargetException ie) {
- log("Error in " + proxy.getClass(), Project.MSG_VERBOSE);
- Throwable t = ie.getTargetException();
- if (t instanceof BuildException) {
- throw ((BuildException) t);
- } else {
- throw new BuildException(t);
- }
} catch (Exception ex) {
log("Error in " + proxy.getClass(), Project.MSG_VERBOSE);
throw new BuildException(ex);
1.81 +10 -1 ant/src/main/org/apache/tools/ant/UnknownElement.java
Index: UnknownElement.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/UnknownElement.java,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -r1.80 -r1.81
--- UnknownElement.java 27 May 2004 14:38:46 -0000 1.80
+++ UnknownElement.java 10 Jun 2004 18:01:47 -0000 1.81
@@ -391,7 +391,6 @@
getProject());
String name = ue.getComponentName();
Object o = helper.createComponent(ue, ue.getNamespace(), name);
-
if (o == null) {
throw getNotFoundException("task or type", name);
}
@@ -528,6 +527,16 @@
public Object getRealThing() {
return realThing;
}
+
+ /**
+ * Set the configured object
+ *
+ * @since ant 1.7
+ */
+ public void setRealThing(Object realThing) {
+ this.realThing = realThing;
+ }
+
/**
* Try to create a nested element of <code>parent</code> for the
* given tag.
1.2 +1 -1
ant/src/main/org/apache/tools/ant/dispatch/DispatchTask.java
Index: DispatchTask.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/dispatch/DispatchTask.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DispatchTask.java 6 Jun 2004 17:31:50 -0000 1.1
+++ DispatchTask.java 10 Jun 2004 18:01:47 -0000 1.2
@@ -29,7 +29,7 @@
* If the action attribute is not defined in the task or is empty,
* the execute() method will be called.
*/
-public abstract class DispatchTask implements Dispatchable {
+public abstract class DispatchTask extends Task implements Dispatchable {
private String action;
public String getActionParameterName() {
1.1
ant/src/main/org/apache/tools/ant/dispatch/DispatchUtils.java
Index: DispatchUtils.java
===================================================================
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant.dispatch;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.UnknownElement;
import org.apache.tools.ant.Task;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* Determines and Executes the action method for the task
*/
public class DispatchUtils {
/**
* Determines and Executes the action method for the task
*/
public static final void execute(Object task) throws BuildException {
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,
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, 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, 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);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]