rubys       02/01/01 10:25:37

  Modified:    proposal/gump build.xml
               proposal/gump/java Project.java
               proposal/gump/project gump.xml jakarta-ant.xml
                        jakarta-velocity.xml
               proposal/gump/site/xdocs project.xml
               proposal/gump/stylesheet xref.xsl
  Log:
  Add support for inheriting dependencies.
  
  Revision  Changes    Path
  1.3       +1 -0      jakarta-alexandria/proposal/gump/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-alexandria/proposal/gump/build.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- build.xml 31 Dec 2001 22:00:15 -0000      1.2
  +++ build.xml 1 Jan 2002 18:25:36 -0000       1.3
  @@ -21,6 +21,7 @@
       <jar file="jenny.jar" basedir="classes"/>
   
       <uptodate property="uptodate" targetfile="work/merge.xml">
  +      <srcfiles dir="." includes="jenny.jar"/>
         <srcfiles dir="." includes="${workspace}"/>
         <srcfiles dir="profile" includes="*.xml"/>
         <srcfiles dir="project" includes="*.xml"/>
  
  
  
  1.20      +65 -0     jakarta-alexandria/proposal/gump/java/Project.java
  
  Index: Project.java
  ===================================================================
  RCS file: /home/cvs/jakarta-alexandria/proposal/gump/java/Project.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- Project.java      10 Dec 2001 15:48:08 -0000      1.19
  +++ Project.java      1 Jan 2002 18:25:36 -0000       1.20
  @@ -299,6 +299,68 @@
       }
   
       /**
  +     * Process all inherited dependencies.  
  +     */
  +    private void inheritDependencies() {
  +        for (Enumeration e=dependsOn.elements(); e.hasMoreElements(); ) {
  +            Element depend = (Element) e.nextElement();
  +            String inherit = depend.getAttribute("inherit");
  +            Project p = (Project) projects.get(depend.getAttribute("project"));
  +            if (p == null) continue;
  +
  +            // if inherit="all" is specified on a depends element, then all
  +            // of the optional and depends elements on the referenced project
  +            // are inherited by this project.
  +            //
  +            // if inherit="hard", the same thing happens except that all 
  +            // optional dependencies are converted to "hard" dependencies in 
  +            // the copy.
  +            if (inherit.equals("all") || inherit.equals("hard")) {
  +                for (Enumeration d=p.dependsOn.keys(); d.hasMoreElements(); ) {
  +                    String name = (String) d.nextElement();
  +                    if (dependsOn.get(name) == null) {
  +                        Element source = (Element) p.dependsOn.get(name);
  +                        String type = source.getNodeName();
  +                        Element clone;
  +                        if (inherit.equals("hard") && type.equals("option")) {
  +                            clone = document.createElement("depend");
  +                            Jenny.copyChildren(source, clone);
  +                        } else {
  +                            clone = (Element) source.cloneNode(true);
  +                        }
  +                        clone.setAttribute("inherited", "true");
  +                        dependsOn.put(name,clone);
  +                        element.appendChild(clone);
  +                    }
  +                }
  +            } else if (inherit.equals("runtime")) {
  +                // look for runtime="true" dependencies in the referenced
  +                // project.  Convert depends to options if the reference to
  +                // the project is an option.
  +                String type = depend.getNodeName();
  +                for (Enumeration d=p.dependsOn.keys(); d.hasMoreElements(); ) {
  +                    String name = (String) d.nextElement();
  +                    if (dependsOn.get(name) == null) {
  +                        Element source = (Element) p.dependsOn.get(name);
  +                        if (source.getAttribute("runtime").equals("true")) {
  +                            Element clone;
  +                            if (type.equals("option")) {
  +                                clone = document.createElement("option");
  +                                Jenny.copyChildren(source, clone);
  +                            } else {
  +                                clone = (Element) source.cloneNode(true);
  +                            }
  +                            clone.setAttribute("inherited", "true");
  +                            dependsOn.put(name,clone);
  +                            element.appendChild(clone);
  +                        }
  +                    }
  +                }
  +            }
  +        }
  +    }
  +
  +    /**
        * Implement a deterministing sort order.  Projects which are most
        * referenced get priority.  After that, order is determined alphabetically.
        */
  @@ -320,6 +382,8 @@
       /**
        * Sort all projects in an order that respects the dependencies.  If such
        * an order can not be determined, print out the ones that form a loop.
  +     * As we determine the order, process the inherited dependencies.  This
  +     * way the inheritance will recurse properly.
        */
       private static void sort() throws Exception {
           TreeSet todo = new TreeSet(new Ranker());
  @@ -331,6 +395,7 @@
               Project p = (Project) projects.get(i.next());
               if (p.isReady(todo)) {
                   p.moveToLast();
  +                p.inheritDependencies();
                   todo.remove(p.name);
                   i=todo.iterator();
               }
  
  
  
  1.3       +1 -4      jakarta-alexandria/proposal/gump/project/gump.xml
  
  Index: gump.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-alexandria/proposal/gump/project/gump.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- gump.xml  31 Dec 2001 01:28:19 -0000      1.2
  +++ gump.xml  1 Jan 2002 18:25:36 -0000       1.3
  @@ -12,10 +12,7 @@
       </ant>
   
       <depend project="jakarta-ant"/>
  -    <depend project="commons-collections"/>
  -    <option project="jakarta-velocity"/>
  -    <depend project="jakarta-avalon-logkit"/>
  -    <depend project="jdom"/>
  +    <option project="jakarta-velocity" inherit="runtime"/>
       <depend project="xml-xerces"/>
       <depend project="xml-xalan2"/>
       <option project="xml-batik"/>
  
  
  
  1.26      +2 -11     jakarta-alexandria/proposal/gump/project/jakarta-ant.xml
  
  Index: jakarta-ant.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-alexandria/proposal/gump/project/jakarta-ant.xml,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- jakarta-ant.xml   3 Dec 2001 15:57:03 -0000       1.25
  +++ jakarta-ant.xml   1 Jan 2002 18:25:36 -0000       1.26
  @@ -26,13 +26,9 @@
     <project name="dist-ant">
       <ant target="distribution"/>
   
  -    <depend project="bootstrap-ant"/>
  -    <depend project="xml-xerces"/>
  -    <depend project="xml-xalan2"/>
  +    <depend project="jakarta-ant" inherit="all"/>
       <option project="xml-xalan1-compat"/>
  -    <option project="xml-stylebook2"/>
       <option project="bsf"/>
  -    <option project="junit"/>
       <option project="jakarta-regexp"/>
       <option project="jakarta-oro"/>
       <option project="jakarta-log4j"/>
  @@ -50,12 +46,7 @@
       <mkdir dir="build/testcases"/>
       <ant target="run-tests"/>
   
  -    <depend project="dist-ant"/>
  -    <depend project="xml-xerces"/>
  -    <depend project="xml-xalan2"/>
  -    <depend project="junit"/>
  -    <depend project="jakarta-regexp"/>
  -    <depend project="jakarta-oro"/>
  +    <depend project="dist-ant" inherit="hard"/>
   
       <work nested="build/classes"/>
       <work nested="build/testcases"/>
  
  
  
  1.33      +4 -13     jakarta-alexandria/proposal/gump/project/jakarta-velocity.xml
  
  Index: jakarta-velocity.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-alexandria/proposal/gump/project/jakarta-velocity.xml,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- jakarta-velocity.xml      1 Nov 2001 23:32:31 -0000       1.32
  +++ jakarta-velocity.xml      1 Jan 2002 18:25:36 -0000       1.33
  @@ -9,19 +9,19 @@
     
     <project name="jakarta-velocity">
       <ant basedir="build" target="dist">
  -      <depend property="log.jar" project="jakarta-avalon-logkit"/>
  +      <depend property="log.jar" project="jakarta-avalon-logkit" runtime="true"/>
         <depend property="oro.jar" project="jakarta-oro"/>
         <property name="version" value="gump"/>
       </ant>
       <depend project="jakarta-ant"/>
       <depend project="xml-xerces"/>
       <depend project="jakarta-servletapi"/>
  -    <depend project="jdom"/>
  +    <depend project="jdom" runtime="true"/>
       <depend project="werken.xpath"/>
       <depend project="bcel"/>
       <depend project="junit"/>
       <depend project="jakarta-log4j"/>
  -    <depend project="commons-collections"/>
  +    <depend project="commons-collections" runtime="true"/>
       <home nested="bin"/>
       <jar name="velocity-gump.jar"/>
       <javadoc nested="docs/api"/>
  @@ -29,17 +29,8 @@
     
     <project name="jakarta-velocity-test">
       <ant basedir="build" buildfile="testcases.xml"/>
  -    <depend project="jakarta-ant"/>
  -    <depend project="xml-xerces"/>
  -    <depend project="junit"/>
  -    <depend project="jakarta-velocity"/>
  -    <depend project="commons-collections"/>
  -    <depend project="jdom"/>
  -    <depend project="werken.xpath"/>
  +    <depend project="jakarta-velocity" inherit="hard"/>
       <depend project="antlr.runtime"/>
  -    <depend project="jakarta-avalon-logkit"/>
  -    <depend project="jakarta-log4j"/>
  -    <depend project="jakarta-oro"/>
       <work nested="test/cpload/test1.jar"/>
       <work nested="test/cpload/test2.jar"/>
       <work nested="test/multiloader/test1.jar"/>
  
  
  
  1.6       +32 -0     jakarta-alexandria/proposal/gump/site/xdocs/project.xml
  
  Index: project.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-alexandria/proposal/gump/site/xdocs/project.xml,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- project.xml       26 Oct 2001 00:36:43 -0000      1.5
  +++ project.xml       1 Jan 2002 18:25:37 -0000       1.6
  @@ -111,6 +111,22 @@
             <td>The name of the project depended on.</td>
             <td>Yes</td>
           </tr>
  +        <tr>
  +          <td>inherit</td>
  +          <td>Specifies whether dependendencies of this dependency are to be
  +          inherited.  Default is "none".  Other choices are "all" which will
  +          copy all dependencies as, "runtime" which will only copy the runtime
  +          dependencies, and "hard" which will not only copy all
  +          dependencies, but will also convert option elements into depend
  +          elements in the process.</td>
  +          <td>No</td>
  +        </tr>
  +        <tr>
  +          <td>runtime</td>
  +          <td>Specifies whether this dependency is needed at runtime.
  +          Choices are "true" and "false" with the default being false.</td>
  +          <td>No</td>
  +        </tr>
         </table>
       </subsection>
   
  @@ -134,6 +150,22 @@
             <td>project</td>
             <td>The name of the project depended on.</td>
             <td>Yes</td>
  +        </tr>
  +        <tr>
  +          <td>inherit</td>
  +          <td>Specifies whether dependendencies of this dependency are to be
  +          inherited.  Default is "none".  Other choices are "all" which will
  +          copy all dependencies as, "runtime" which will only copy the runtime
  +          dependencies, and "hard" which will not only copy all
  +          dependencies, but will also convert option elements into depend
  +          elements in the process.</td>
  +          <td>No</td>
  +        </tr>
  +        <tr>
  +          <td>runtime</td>
  +          <td>Specifies whether this dependency is needed at runtime.
  +          Choices are "true" and "false" with the default being false.</td>
  +          <td>No</td>
           </tr>
         </table>
       </subsection>
  
  
  
  1.18      +12 -1     jakarta-alexandria/proposal/gump/stylesheet/xref.xsl
  
  Index: xref.xsl
  ===================================================================
  RCS file: /home/cvs/jakarta-alexandria/proposal/gump/stylesheet/xref.xsl,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- xref.xsl  28 Oct 2001 03:37:28 -0000      1.17
  +++ xref.xsl  1 Jan 2002 18:25:37 -0000       1.18
  @@ -66,6 +66,11 @@
                       <xsl:sort select="@name"/>
   
                       <!-- "decorate open" link based on type of dependency -->
  +                      <xsl:if test="depend[@project=$project and @inherited] |
  +                                    option[@project=$project and @inherited]">
  +                        <xsl:text>(</xsl:text>
  +                      </xsl:if>
  +
                         <xsl:if test="not(depend[@project=$project])">
                           <xsl:text>[</xsl:text>
                         </xsl:if>
  @@ -88,6 +93,11 @@
                         <xsl:if test="not(depend[@project=$project])">
                           <xsl:text>]</xsl:text>
                         </xsl:if>
  +                      
  +                      <xsl:if test="depend[@project=$project and @inherited] |
  +                                    option[@project=$project and @inherited]">
  +                        <xsl:text>)</xsl:text>
  +                      </xsl:if>
                       <!-- end "decoration" -->
                     </xsl:for-each>
                   </td>
  @@ -97,7 +107,8 @@
   
             <br/> Legend:
             <blockquote>
  -            [] : optional dependency
  +            () : inherited dependency
  +            <br/> [] : optional dependency
               <br/> ${} : property reference
             </blockquote>
           </content>
  
  
  

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

Reply via email to