costin      2002/12/27 10:11:16

  Modified:    src/main/org/apache/tools/ant RuntimeConfigurable.java
  Log:
  A change in ProjectHelper2 - RC doesn't need to depend on SAX2.
  The attributes are just stored in a Hashtable, you can construct the
  UE/RC tree without using any SAX at all.
  
  I added @deprecated tags to the SAX1 attributes as well.
  
  Also added a (harmless - I hope ) Serializable interface to RC, and
  transient to the fields that don't need to be serialized.
  
  Revision  Changes    Path
  1.21      +53 -23    
jakarta-ant/src/main/org/apache/tools/ant/RuntimeConfigurable.java
  
  Index: RuntimeConfigurable.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/RuntimeConfigurable.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- RuntimeConfigurable.java  13 Dec 2002 21:55:45 -0000      1.20
  +++ RuntimeConfigurable.java  27 Dec 2002 18:11:15 -0000      1.21
  @@ -57,6 +57,9 @@
   import java.util.Enumeration;
   import java.util.Locale;
   import java.util.Vector;
  +import java.util.Hashtable;
  +import java.io.Serializable;
  +
   import org.xml.sax.AttributeList;
   import org.xml.sax.Attributes;
   import org.xml.sax.helpers.AttributeListImpl;
  @@ -69,19 +72,25 @@
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Stefan Bodewig</a>
    */
  -public class RuntimeConfigurable {
  +public class RuntimeConfigurable implements Serializable {
   
       /** Name of the element to configure. */
       private String elementTag = null;
       /** List of child element wrappers. */
       private Vector children = new Vector();
  -    /** The element to configure. */
  -    private Object wrappedObject = null;
  +    /** The element to configure. It is only used during
  +     * maybeConfigure.
  +     */
  +    private transient Object wrappedObject = null;
  +
       /** @@deprecated
        * XML attributes for the element. */
  -    private AttributeList attributes;
  -    /** XML attributes for the element. */
  -    private Attributes attributes2;
  +    private transient AttributeList attributes;
  +
  +    /** Attributes are stored in the attMap.
  +     */
  +    private Hashtable attMap=new Hashtable();
  +
       /** Text appearing within the element. */
       private StringBuffer characters = new StringBuffer();
       /** Indicates if the wrapped object has been configured */
  @@ -98,13 +107,13 @@
           wrappedObject = proxy;
           this.elementTag = elementTag;
           proxyConfigured = false;
  +        // Most likely an UnknownElement
           if( proxy instanceof Task )
               ((Task)proxy).setRuntimeConfigurableWrapper( this );
       }
   
       /**
  -     * Sets the element to configure. This is used when the real type of
  -     * an element isn't known at the time of wrapper creation.
  +     * Sets the element to configure.
        *
        * @param proxy The element to configure. Must not be <code>null</code>.
        */
  @@ -120,24 +129,33 @@
       /**
        * Sets the attributes for the wrapped element.
        *
  +     * @deprecated
        * @param attributes List of attributes defined in the XML for this
        *                   element. May be <code>null</code>.
        */
       public void setAttributes(AttributeList attributes) {
           this.attributes = new AttributeListImpl(attributes);
  +        for (int i = 0; i < attributes.getLength(); i++) {
  +            this.setAttribute( attributes.getName(i), 
attributes.getValue(i));
  +        }
       }
   
  -    public void setAttributes2(Attributes attributes) {
  -        this.attributes2=new AttributesImpl( attributes );
  +    public void setAttribute( String name, String value ) {
  +        attMap.put( name, value );
       }
   
  -    public Attributes getAttributes2() {
  -        return attributes2;
  +    /** Return the attribute map.
  +     *
  +     * @return Attribute name to attribute value map
  +     */
  +    public Hashtable getAttributeMap() {
  +        return attMap;
       }
   
       /**
        * Returns the list of attributes for the wrapped element.
        *
  +     * @deprecated
        * @return An AttributeList representing the attributes defined in the
        *         XML for this element. May be <code>null</code>.
        */
  @@ -268,20 +286,32 @@
               return;
           }
   
  +        // Configure the object
  +        Object target=(wrappedObject instanceof TaskAdapter) ?
  +                ((TaskAdapter)wrappedObject).getProxy() : wrappedObject;
  +
           //PropertyHelper ph=PropertyHelper.getPropertyHelper(p);
  +        IntrospectionHelper ih =
  +            IntrospectionHelper.getHelper(p, target.getClass());
   
  -        if (attributes2 != null) {
  -            ProjectHelper.configure(wrappedObject, attributes2, p);
  -            //ph.configure(wrappedObject, attributes2, p);
  -            id = attributes2.getValue("id");
  -            // No way - this will be used on future calls ( if the task is 
used
  -            // multiple times: attributes = null;
  -        }
  -        if (attributes != null) {
  -            ProjectHelper.configure(wrappedObject, attributes, p);
  -            //ph.configure(wrappedObject, attributes, p);
  -            id = attributes.getValue("id");
  +        Enumeration attNames=attMap.keys();
  +        while( attNames.hasMoreElements() ) {
  +            String name=(String) attNames.nextElement();
  +            String value=(String) attMap.get(name);
  +
  +            // reflect these into the target
  +            value = ProjectHelper.replaceProperties(p, 
value,p.getProperties());
  +            try {
  +                ih.setAttribute(p, target,
  +                        name.toLowerCase(Locale.US), value);
  +            } catch (BuildException be) {
  +                // id attribute must be set externally
  +                if (!name.equals("id")) {
  +                    throw be;
  +                }
  +            }
           }
  +        id = (String)attMap.get("id");
   
           if (characters.length() != 0) {
               ProjectHelper.addText(p, wrappedObject, characters.toString());
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to