You are viewing a plain text version of this content. The canonical link for it is here.
Posted to m2-dev@maven.apache.org by ev...@apache.org on 2004/09/24 16:57:07 UTC

cvs commit: maven-components/maven-model maven.mdo.new

evenisse    2004/09/24 07:57:07

  Modified:    maven-model maven.mdo.new
  Log:
  The new model for the new modello. Not tested for the moment.
  
  Revision  Changes    Path
  1.3       +563 -177  maven-components/maven-model/maven.mdo.new
  
  Index: maven.mdo.new
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-model/maven.mdo.new,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- maven.mdo.new	8 Aug 2004 02:49:38 -0000	1.2
  +++ maven.mdo.new	24 Sep 2004 14:57:07 -0000	1.3
  @@ -1,4 +1,3 @@
  -<?xml version="1.0"?>
   <!--
    |
    | o add specification element to a field, this would be more a technical description of
  @@ -21,10 +20,14 @@
     <id>maven</id>
     <name>Maven</name>
     <description>Maven's model for Java project.</description>
  -  <packageName>org.apache.maven.model</packageName>
  -  <root>Model</root>
  +  <defaults>
  +    <default>
  +      <key>package</key>
  +      <value>org.apache.maven.model</value>
  +    </default>
  +  </defaults>
     <classes>
  -    <class>
  +    <class rootElement="true">
         <name>Model</name>
         <version>3.0.0+</version>
         <fields>
  @@ -62,7 +65,9 @@
             <name>id</name>
             <version>3.0.0</version>
             <required>true</required>
  -          <description>The primary id for your project.</description>
  +          <description>
  +            The id of the project.
  +          </description>
             <type>String</type>
           </field>
           <field>
  @@ -147,13 +152,17 @@
             <name>issueManagement</name>
             <version>4.0.0</version>
             <description>The project's issue management information.</description>
  -          <type>IssueManagement</type>
  +          <association>
  +            <type>IssueManagement</type>
  +          </association>
           </field>
           <field>
             <name>ciManagement</name>
             <version>4.0.0</version>
             <description>The project's continuous integration management information.</description>
  -          <type>CiManagement</type>
  +          <association>
  +            <type>CiManagement</type>
  +          </association>
           </field>
           <field>
             <name>inceptionYear</name>
  @@ -185,66 +194,45 @@
             <version>3.0.0</version>
             <description>The FQDN of the host where the project's artifacts are uploaded.</description>
             <type>String</type>
  -          <comment>This naming is inconsistent and distriubtion should occur from a repository structure.</comment>
  +          <comment>This naming is inconsistent and distribution should occur from a repository structure.</comment>
           </field>
           <field>
             <name>distributionDirectory</name>
             <version>3.0.0</version>
             <description>The directory on the distribution host where artifacts are placed when uploaded.</description>
             <type>String</type>
  -          <comment>This naming is inconsistent and distriubtion should occur from a repository structure.</comment>
  +          <comment>This naming is inconsistent and distribution should occur from a repository structure.</comment>
           </field>
  +
           <field>
  -          <name>scm</name>
  +          <name>repositories</name>
             <version>4.0.0</version>
  -          <description>Specification for the SCM use by the project.</description>
  -          <type>Scm</type>
  -        </field>
  -        <field>
  -          <name>repository</name>
  -          <version>3.0.0</version>
  -          <description>Specification for the SCM use by the project.</description>
  -          <type>Repository</type>
  -          <comment>This element needs to be renamed as it conflicts with the existing notion of repositories in Maven.</comment>
  +          <description>The lists of the remote repositories</description>
  +          <association>
  +            <type>Repository</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
           </field>
           <field>
  -          <name>build</name>
  -          <version>3.0.0+</version>
  -          <required>true</required>
  -          <description>Information required to build the project.</description>
  -          <type>Build</type>
  +          <name>pluginRepositories</name>
  +          <version>4.0.0</version>
  +          <description>The lists of the remote repositories for discovering plugins</description>
  +          <association>
  +            <type>Repository</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +          <comment>This may be removed or relocated in the near future. It is undecided whether plugins really need a remote repository set of their own.</comment>
           </field>
           <field>
  -          <name>organization</name>
  -          <version>3.0.0+</version>
  -          <description>
  -            This element describes various attributes of the organziation to
  -            which the project belongs.  These attributes are utilized when
  -            documentation is created (for copyright notices and links).
  -          </description>
  -          <type>Organization</type>
  -        </field>
  -        <field>
  -          <name>distributionManagement</name>
  -          <version>4.0.0</version>
  -          <description>Distribution information for a project.</description>
  -          <type>DistributionManagement</type>
  -        </field>
  -      </fields>
  -      <associations>
  -        <association>
  -          <name>repositories</name>
  -          <version>4.0.0</version>
  -          <description>The lists of the remote repositories</description>
  -          <to>Repository</to>
  -        </association>
  -        <association>
             <name>mailingLists</name>
             <version>3.0.0+</version>
             <description>The mailing lists for the project.</description>
  -          <to>MailingList</to>
  -        </association>
  -        <association>
  +          <association>
  +            <type>MailingList</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
             <name>developers</name>
             <version>3.0.0+</version>
             <description>
  @@ -254,9 +242,12 @@
               additional elements (described below).  The auto-generated site
               documentation references this information.
             </description>
  -          <to>Developer</to>
  -        </association>
  -        <association>
  +          <association>
  +            <type>Developer</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
             <name>contributors</name>
             <version>3.0.0+</version>
             <description>
  @@ -266,9 +257,12 @@
               elements (described below).  The auto-generated site documentation
               references this information.
             </description>
  -          <to>Contributor</to>
  -        </association>
  -        <association>
  +          <association>
  +            <type>Contributor</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
             <name>dependencies</name>
             <version>3.0.0+</version>
             <description>
  @@ -277,10 +271,27 @@
               <code>dependency</code> element, which is then described by
               additional elements (described below).
             </description>
  +          <association>
  +            <type>Dependency</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
             <comment>These should ultimately only be compile time dependencies when transitive dependencies come into play.</comment>
  -          <to>Dependency</to>
  -        </association>
  -        <association>
  +        </field>
  +        <field>
  +          <name>overrides</name>
  +          <version>4.0.0</version>
  +          <description>
  +            This element describes all of the dependency overrides for a
  +            project.  Each dependency is described by a
  +            <code>override</code> element, which is then described by
  +            additional elements (described below).
  +          </description>
  +          <association>
  +            <type>Override</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
             <name>licenses</name>
             <version>3.0.0+</version>
             <description>
  @@ -290,27 +301,39 @@
               references this information.  Projects should only list the license(s) that
               applies to the project and not the licenses that apply to dependencies.
             </description>
  -          <to>License</to>
  -        </association>
  -        <association>
  +          <association>
  +            <type>License</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
             <name>versions</name>
             <version>3.0.0</version>
             <description>The released versions of the project.</description>
  -          <to>Version</to>
  -        </association>
  -        <association>
  +          <association>
  +            <type>Version</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
             <name>branches</name>
             <version>3.0.0</version>
             <description>The SCM branches create for the project.</description>
  -          <to>Branch</to>
  -        </association>
  -        <association>
  +          <association>
  +            <type>Branch</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
             <name>packageGroups</name>
             <version>3.0.0+</version>
             <description>Package groups required for complete javadocs.</description>
  -          <to>PackageGroup</to>
  -        </association>
  -        <association>
  +          <association>
  +            <type>PackageGroup</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
             <name>reports</name>
             <version>3.0.0+</version>
             <description>
  @@ -321,12 +344,118 @@
               reports will be included in the navigation bar for browsing in
               the order they are specified.
             </description>
  -          <to>String</to>
  -        </association>
  -      </associations>
  +          <association>
  +            <type>String</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
  +          <name>scm</name>
  +          <version>4.0.0</version>
  +          <description>Specification for the SCM use by the project.</description>
  +          <association>
  +            <type>Scm</type>
  +          </association>
  +        </field>
  +        <field>
  +          <name>repository</name>
  +          <version>3.0.0</version>
  +          <description>Specification for the SCM use by the project.</description>
  +          <association>
  +            <type>Repository</type>
  +          </association>
  +          <comment>This element needs to be renamed as it conflicts with the existing notion of repositories in Maven.</comment>
  +        </field>
  +        <field>
  +          <name>build</name>
  +          <version>3.0.0+</version>
  +          <required>true</required>
  +          <description>Information required to build the project.</description>
  +          <association>
  +            <type>Build</type>
  +          </association>
  +        </field>
  +        <field>
  +          <name>organization</name>
  +          <version>3.0.0+</version>
  +          <description>
  +            This element describes various attributes of the organziation to
  +            which the project belongs.  These attributes are utilized when
  +            documentation is created (for copyright notices and links).
  +          </description>
  +          <association>
  +            <type>Organization</type>
  +          </association>
  +        </field>
  +        <field>
  +          <name>distributionManagement</name>
  +          <version>4.0.0</version>
  +          <description>Distribution information for a project.</description>
  +          <association>
  +            <type>DistributionManagement</type>
  +          </association>
  +        </field>
  +        <field>
  +          <name>local</name>
  +          <version>4.0.0</version>
  +          <required>false</required>
  +          <description>Local configuration information.</description>
  +          <association>
  +            <type>Local</type>
  +          </association>
  +        </field>
  +        <!-- @todo long run 4.0.0 may not need properties, with the parameters being specified
  +          for the plugin directly -->
  +        <field>
  +          <name>properties</name>
  +          <version>3.0.0+</version>
  +          <description>
  +            Properties about the project. This allows you to configure your project and the
  +            plugins it uses.
  +          </description>
  +          <type>Properties</type>
  +          <association mapStyle="inline">
  +            <type>String</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
  +          <name>preGoals</name>
  +          <version>4.0.0</version>
  +          <description>Set of decorator(s) injected before the target goal(s).</description>
  +          <association>
  +            <type>PreGoal</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
  +          <name>postGoals</name>
  +          <version>4.0.0</version>
  +          <description>Set of decorator(s) injected after the target goal(s).</description>
  +          <association>
  +            <type>PostGoal</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +      </fields>
         <!-- We need this because we can't use package as a field name. -->
  +      <!-- @todo this means it is undocumented. Should we instead provide an optional field name so package can be mapped to the field packageName? -->
         <codeSegments>
           <codeSegment>
  +          <version>3.0.0</version>
  +          <code>
  +            public void setVersion(String version)
  +            {
  +                this.currentVersion = version;
  +            }
  +
  +            public String getVersion()
  +            {
  +                return currentVersion;
  +            }
  +          </code>
  +        </codeSegment>
  +        <codeSegment>
             <version>3.0.0+</version>
             <code>
               private String packageName;
  @@ -361,39 +490,12 @@
               }
             </code>
           </codeSegment>
  -<!--
  -        <codeSegment>
  -          <version>3.0.0</version>
  -          <code>
  -            public void setId( String id )
  -            {
  -                int i = id.indexOf( "+" );
  -                int j = id.indexOf( ":" );
  -
  -                if ( i > 0 )
  -                {
  -                    setGroupId( id.substring( 0, i ) );
  -                    setArtifactId( id.replace( '+', '-' ) );
  -                }
  -                else if ( j > 0 )
  -                {
  -                    setGroupId( id.substring( 0, j ) );
  -                    setArtifactId( id.substring( j + 1 ) );
  -                }
  -                else
  -                {
  -                    setGroupId( id );
  -                    setArtifactId( id );
  -                }
  -            }
  -          </code>
  -        </codeSegment>
  --->
         </codeSegments>
       </class>
  +    <!-- @todo: is any of this too CVS specific? Investigate other SCMs -->
       <class>
         <name>Branch</name>
  -      <version>3.0.0</version>
  +      <version>3.0.0+</version>
         <description>
           This element describes each of the branches of the
           project. Each branch is described by a
  @@ -403,7 +505,8 @@
         <fields>
           <field>
             <name>tag</name>
  -          <version>3.0.0</version>
  +          <version>3.0.0+</version>
  +          <required>true</required>
             <description>
               The branch tag in the version control system
               (e.g. cvs) used by the project for the source
  @@ -412,6 +515,24 @@
             </description>
             <type>String</type>
           </field>
  +        <field>
  +          <name>description</name>
  +          <version>4.0.0</version>
  +          <description>
  +            A description of the branch and its strategy.
  +          </description>
  +          <type>String</type>
  +        </field>
  +        <field>
  +          <name>lastMergeTag</name>
  +          <version>4.0.0</version>
  +          <description>
  +            This is the tag in the version control system that was last used
  +            to merge from the branch to the current codebase. Future merges
  +            should merge only the changes from this tag to the next.
  +          </description>
  +          <type>String</type>
  +        </field>
         </fields>
       </class>
       <class>
  @@ -472,12 +593,55 @@
             <type>String</type>
           </field>
           <field>
  +          <name>integrationUnitTestSourceDirectory</name>
  +          <version>3.0.0+</version>
  +          <description>
  +            This element specifies a directory containing integration test
  +            sources of the project.
  +          </description>
  +          <type>String</type>
  +        </field>
  +        <field>
  +          <name>sourceModifications</name>
  +          <version>3.0.0+</version>
  +          <required>true</required>
  +          <description>
  +            This element describes all of the sourceModifications associated with a
  +            project.  Each source modification is described by a
  +            <code>sourceModification</code> element, which is then described by
  +            additional elements (described below).  These modifications are used
  +            to exclude or include various source depending on the environment
  +            the build is running in.
  +          </description>
  +          <association>
  +            <type>SourceModification</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
             <name>unitTest</name>
             <version>3.0.0+</version>
             <required>true</required>
             <description>This element specifies unit tests associated with the project.</description>
  -          <type>UnitTest</type>
             <defaultValue>new UnitTest()</defaultValue>
  +          <association>
  +            <type>UnitTest</type>
  +          </association>
  +        </field>
  +        <field>
  +          <name>resources</name>
  +          <version>3.0.0+</version>
  +          <description>
  +            This element describes all of the resources associated with a project or unit tests.
  +            Each resource is described by a resource element, which is then described by additional
  +            elements (described
  +            <a href="#resource">below</a>). These resources are used to
  +            complete the jar file or to run unit test.
  +          </description>
  +          <association>
  +            <type>Resource</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
           </field>
           <field>
             <name>directory</name>
  @@ -496,6 +660,16 @@
             <type>String</type>
           </field>
           <field>
  +          <name>finalName</name>
  +          <version>4.0.0</version>
  +          <description>
  +            The filename (including an extension, but with no path information) that the produced artifact
  +            will be called. The default value is artifactId-version.extension (where extension is derived from
  +            type).
  +          </description>
  +          <type>String</type>
  +        </field>
  +        <field>
             <name>testOutput</name>
             <version>4.0.0</version>
             <description>
  @@ -504,36 +678,6 @@
             <type>String</type>
           </field>
         </fields>
  -      <associations>
  -        <association>
  -          <name>sourceModifications</name>
  -          <version>3.0.0+</version>
  -	  <!--
  -          <required>true</required>
  -	  -->
  -          <description>
  -            This element describes all of the sourceModifications associated with a
  -            project.  Each source modification is described by a
  -            <code>sourceModification</code> element, which is then described by
  -            additional elements (described below).  These modifications are used
  -            to exclude or include various source depending on the environment
  -            the build is running in.
  -          </description>
  -          <to>SourceModification</to>
  -        </association>
  -        <association>
  -          <name>resources</name>
  -          <version>3.0.0+</version>
  -          <description>
  -            This element describes all of the resources associated with a project or unit tests.
  -            Each resource is described by a resource element, which is then described by additional
  -            elements (described
  -            <a href="#resource">below</a>). These resources are used to
  -            complete the jar file or to run unit test.
  -          </description>
  -          <to>Resource</to>
  -        </association>
  -      </associations>
       </class>
       <class>
         <name>CiManagement</name>
  @@ -588,16 +732,6 @@
             <type>String</type>
           </field>
           <field>
  -          <name>timezone</name>
  -          <version>3.0.0+</version>
  -          <description>
  -            The timezone the contributor is in. This is a number in the range -14 to 14.
  -          </description>
  -          <type>String</type>
  -        </field>
  -      </fields>
  -      <associations>
  -        <association>
             <name>roles</name>
             <version>3.0.0+</version>
             <description>
  @@ -606,9 +740,20 @@
               <code>role</code> element, the body of which is a
               role name.
             </description>
  -	  <to>String</to>
  -        </association>
  -      </associations>
  +          <association>
  +            <type>String</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
  +          <name>timezone</name>
  +          <version>3.0.0+</version>
  +          <description>
  +            The timezone the contributor is in. This is a number in the range -14 to 14.
  +          </description>
  +          <type>String</type>
  +        </field>
  +      </fields>
       </class>
       <class>
         <name>Dependency</name>
  @@ -619,7 +764,7 @@
             <version>3.0.0</version>
             <required>true</required>
             <description>
  -            The id of the dependency.
  +            The id of the project.
             </description>
             <type>String</type>
           </field>
  @@ -686,10 +831,7 @@
             <type>String</type>
             <defaultValue>jar</defaultValue>
           </field>
  -      </fields>
  -      <associations>
  -<!-- Trygve: Properties is a TODO in modello
  -        <association>
  +        <field>
             <name>properties</name>
             <version>3.0.0+</version>
             <description>
  @@ -700,28 +842,161 @@
               in
               <code>WEB-INF/lib</code>. For example syntax, check the war plugin docs.
             </description>
  -          <to>java.util.Properties</to>
  -        </association>
  --->
  -      </associations>
  +          <type>Properties</type>
  +          <association mapStyle="inline">
  +            <type>String</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +      </fields>
         <codeSegments>
           <codeSegment>
  +          <version>3.0.0+</version>
  +          <code>
  +            public String toString()
  +            {
  +                return groupId + "/" + type + "s:" + artifactId + "-" + version;
  +            }
  +          </code>
  +        </codeSegment>
  +        <codeSegment>
             <version>4.0.0</version>
             <code>
               public String getId()
               {
                   return groupId + ":" + artifactId + ":" + type + ":" + version;
               }
  +          </code>
  +        </codeSegment>
  +        <codeSegment>
  +          <version>3.0.0</version>
  +          <code><![CDATA[
  +            public String getKey()
  +            {
  +                return getId() + ":" + getType();
  +            }
   
  -            public String toString()
  +            public String getArtifactDirectory()
               {
  -                return groupId + "/" + type + "s:" + artifactId + "-" + version;
  +                return getGroupId();
               }
  -          </code>
  +        
  +            public String getArtifact()
  +            {
  +                // If the jar name has been explicty set then use that. This
  +                // is when the <jar/> element is explicity used in the POM.
  +                if ( getJar() != null)
  +                {
  +                    return getJar();
  +                }
  +        
  +                return getArtifactId() + "-" + getVersion() + "." + getExtension();
  +            }
  +        
  +            public String getExtension()
  +            {
  +                if ("ejb".equals(getType()) || "plugin".equals(getType()) || "aspect".equals(getType())) return "jar";
  +                return getType();
  +            }
  +        
  +            public boolean isAddedToClasspath()
  +            {
  +                return ("jar".equals(getType()) || "ejb".equals(getType()));
  +            }
  +        
  +            public boolean isPlugin()
  +            {
  +                return ("plugin".equals(getType()));
  +            }
  +        
  +            public String getProperty( String property )
  +            {
  +                return getProperties().getProperty( property );
  +            }
  +
  +            public boolean equals( Object o )
  +            {
  +                if ( this == o )
  +                {
  +                    return true;
  +                }
  +            
  +                if ( !( o instanceof Dependency ) )
  +                {
  +                    return false;
  +                }
  +            
  +                Dependency d  = (Dependency) o;
  +                return getId().equals( d.getId() );
  +            }
  +            
  +            public int hashCode()
  +            {
  +                return getId().hashCode();
  +            }
  +          ]]></code>
           </codeSegment>
         </codeSegments>
       </class>
       <class>
  +      <name>Override</name>
  +      <version>4.0.0</version>
  +      <fields>
  +        <field>
  +          <name>groupId</name>
  +          <version>4.0.0</version>
  +          <required>true</required>
  +          <description>
  +            The project group that produced the dependency, e.g.
  +            <code>geronimo</code>.
  +          </description>
  +          <type>String</type>
  +        </field>
  +        <field>
  +          <name>artifactId</name>
  +          <version>4.0.0</version>
  +          <required>true</required>
  +          <description>
  +            The unique id for an artifact produced by the project group, e.g.
  +            <code>germonimo-jms</code>
  +          </description>
  +          <type>String</type>
  +        </field>
  +        <field>
  +          <name>type</name>
  +          <version>4.0.0</version>
  +          <description>
  +            Other known recognised dependency types are:
  +            <code>ejb</code> and
  +            <code>plugin</code>.
  +          </description>
  +          <type>String</type>
  +          <defaultValue>jar</defaultValue>
  +        </field>
  +        <!-- @todo this doesn't consider forced-version overrides, and do we need the version to override? -->
  +        <field>
  +          <name>version</name>
  +          <version>4.0.0</version>
  +          <required>true</required>
  +          <description>
  +            The version of the dependency., e.g.
  +            <code>3.2.1</code>
  +          </description>
  +          <type>String</type>
  +        </field>
  +        <field>
  +          <name>file</name>
  +          <version>4.0.0</version>
  +          <required>true</required>
  +          <description>
  +            The filename of the dependency that will be used to override the one from the repository, e.g.
  +            <code>lib/non-distributable-code-1.3.jar</code>
  +          </description>
  +          <type>String</type>
  +        </field>
  +      </fields>
  +    </class>
  +    <class>
         <superClass>Contributor</superClass>
         <name>Developer</name>
         <version>3.0.0+</version>
  @@ -763,13 +1038,17 @@
             <name>repository</name>
             <version>4.0.0</version>
             <description>Information needed for deploying to remote repository artifacts generated by the project</description>
  -          <type>Repository</type>
  +          <association>
  +            <type>Repository</type>
  +          </association>
           </field>
           <field>
             <name>site</name>
             <description>Information needed for deploying website files of the project.</description>
             <version>4.0.0</version>
  -          <type>Site</type>
  +          <association>
  +            <type>Site</type>
  +          </association>
           </field>
         </fields>
       </class>
  @@ -851,10 +1130,31 @@
             <type>String</type>
           </field>
           <field>
  +          <name>post</name>
  +          <version>4.0.0</version>
  +          <description>
  +            The email address or link that can be used to post to
  +            the mailing list.  If this is an email address, a
  +            <code>mailto:</code> link will automatically be created
  +            when the documentation is created.
  +          </description>
  +          <type>String</type>
  +        </field>
  +        <field>
             <name>archive</name>
             <version>3.0.0+</version>
             <description>The link to a URL where you can browse the archive.</description>
             <type>String</type>
  +          <comment>This should probably be removed from 4.0.0 before alpha-1</comment>
  +        </field>
  +        <field>
  +          <name>archives</name>
  +          <version>4.0.0</version>
  +          <description>The link to a URL where you can browse the archive.</description>
  +          <association>
  +            <type>String</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
           </field>
         </fields>
         <comment>
  @@ -917,23 +1217,30 @@
       <class>
         <name>PatternSet</name>
         <version>3.0.0+</version>
  -      <associations>
  -        <association>
  +      <fields>
  +        <field>
             <name>includes</name>
             <version>3.0.0+</version>
             <description>the description</description>
  -	  <to>String</to>
  -        </association>
  -        <association>
  +          <association>
  +            <type>String</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +        <field>
             <name>excludes</name>
             <version>3.0.0+</version>
             <description>the description</description>
  -	  <to>String</to>
  -        </association>
  -      </associations>
  +          <association>
  +            <type>String</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +      </fields>
         <codeSegments>
           <codeSegment>
             <version>3.0.0+</version>
  +          <!-- @todo: should these be built somewhere so they are only created once, and can be modified? -->
             <code>
               public List getDefaultExcludes()
               {
  @@ -1058,6 +1365,15 @@
             <description>The URL to the project's browsable CVS repository.</description>
             <type>String</type>
           </field>
  +        <field>
  +          <name>branches</name>
  +          <version>4.0.0</version>
  +          <description>The SCM branches that are currently active for the project. These should only be those forked from the current branch or trunk that are intended to be used.</description>
  +          <association>
  +            <type>String</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
         </fields>
       </class>
       <class>
  @@ -1090,7 +1406,7 @@
             <name>filtering</name>
             <version>3.0.0+</version>
             <description>Describe if resources are filtered or not.</description>
  -          <type>String</type>
  +          <type>boolean</type>
             <defaultValue>false</defaultValue>
           </field>
         </fields>
  @@ -1124,14 +1440,17 @@
         <name>UnitTest</name>
         <version>3.0.0+</version>
         <superClass>PatternSet</superClass>
  -      <associations>
  -        <association>
  +      <fields>
  +        <field>
             <name>resources</name>
             <version>3.0.0+</version>
             <description>the description</description>
  -          <to>Resource</to>
  -        </association>
  -      </associations>
  +          <association>
  +            <type>Resource</type>
  +            <multiplicity>*</multiplicity>
  +          </association>
  +        </field>
  +      </fields>
       </class>
       <class>
         <name>Version</name>
  @@ -1268,6 +1587,73 @@
           </field>
         </fields>
       </class>
  +    <class>
  +      <name>GoalDecorator</name>
  +      <version>4.0.0</version>
  +      <fields>
  +        <field>
  +          <name>name</name>
  +          <version>4.0.0</version>
  +          <description>The target goal which should be decorated.</description>
  +          <type>String</type>
  +        </field>
  +        <field>
  +          <name>attain</name>
  +          <version>4.0.0</version>
  +          <description>
  +            The goal which should be injected into the execution chain.
  +          </description>
  +          <type>String</type>
  +        </field>
  +      </fields>
  +    </class>
  +    <class>
  +      <superClass>GoalDecorator</superClass>
  +      <name>PreGoal</name>
  +      <version>4.0.0</version>
  +      <fields></fields>
  +    </class>
  +    <class>
  +      <superClass>GoalDecorator</superClass>
  +      <name>PostGoal</name>
  +      <version>4.0.0</version>
  +      <fields></fields>
  +    </class>
   
  +    <!-- @todo should modello take a parameter/code segment that will forbid the
  +         specification of this in a project other than the user pom? -->
  +    <class>
  +      <name>Local</name>
  +      <version>4.0.0</version>
  +      <description>
  +        Local contains the information that is specific to the user's
  +        local environment. This would only be expected in a user or site pom,
  +        not a project POM.
  +      </description>
  +      <fields>
  +        <!-- @todo should local repository actually be part of the <repositories/> element, or be of repository type? -->
  +        <field>
  +          <name>repository</name>
  +          <version>4.0.0</version>
  +          <description>
  +            The local repository that contains downloaded artifacts.
  +          </description>
  +          <type>String</type>
  +          <!-- @todo systemProperty tag (maven.repo.local value) should be supported by modello -->
  +        </field>
  +        <field>
  +          <name>online</name>
  +          <version>4.0.0</version>
  +          <description>
  +            Whether to run the build online. If not, no remote repositories are consulted for plugins or dependencies
  +            and this configuration may be used by other plugins requiring online access.
  +          </description>
  +          <type>boolean</type>
  +          <defaultValue>true</defaultValue>
  +          <!-- @todo systemProperty tag (maven.online value) should be supported by modello -->
  +        </field>
  +      </fields>
  +    </class>
     </classes>
   </model>
  +