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]

Reply via email to