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]