[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ant-dev
Subject:    cvs commit: jakarta-ant/proposal/myrmidon/src/xdocs configuring.xml
From:       donaldp () apache ! org
Date:       2002-03-31 5:17:27
[Download RAW message or body]

donaldp     02/03/30 21:17:27

  Added:       proposal/myrmidon/docs configuring.html
               proposal/myrmidon/src/xdocs configuring.xml
  Log:
  Add a basic page about configuring tasks in myrmidon.
  
  Revision  Changes    Path
  1.1                  jakarta-ant/proposal/myrmidon/docs/configuring.html
  
  Index: configuring.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" \
"http://www.w3.org/TR/html4/loose.dtd">  
  <!-- Content Stylesheet for Site -->
  
      
  <!-- start the processing -->
      <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    
                        <meta name="author" value="Peter Donald">
    <meta name="email" value="peter@apache.org">
          
        <title>Apache Myrmidon - On Task Configuring in Ant2</title>
      </head>
    
      <body bgcolor="#ffffff" text="#000000" link="#525D76">    
        <table border="0" width="100%" cellspacing="0">
          <!-- TOP IMAGE -->
          <tr>
            <td>      <td colspan="2">
      <a href="http://jakarta.apache.org"><img \
src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a> \
</td>  </td>
            <td valign="bottom"><div align="right"><b><font size="+3" \
color="#525D76">Apache Myrmidon</font></b></div></td>  </tr>
        </table>
        <table border="0" width="100%" cellspacing="4">
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          
          <tr>
            <!-- LEFT SIDE NAVIGATION -->
            <td valign="top" nowrap="true">
                  <p><strong>Myrmidon</strong></p>
      <ul>
            <li>      <a href="./index.html">Introduction</a>
    </li>
            <li>      <a href="./getinvolved.html">Get Involved</a>
    </li>
            <li>      <a href="./user.html">Building Myrmidon</a>
    </li>
            <li>      <a href="./todo.html">Todo List</a>
    </li>
          </ul>
        <p><strong>User Guide</strong></p>
      <ul>
            <li>      <a href="./buildfile.html">Build file</a>
    </li>
            <li>      <a href="./vfs.html">Virtual File System</a>
    </li>
            <li>      <a href="./ant1compat.html">Ant1 Compatibility Layer</a>
    </li>
            <li>      <a href="./differences.html">Differences to Ant1</a>
    </li>
            <li>      <a href="./task.html">My First Task</a>
    </li>
          </ul>
        <p><strong>Extending Ant</strong></p>
      <ul>
            <li>      <a href="./configuring.html">Configuration HOWTO</a>
    </li>
            <li>      <a href="./converter.html">Converter HOWTO</a>
    </li>
            <li>      <a href="./type.html">Type HOWTO</a>
    </li>
            <li>      <a href="./classloader.html">ClassLoader HOWTO</a>
    </li>
            <li>      <a href="./librarys.html">Library HOWTO</a>
    </li>
          </ul>
        <p><strong>Container Design</strong></p>
      <ul>
          </ul>
              </td>
            <td align="left" valign="top">
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Introduction"><strong>Introduction</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>This section will describe in detail the mechanism via \
                which tasks are
              configured. Configuration is the name given to the stage in tasks
              lifecycle via which the XML representation is mapped onto the task 
              object.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Names"><strong>Names</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>When mapping the XML representation on to the task \
                object you
              need to be able map the names as they appear in the XML to the 
              names as they appear in the Java code. The process is for generating
              a java name from the xml name is as follows.</p>
                                  <ol>
                <li>Capitalize the first character of name.</li>
                <li>Find any '-' characters in XML name and remove character and
                capitalize the following letter. (And there must be a following 
                letter)</li>
              </ol>
                                  <p>Some example mappings;</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
                width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" \
                height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
width="1" height="1" vspace="0" hspace="0" border="0"/></td>  </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" \
height="1" vspace="0" hspace="0" border="0"/></td>  <td bgcolor="#ffffff"><pre>
  my-name    ===&gt;   MyName
  aString    ===&gt;   AString
  Basedir    ===&gt;   Basedir
  baseDir    ===&gt;   BaseDir
  url        ===&gt;   Url</pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" \
height="1" vspace="0" hspace="0" border="0"/></td>  </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
                width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" \
                height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
width="1" height="1" vspace="0" hspace="0" border="0"/></td>  </tr>
      </table>
    </div>
                                  <p>Note that the above transformation is lossy and \
                as such the 
              following XML names all map to the same Java name. The ant1.x mapping 
              is similarly lossy and in practice this has not been an issue.</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
                width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" \
                height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
width="1" height="1" vspace="0" hspace="0" border="0"/></td>  </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" \
height="1" vspace="0" hspace="0" border="0"/></td>  <td bgcolor="#ffffff"><pre>
  base-dir   ===&gt;   BaseDir
  Base-dir   ===&gt;   BaseDir
  baseDir    ===&gt;   BaseDir
  BaseDir    ===&gt;   BaseDir</pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" \
height="1" vspace="0" hspace="0" border="0"/></td>  </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
                width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" \
                height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
width="1" height="1" vspace="0" hspace="0" border="0"/></td>  </tr>
      </table>
    </div>
                                  <p><i>NOTE: We should really resolve this and \
either disallow '-' characters   or disallow uppercase or something. (PD)</i></p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Resolving Values"><strong>Resolving Values</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The first stage of mapping the XML representation to the \
                task
              is resolving all text data. The text data that needs to be resolved 
              include the values of attributes and the content.</p>
                                  <p>Resolution consists of expanding any property \
                references in the text
              data. Property references are identified as starting with the token 
              "${" and finishing with another "}" token. The text 
              in between is the name of a property. The value of the property \
                replaces
              the sequence of text starting with the "${" token and finishing 
              with the "}" token.</p>
                                  <p>Note that the value of the property may not be a \
                string. If the text data
              contains text (or other property references) to either side of the \
                property
              reference then it must be <a href="converter.html">converted</a> to a 
              String.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Modeller"><strong>Modeller</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Currently the representation of object are stored in a \
                hierarchial 
              tree of <code>org.apache.myrmidon.api.metadata.ModelElement</code>
              objects. Each ModelElement has a number of attributes and can have
              either content or sub-elements.</p>
                                  <p>In most cases it is the responsibility of the \
                runtime to map 
              the ModelElement onto an object. However in some cases it may be useful \
                
              for the object to get access to it's own model and for it to explicitly
              manage it's own configuration. In this case the object should implement
              the <code>org.apache.myrmidon.api.metadata.Modeller</code> interface
              which will provide the mechanism for the object to receive its own 
              representation and configure itself.</p>
                                  <p>Note that the Modeller mechanism should be \
                avoided if possible
              as it adds considerable complexity to the implementing object.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Attributes"><strong>Attributes</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>To map an XML attribute on to a Java object, the name of \
                the 
              attribute is mapped to a java name and prefixed with the string
              "set". The resulting string is then used to look up a 
              method with a single parameter.</p>
                                  <p>For example, for the attribute "world" would \
result  in a lookup of a method named "setWorld" with a single
              parameter.</p>
                                  <p>If multiple methods were matched during the \
                lookup then an 
              exception is thrown indicating ambiguity. Theres is an exception
              to this rule that allows 2 methods to be matched if one of the 
              methods takes a <code>java.lang.String</code> parameter. The method
              that has the <code>java.lang.String</code> parameter is ignored and 
              the other method would be chosen. This exception is allowed as it is 
              common practice for a task to evolve from String parameters to more 
              strongly typed parameters.</p>
                                  <p>The resolved text data of the attribute must be 
              <a href="converter.html">converted</a> to the type of the matched 
              methods parameter. For example, if the "setWorld" method
              took a parameter of type <code>java.io.File</code> then the resolved
              text data must be converted into a <code>java.io.File</code>. The
              conversion is done by the Converter architecture that is more fully 
              described in the <a href="converter.html">Converter HOWTO</a>.</p>
                                  <p>After the value is converted to the correct type \
the method is   invoked with the converted value.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Content"><strong>Content</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>The XML representation of object can have either have \
                nested
              elements or nested text (content) but not both. To add the content
              to an object a method named "content" with one parameter is looked 
              up. The resolved text data for content is then 
              <a href="converter.html">converted</a> to the type of the parameter
              and passed in via the method.</p>
                      </blockquote>
      </td></tr>
    </table>
          <table border="0" cellspacing="0" cellpadding="2" width="100%">
      <tr><td bgcolor="#525D76">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Element"><strong>Element</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>Mapping an ModelElement onto a java object is a series \
of steps.  If the ModelElement name ends with the string "-ref" then 
              it is treated as a reference element - see the <em>Referrenced 
              Elements</em> section. Otherwise, the element is first attempted to 
              be mapped as a <em>Named Element</em> and if no match is found via 
              that method it tries to treat the element as a <em>Typed \
                Element</em>.</p>
                                    <table border="0" cellspacing="0" cellpadding="2" \
width="100%">  <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Named Elements"><strong>Named Elements</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>To map a named ModelElement on to a Java object, the \
                name of 
              the element is mapped to a java name and prefixed with the string
              "add". The resulting string is then used to look up a 
              method with a single parameter.</p>
                                  <p>For example, for the attribute "geometry" would \
result  in a lookup of a method named "addGeometry" with a single
              parameter. If multiple methods were matched during the lookup then an 
              exception is thrown indicating ambiguity. If no methods were found that
              match name then skip down to configuring "typed" elements.</p>
                                  <p>The type of the methods single parameter is then \
                examined to determine
              what happens next. There are two valid situations, if neither of these \
are   satisfied, then an exception is thrown.</p>
                                  <ul>
                <li>The parameters type is \
<code>org.apache.myrmidon.api.metadata.ModelElement</code></li>  <li>The parameters \
type is a concrete class</li>  </ul>
                                  <p>1. If the parameter has a type of \
                <code>org.apache.myrmidon.api.metadata.ModelElement</code>
              then the un-modified model representation of element is passed to \
object by invoking  the adder method.</p>
                                  <p>2. If the parameters type is concrete then an \
                instance of the parameter is 
              instantiated using the default constructor. This created object is then \
                configured 
              in the same manner as task using the elements representation as the \
                model. After
              the object is configured it is passed into object by invoking the adder \
method.</p>  </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" \
width="100%">  <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Referrenced Elements"><strong>Referrenced Elements</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>A referenced element is one that has a name ending in 
              "-ref" and has a single attribute "name"
              and no content or child elements.</p>
                                  <p>The value of the "name" attribute is the name of \
                a property. 
              The value of this property is retrieved from the TaskContext.</p>
                                  <p>Like with <em>Named Elements</em> the name of \
                the element (minus
              the "-ref" part) is mapped to a java name and prefixed with the string
              "add". The resulting string is then used to look up a 
              method with a single parameter. If multiple methods were matched during \
the lookup then an   exception is thrown indicating ambiguity.</p>
                                  <p>The value retrieved from the TaskContext is then \
                converted to the type 
              of the methods parameter and the add method is invoked with the \
                converted value.</p>
                                  <p>An example usage is the following;</p>
                                    <div align="left">
      <table cellspacing="4" cellpadding="0" border="0">
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
                width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" \
                height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
width="1" height="1" vspace="0" hspace="0" border="0"/></td>  </tr>
        <tr>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" \
height="1" vspace="0" hspace="0" border="0"/></td>  <td bgcolor="#ffffff"><pre>
  
              &lt;my-task ...&gt;
                &lt;classpath-ref name=&quot;project.class.path&quot;/&gt;
              &lt;/my-task&gt;
  
  </pre></td>
          <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" \
height="1" vspace="0" hspace="0" border="0"/></td>  </tr>
        <tr>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
                width="1" height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" \
                height="1" vspace="0" hspace="0" border="0"/></td>
          <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" \
width="1" height="1" vspace="0" hspace="0" border="0"/></td>  </tr>
      </table>
    </div>
                      </blockquote>
      </td></tr>
    </table>
                                    <table border="0" cellspacing="0" cellpadding="2" \
width="100%">  <tr><td bgcolor="#828DA6">
        <font color="#ffffff" face="arial,helvetica,sanserif">
          <a name="Typed Elements"><strong>Typed Elements</strong></a>
        </font>
      </td></tr>
      <tr><td>
        <blockquote>
                          <p>"Typed" elements can also be added to an object. A typed \
                element 
              is one in which the name of the element actually refers to a type \
rather than the   name of the adder to call.</p>
                                  <p>For example, you may wish to allow a task to add \
                arbitrary instances of the 
              Condition role to a task. So instead of adding methods such as 
              <code>addAnd(AndCondition)</code>, <code>addOr(OrCondition)</code> and
              <code>addXor(XorCondition)</code> you can instead add a single method 
              <code>add(Condition)</code>. This vastly simplifies the amount of work \
                required
              to write tasks that take conditions. More importantly it allows \
                end-users to 
              extend the number of elements selected by task. For instance if the \
                user wanted
              a "nand" condition they could write the Nand type use it in their build
              file. For a discussion on roles and types see the <a \
href="types.html">Types  HOWTO</a>.</p>
                                  <p>To use a Typed adder there must be a single \
                method named "add" that
              has a single parameter. The parameter <em>MUST</em> be an abstract \
                interface and
              must be registered as a role. The name of the element is then used to \
                lookup the
              a type in the TypeManager with a role matching the interface name.</p>
                                  <p>For example if an element named "nand" was added \
                to an object that had 
              an adder with the signature <code>void add( Condition condition \
                )</code> then 
              the type named "nand" in the role "Condition" would be looked up.
              An instance of the type would then be created using the default \
                constructor and the
              created object would be configured and then adder to object using \
adder.</p>  </blockquote>
      </td></tr>
    </table>
                      </blockquote>
      </td></tr>
    </table>
                </td>
          </tr>
  
          <!-- FOOTER -->
          <tr><td colspan="2">
            <hr noshade="" size="1"/>
          </td></tr>
          <tr><td colspan="2">
            <div align="center"><font color="#525D76" size="-1"><em>
            Copyright &#169; 2000-2002, Apache Software Foundation
            </em></font></div>
          </td></tr>
        </table>
      </body>
    </html>
  <!-- end the processing -->
  
  
  
  
  
  
  
  1.1                  jakarta-ant/proposal/myrmidon/src/xdocs/configuring.xml
  
  Index: configuring.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
  
      <properties>
          <title>On Task Configuring in Ant2</title>
          <author email="peter@apache.org">Peter Donald</author>
      </properties>
  
      <body>
  
          <section name="Introduction">
              <p>This section will describe in detail the mechanism via which tasks \
                are
              configured. Configuration is the name given to the stage in tasks
              lifecycle via which the XML representation is mapped onto the task 
              object.</p>
          </section>
  
          <section name="Names">
  
              <p>When mapping the XML representation on to the task object you
              need to be able map the names as they appear in the XML to the 
              names as they appear in the Java code. The process is for generating
              a java name from the xml name is as follows.</p>
              <ol>
                <li>Capitalize the first character of name.</li>
                <li>Find any '-' characters in XML name and remove character and
                capitalize the following letter. (And there must be a following 
                letter)</li>
              </ol>
              <p>Some example mappings;</p>
              <source>
  my-name    ===&gt;   MyName
  aString    ===&gt;   AString
  Basedir    ===&gt;   Basedir
  baseDir    ===&gt;   BaseDir
  url        ===&gt;   Url</source>
              <p>Note that the above transformation is lossy and as such the 
              following XML names all map to the same Java name. The ant1.x mapping 
              is similarly lossy and in practice this has not been an issue.</p>
              <source>
  base-dir   ===&gt;   BaseDir
  Base-dir   ===&gt;   BaseDir
  baseDir    ===&gt;   BaseDir
  BaseDir    ===&gt;   BaseDir</source>
              <p><i>NOTE: We should really resolve this and either disallow '-' \
characters   or disallow uppercase or something. (PD)</i></p>
          </section>
  
          <section name="Resolving Values">
              <p>The first stage of mapping the XML representation to the task
              is resolving all text data. The text data that needs to be resolved 
              include the values of attributes and the content.</p>
              <p>Resolution consists of expanding any property references in the text
              data. Property references are identified as starting with the token 
              &quot;${&quot; and finishing with another &quot;}&quot; token. The text \
                
              in between is the name of a property. The value of the property \
                replaces
              the sequence of text starting with the &quot;${&quot; token and \
finishing   with the &quot;}&quot; token.</p>
              <p>Note that the value of the property may not be a string. If the text \
                data
              contains text (or other property references) to either side of the \
                property
              reference then it must be <a href="converter.html">converted</a> to a 
              String.</p>
          </section>
  
          <section name="Modeller">
              <p>Currently the representation of object are stored in a hierarchial 
              tree of <code>org.apache.myrmidon.api.metadata.ModelElement</code>
              objects. Each ModelElement has a number of attributes and can have
              either content or sub-elements.</p>
              <p>In most cases it is the responsibility of the runtime to map 
              the ModelElement onto an object. However in some cases it may be useful \
                
              for the object to get access to it's own model and for it to explicitly
              manage it's own configuration. In this case the object should implement
              the <code>org.apache.myrmidon.api.metadata.Modeller</code> interface
              which will provide the mechanism for the object to receive its own 
              representation and configure itself.</p>
              <p>Note that the Modeller mechanism should be avoided if possible
              as it adds considerable complexity to the implementing object.</p>
          </section>
  
          <section name="Attributes">
              <p>To map an XML attribute on to a Java object, the name of the 
              attribute is mapped to a java name and prefixed with the string
              &quot;set&quot;. The resulting string is then used to look up a 
              method with a single parameter.</p>
              <p>For example, for the attribute &quot;world&quot; would result
              in a lookup of a method named &quot;setWorld&quot; with a single
              parameter.</p>
              <p>If multiple methods were matched during the lookup then an 
              exception is thrown indicating ambiguity. Theres is an exception
              to this rule that allows 2 methods to be matched if one of the 
              methods takes a <code>java.lang.String</code> parameter. The method
              that has the <code>java.lang.String</code> parameter is ignored and 
              the other method would be chosen. This exception is allowed as it is 
              common practice for a task to evolve from String parameters to more 
              strongly typed parameters.</p>
              <p>The resolved text data of the attribute must be 
              <a href="converter.html">converted</a> to the type of the matched 
              methods parameter. For example, if the &quot;setWorld&quot; method
              took a parameter of type <code>java.io.File</code> then the resolved
              text data must be converted into a <code>java.io.File</code>. The
              conversion is done by the Converter architecture that is more fully 
              described in the <a href="converter.html">Converter HOWTO</a>.</p>
              <p>After the value is converted to the correct type the method is 
              invoked with the converted value.</p>
          </section>
  
          <section name="Content">
              <p>The XML representation of object can have either have nested
              elements or nested text (content) but not both. To add the content
              to an object a method named "content" with one parameter is looked 
              up. The resolved text data for content is then 
              <a href="converter.html">converted</a> to the type of the parameter
              and passed in via the method.</p>
          </section>
  
          <section name="Element">
              <p>Mapping an ModelElement onto a java object is a series of steps.
              If the ModelElement name ends with the string &quot;-ref&quot; then 
              it is treated as a reference element - see the <em>Referrenced 
              Elements</em> section. Otherwise, the element is first attempted to 
              be mapped as a <em>Named Element</em> and if no match is found via 
              that method it tries to treat the element as a <em>Typed \
Element</em>.</p>  <subsection name="Named Elements">
              <p>To map a named ModelElement on to a Java object, the name of 
              the element is mapped to a java name and prefixed with the string
              &quot;add&quot;. The resulting string is then used to look up a 
              method with a single parameter.</p>
  
              <p>For example, for the attribute &quot;geometry&quot; would result
              in a lookup of a method named &quot;addGeometry&quot; with a single
              parameter. If multiple methods were matched during the lookup then an 
              exception is thrown indicating ambiguity. If no methods were found that
              match name then skip down to configuring &quot;typed&quot; \
elements.</p>  
              <p>The type of the methods single parameter is then examined to \
                determine
              what happens next. There are two valid situations, if neither of these \
are   satisfied, then an exception is thrown.</p>
              <ul>
                <li>The parameters type is \
<code>org.apache.myrmidon.api.metadata.ModelElement</code></li>  <li>The parameters \
type is a concrete class</li>  </ul>
              <p>1. If the parameter has a type of \
                <code>org.apache.myrmidon.api.metadata.ModelElement</code>
              then the un-modified model representation of element is passed to \
object by invoking  the adder method.</p>
              <p>2. If the parameters type is concrete then an instance of the \
                parameter is 
              instantiated using the default constructor. This created object is then \
                configured 
              in the same manner as task using the elements representation as the \
                model. After
              the object is configured it is passed into object by invoking the adder \
method.</p>  </subsection>
          <subsection name="Referrenced Elements">
              <p>A referenced element is one that has a name ending in 
              &quot;-ref&quot; and has a single attribute &quot;name&quot;
              and no content or child elements.</p>
  
              <p>The value of the &quot;name&quot; attribute is the name of a \
                property. 
              The value of this property is retrieved from the TaskContext.</p>
  
              <p>Like with <em>Named Elements</em> the name of the element (minus
              the &quot;-ref&quot; part) is mapped to a java name and prefixed with \
                the string
              &quot;add&quot;. The resulting string is then used to look up a 
              method with a single parameter. If multiple methods were matched during \
the lookup then an   exception is thrown indicating ambiguity.</p>
  
              <p>The value retrieved from the TaskContext is then converted to the \
                type 
              of the methods parameter and the add method is invoked with the \
converted value.</p>  
              <p>An example usage is the following;</p>
              <source><![CDATA[
  
              <my-task ...>
                <classpath-ref name="project.class.path"/>
              </my-task>
  
  ]]></source>
          </subsection>
          <subsection name="Typed Elements">
              <p>&quot;Typed&quot; elements can also be added to an object. A typed \
                element 
              is one in which the name of the element actually refers to a type \
rather than the   name of the adder to call.</p>
              <p>For example, you may wish to allow a task to add arbitrary instances \
                of the 
              Condition role to a task. So instead of adding methods such as 
              <code>addAnd(AndCondition)</code>, <code>addOr(OrCondition)</code> and
              <code>addXor(XorCondition)</code> you can instead add a single method 
              <code>add(Condition)</code>. This vastly simplifies the amount of work \
                required
              to write tasks that take conditions. More importantly it allows \
                end-users to 
              extend the number of elements selected by task. For instance if the \
                user wanted
              a &quot;nand&quot; condition they could write the Nand type use it in \
                their build
              file. For a discussion on roles and types see the <a \
href="types.html">Types  HOWTO</a>.</p>
              <p>To use a Typed adder there must be a single method named \
                &quot;add&quot; that
              has a single parameter. The parameter <em>MUST</em> be an abstract \
                interface and
              must be registered as a role. The name of the element is then used to \
                lookup the
              a type in the TypeManager with a role matching the interface name.</p>
  
              <p>For example if an element named &quot;nand&quot; was added to an \
                object that had 
              an adder with the signature <code>void add( Condition condition \
                )</code> then 
              the type named &quot;nand&quot; in the role &quot;Condition&quot; would \
                be looked up.
              An instance of the type would then be created using the default \
                constructor and the
              created object would be configured and then adder to object using \
adder.</p>  
          </subsection>
          </section>
      </body>
  </document>
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic