| package org.apache.ant; |
| |
| import java.io.*; |
| import java.util.*; |
| import java.lang.reflect.*; |
| import java.beans.*; |
| |
| /** |
| * Superclass of all Tasks. All tasks extend from this. |
| * |
| * @author James Duncan Davidson (duncan@apache.org) |
| */ |
| public abstract class AbstractTask { |
| |
| // ----------------------------------------------------------------- |
| // PROTECTED DATA MEMBERS |
| // ----------------------------------------------------------------- |
| |
| /** |
| * |
| */ |
| protected Project project; |
| |
| // ----------------------------------------------------------------- |
| // ABSTRACT PUBLIC METHODS |
| // ----------------------------------------------------------------- |
| |
| /** |
| * |
| */ |
| public abstract boolean execute() throws AntException; |
| |
| // ----------------------------------------------------------------- |
| // PUBLIC METHODS |
| // ----------------------------------------------------------------- |
| |
| /** |
| * Used by the system to set the attributes which then get reflected |
| * into the particular implementation class |
| */ |
| public void setAttributes(Hashtable attributes) { |
| Class clazz = this.getClass(); |
| BeanInfo bi; |
| try { |
| bi = Introspector.getBeanInfo(clazz); |
| } catch (IntrospectionException ie) { |
| System.out.println("Can't reflect on: " + clazz); |
| // XXX exception out |
| return; |
| } |
| PropertyDescriptor[] pda = bi.getPropertyDescriptors(); |
| for (int i = 0; i < pda.length; i++) { |
| PropertyDescriptor pd = pda[i]; |
| String property = pd.getName(); |
| Object o = attributes.get(property); |
| if (o != null) { |
| String value = (String)o; |
| Method setMethod = pd.getWriteMethod(); |
| if (setMethod != null) { |
| Class[] ma = setMethod.getParameterTypes(); |
| if (ma.length == 1) { |
| Class c = ma[0]; |
| if (c.getName().equals("java.lang.String")) { |
| try { |
| setMethod.invoke(this, new String[] {value}); |
| } catch (Exception e) { |
| // XXX bad bad bad -- narrow to exact exceptions |
| System.out.println("OUCH: " + e); |
| // XXX exception out. |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| /** |
| * Used by system to set the project. |
| */ |
| public void setProject(Project project) { |
| this.project = project; |
| } |
| |
| } |