You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2004/07/04 11:07:50 UTC

svn commit: rev 22550 - in avalon/trunk: . runtime tools tools/magic/src/main/org/apache/avalon/tools/model tools/magic/src/main/org/apache/avalon/tools/tasks

Author: mcconnell
Date: Sun Jul  4 02:07:49 2004
New Revision: 22550

Added:
   avalon/trunk/tools/common.xml
   avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/UnknownResourceException.java
Modified:
   avalon/trunk/build.xml
   avalon/trunk/runtime/index.xml
   avalon/trunk/tools/index.xml
   avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/Home.java
   avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/Resource.java
   avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java
   avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/DeclareTask.java
   avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/GumpTask.java
   avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/JavadocTask.java
   avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/PropertyTask.java
Log:
Getting close to an automated gump.

Modified: avalon/trunk/build.xml
==============================================================================
--- avalon/trunk/build.xml	(original)
+++ avalon/trunk/build.xml	Sun Jul  4 02:07:49 2004
@@ -47,21 +47,12 @@
 
   <target name="gump">
     <x:home/>
-    <x:gump name="Magic" description="Magic Test Module" 
+    <x:gump description="Magic Test Module" 
          public="true" filename="gump.xml">
-      <x:url href="http://avalon.apache.org/magic"/>
+      <x:url href="http://avalon.apache.org/"/>
       <x:svn href="https://svn.apache.org/repos/asf/avalon/trunk"/>
       <x:license file="central/system/license/LICENSE.TXT"/>
     </x:gump>
-  </target>
-
-  <target name="execute">
-    <property name="gump.build-id" value="123456"/>
-    <property name="gump.target" value="runtime/composition/api"/>
-    <echo>BASDIR: ${basedir}</echo>
-    <echo>TARGET: ${gump.target}</echo>
-
-    <ant dir="." antfile="central/system/build/gump.xml" inheritrefs="false"/>
   </target>
 
 </project>

Modified: avalon/trunk/runtime/index.xml
==============================================================================
--- avalon/trunk/runtime/index.xml	(original)
+++ avalon/trunk/runtime/index.xml	Sun Jul  4 02:07:49 2004
@@ -2,8 +2,8 @@
 
 <index>
 
-  <import index="../tools/index.xml"
-     href="http://svn.apache.org/repos/asf/avalon/trunk/tools/index.xml"/>
+  <import index="../tools/common.xml"
+     href="http://svn.apache.org/repos/asf/avalon/trunk/tools/common.xml"/>
 
   <!--
   Declaration of the binary resources available through

Added: avalon/trunk/tools/common.xml
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/common.xml	Sun Jul  4 02:07:49 2004
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!-- index of resources shared between tools and runtime -->
+
+<index>
+
+  <resource>
+    <info>
+      <group>junit</group>
+      <name>junit</name>
+      <version>3.8.1</version>
+      <type>jar</type>
+    </info>
+  </resource>
+
+  <!--
+  Avalon Tools.
+  -->
+
+  <project basedir="magic">
+    <info>
+      <group>avalon/tools</group>
+      <name>avalon-tools-magic</name>
+      <type>jar</type>
+    </info>
+    <dependencies>
+      <include key="ant"/>
+      <include key="junit"/>
+      <include key="ant-junit"/>
+      <include key="ant-nodeps"/>
+    </dependencies>
+  </project>
+
+  <!--
+  Avalon eXternal Supplemental.
+  -->
+
+  <!--
+  <project basedir="supplemental">
+    <info>
+      <group>avalonx/supplemental</group>
+      <name>avalonx-supplemental</name>
+      <version>1.0</version>
+    </info>
+  </project>
+  -->
+
+  <resource>
+    <info>
+      <group>avalonx/supplemental</group>
+      <name>mailapi</name>
+      <version>1.3.1</version>
+      <type>jar</type>
+    </info>
+    <gump>
+      <alias>javamail</alias>
+    </gump>
+  </resource>
+
+</index>

Modified: avalon/trunk/tools/index.xml
==============================================================================
--- avalon/trunk/tools/index.xml	(original)
+++ avalon/trunk/tools/index.xml	Sun Jul  4 02:07:49 2004
@@ -2,6 +2,9 @@
 
 <index>
 
+  <import index="common.xml"
+     href="http://svn.apache.org/repos/asf/avalon/trunk/tools/common.xml"/>
+
   <resource>
     <info>
       <group>ant</group>
@@ -39,15 +42,6 @@
       <alias>ant</alias>
       <id>junit</id>
     </gump>
-  </resource>
-
-  <resource>
-    <info>
-      <group>junit</group>
-      <name>junit</name>
-      <version>3.8.1</version>
-      <type>jar</type>
-    </info>
   </resource>
 
   <!--

Modified: avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/Home.java
==============================================================================
--- avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/Home.java	(original)
+++ avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/Home.java	Sun Jul  4 02:07:49 2004
@@ -158,9 +158,7 @@
         final Resource resource = (Resource) m_resources.get( key );
         if( null == resource )
         {
-            final String error = 
-              "Unknown resource [" + key + "]";
-            throw new BuildException( error );
+            throw new UnknownResourceException( key );
         }
         return resource;
     }

Modified: avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/Resource.java
==============================================================================
--- avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/Resource.java	(original)
+++ avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/Resource.java	Sun Jul  4 02:07:49 2004
@@ -84,10 +84,11 @@
         return m_home;
     }
 
-    public ResourceRef[] getResourceRefs( final int mode, final int tag, final boolean flag )
+    public ResourceRef[] getResourceRefs( 
+      final Project project, final int mode, final int tag, final boolean flag )
     {
         final ArrayList list = new ArrayList();
-        getResourceRefs( list, mode, tag, flag );
+        getResourceRefs( project, list, mode, tag, flag );
         return (ResourceRef[]) list.toArray( new ResourceRef[0] );
     }
 
@@ -96,7 +97,7 @@
     // optimization is need to eliminate duplicates
 
     protected void getResourceRefs( 
-      final List list, final int mode, final int tag, final boolean flag )
+      final Project project, final List list, final int mode, final int tag, final boolean flag )
     {
         final ResourceRef[] refs = getResourceRefs();
         for( int i=0; i<refs.length; i++ )
@@ -110,8 +111,8 @@
                     list.add( ref );
                     if( flag )
                     {
-                        final Resource def = getHome().getResource( ref );
-                        def.getResourceRefs( list, mode, ResourceRef.ANY, flag );
+                        final Resource def = getResource( project, ref );
+                        def.getResourceRefs( project, list, mode, ResourceRef.ANY, flag );
                     }
                 }
             }
@@ -131,13 +132,13 @@
 
         final ArrayList visited = new ArrayList();
         final Path path = new Path( project );
-        final ResourceRef[] refs = getResourceRefs( mode, ResourceRef.ANY, true );
+        final ResourceRef[] refs = getResourceRefs( project, mode, ResourceRef.ANY, true );
         for( int i=0; i<refs.length; i++ )
         {
             final ResourceRef ref = refs[i];
             if( !visited.contains( ref ) )
             {
-                final Resource resource = getHome().getResource( ref );
+                final Resource resource = getResource( project, ref );
                 final File file = resource.getArtifact( project );
                 path.createPathElement().setLocation( file );
                 visited.add( ref );
@@ -147,11 +148,26 @@
         return path;
     }
 
-    public ResourceRef[] getQualifiedRefs( final List visited, final int category )
+    private Resource getResource( Project project, ResourceRef ref ) 
+    {
+        try
+        {
+            return getHome().getResource( ref );
+        }
+        catch( UnknownResourceException ure )
+        {
+            final String error = 
+              "Resource defintion " + this + " contains a unknown resource reference ["
+                 + ure.getKey() + "] referenced in the project [" + project.getName() + "].";
+            throw new BuildException( error );
+        }
+    }
+
+    public ResourceRef[] getQualifiedRefs( Project project, final List visited, final int category )
     {
         final ArrayList list = new ArrayList();
         final ResourceRef[] refs =
-          getResourceRefs( Policy.RUNTIME, category, true );
+          getResourceRefs( project, Policy.RUNTIME, category, true );
         for( int i=0; i<refs.length; i++ )
         {
             final ResourceRef ref = refs[i];

Added: avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/UnknownResourceException.java
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/model/UnknownResourceException.java	Sun Jul  4 02:07:49 2004
@@ -0,0 +1,45 @@
+/* 
+ * Copyright 2004 Apache Software Foundation
+ * Licensed  under the  Apache License,  Version 2.0  (the "License");
+ * you may not use  this file  except in  compliance with the License.
+ * You may obtain a copy of the License at 
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed  under the  License is distributed on an "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
+ * implied.
+ * 
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.avalon.tools.model;
+
+import org.apache.tools.ant.BuildException;
+
+/**
+ * Project info.
+ *
+ * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
+ * @version $Revision: 1.2 $ $Date: 2004/03/17 10:30:09 $
+ */
+public class UnknownResourceException extends BuildException 
+{
+    private final String m_key;
+
+    public UnknownResourceException( final String key )
+    {
+        super( "Requested key [" + key + "] is unknown." );
+        m_key = key;
+    }
+
+   /**
+    * Return the problem key.
+    */
+    public String getKey()
+    {
+        return m_key;
+    }
+}

Modified: avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java
==============================================================================
--- avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java	(original)
+++ avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java	Sun Jul  4 02:07:49 2004
@@ -197,7 +197,7 @@
         throws IOException
     {
         final ArrayList visited = new ArrayList();
-        final ResourceRef[] apis = def.getQualifiedRefs( visited, ResourceRef.API );
+        final ResourceRef[] apis = def.getQualifiedRefs( getProject(), visited, ResourceRef.API );
         if( apis.length > 0 )
         {
             writer.write( "\n" );
@@ -207,7 +207,7 @@
             final String lead = "avalon.artifact.dependency.api";
             writeRefs( writer, apis, lead );
         }
-        final ResourceRef[] spis = def.getQualifiedRefs( visited, ResourceRef.SPI );
+        final ResourceRef[] spis = def.getQualifiedRefs( getProject(), visited, ResourceRef.SPI );
         if( spis.length > 0 )
         {
             writer.write( "\n" );
@@ -218,7 +218,7 @@
             writeRefs( writer, spis, lead );
         }
 
-        final ResourceRef[] impl = def.getQualifiedRefs( visited, ResourceRef.IMPL );
+        final ResourceRef[] impl = def.getQualifiedRefs( getProject(), visited, ResourceRef.IMPL );
         if( impl.length > 0 )
         {
             writer.write( "\n" );

Modified: avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/DeclareTask.java
==============================================================================
--- avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/DeclareTask.java	(original)
+++ avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/DeclareTask.java	Sun Jul  4 02:07:49 2004
@@ -188,7 +188,7 @@
         writer.write( "\n" + padding + "<classpath>" );
         final String pad = padding + "  ";
         final ResourceRef[] resources =
-          def.getResourceRefs( Policy.RUNTIME, ResourceRef.ANY, true );
+          def.getResourceRefs( getProject(), Policy.RUNTIME, ResourceRef.ANY, true );
         writeResourceRefs( writer, pad, resources );
         if( flag )
         {

Modified: avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/GumpTask.java
==============================================================================
--- avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/GumpTask.java	(original)
+++ avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/GumpTask.java	Sun Jul  4 02:07:49 2004
@@ -27,6 +27,7 @@
 import org.apache.avalon.tools.model.Policy;
 import org.apache.avalon.tools.model.Home;
 import org.apache.avalon.tools.model.Context;
+import org.apache.avalon.tools.model.UnknownResourceException;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -231,13 +232,15 @@
             final File file = getFile();
             file.getParentFile().mkdirs();
             file.createNewFile();
+            log( "output: " + file );
             final OutputStream output = new FileOutputStream( file );
             final Writer writer = new OutputStreamWriter( output );
 
             try
             {
                 writeHeader( writer );
-                writeModule( writer );
+                int count = writeModule( writer );
+                log( "project: " + count );
                 writer.flush();
             }
             finally
@@ -263,13 +266,14 @@
         }
     }
 
-    protected void writeModule( final Writer writer )
+    protected int writeModule( final Writer writer )
         throws IOException
     {
         Home home = getHome();
         Project project = getProject();
         String name = getName();
 
+        log( "module: " + name );
         writer.write( "\n\n<module name=\"" + name + "\">" );
         writer.write( "\n\n  <url href=\"" + m_url.getHref() + "\"/>" );
 
@@ -293,10 +297,21 @@
         for( int i=0; i<definitions.length; i++ )
         {
             Definition def = definitions[i];
-            writeProject( writer, def );
+            try
+            {
+                writeProject( writer, def );
+            }
+            catch( UnknownResourceException ure )
+            {
+                final String error = 
+                  "Project defintion [" + def + "] contains a unknown resource reference ["
+                  + ure.getKey() + "].";
+                throw new BuildException( error );
+            }
         }
 
         writer.write( "\n\n</module>\n" );
+        return definitions.length;
     }
 
    /**
@@ -340,7 +355,7 @@
     * @throws IOException if unable to write xml
     */
     private void writeProject( final Writer writer, Definition definition )
-        throws IOException
+        throws IOException, UnknownResourceException
     {
         String path = definition.getBaseDir().getCanonicalPath();
         int j = getProject().getBaseDir().toString().length();
@@ -357,7 +372,7 @@
         }
 
         final ResourceRef[] refs =
-          definition.getResourceRefs( Policy.ANY, ResourceRef.ANY, true );
+          definition.getResourceRefs( getProject(), Policy.ANY, ResourceRef.ANY, true );
 
         String template = m_template.getFile();
         String target = m_template.getTarget();
@@ -380,6 +395,8 @@
            "\n      <!-- for magic -->" );
         writer.write( 
            "\n      <property name=\"gump.signature\" value=\"@@DATE@@\"/>" );
+        writer.write( 
+           "\n      <property name=\"gump.scrdir\" reference=\"srcdir\"/>" );
 
         boolean flag = false;
         for( int i=0; i<refs.length; i++ )
@@ -394,30 +411,37 @@
                       "\n      <!-- external references -->" );
                 }
                 String key = resource.getKey();
+                String alias = getKeyForResource( resource );
+                writer.write( 
+                   "\n      <depend property=\"gump.resource." + key 
+                   + "\" project=\"" + alias + "\"" );
                 String id = resource.getGump().getId();
-                if( null == id )
-                {
-                    String alias = getKeyForResource( resource );
-                    writer.write( 
-                      "\n      <depend property=\"gump.resource." + key 
-                      + "\" project=\"" + alias 
-                      + "\"/>" );
-                }
-                else
+                if( null != id )
                 {
-                    String alias = getKeyForResource( resource );
-                    writer.write( 
-                      "\n      <depend property=\"gump.resource." + key 
-                      + "\" project=\"" + alias 
-                      + "\" id=\"" + id + "\"/>" );
+                    writer.write( " id=\"" + id + "\"" );
                 }
+                writer.write( ">" );
+                writer.write( "\n        <noclasspath/>" );
+                writer.write( "\n      </depend>" );
             }
         }
 
         writer.write( "\n      <!-- end for -->" );
+        writer.write( "\n    </ant>" );       
+
+        //
+        // add the magic bootstrap dependency
+        //
+
+        writer.write( "\n    <!-- magic -->" );
+        writer.write( 
+          "\n    <depend project=\"avalon-tools-magic\" inherit=\"true\" runtime=\"true\"/>" );
+
+        //
+        // add dependencies for gump to do its sequencing correctly
+        //
 
         flag = false;
-        writer.write( "\n    </ant>" );       
         for( int i=0; i<refs.length; i++ )
         {
             Resource resource = getHome().getResource( refs[i] );
@@ -430,7 +454,7 @@
                 }
                 String key = resource.getKey();
                 writer.write( 
-                  "\n    <depend project=\"" + key + "\"/>" );
+                  "\n    <depend project=\"" + key + "\"><noclasspath/></depend>" );
             }
         }
 

Modified: avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/JavadocTask.java
==============================================================================
--- avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/JavadocTask.java	(original)
+++ avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/JavadocTask.java	Sun Jul  4 02:07:49 2004
@@ -193,10 +193,11 @@
     }
 
     private void setup( 
-      final Definition def, final Path classpath, final int category, final File root, final boolean flag )
+      final Definition def, final Path classpath, final int category, 
+      final File root, final boolean flag )
     {
         final ResourceRef[] refs =
-          def.getResourceRefs( Policy.RUNTIME, category, true );
+          def.getResourceRefs( getProject(), Policy.RUNTIME, category, true );
         if( flag || ( refs.length > 0 ))
         {
             generate( def, classpath, refs, category, root, flag );

Modified: avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/PropertyTask.java
==============================================================================
--- avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/PropertyTask.java	(original)
+++ avalon/trunk/tools/magic/src/main/org/apache/avalon/tools/tasks/PropertyTask.java	Sun Jul  4 02:07:49 2004
@@ -137,7 +137,7 @@
     {
         final StringBuffer buffer = new StringBuffer();
         final ResourceRef[] refs =
-          def.getResourceRefs( Policy.RUNTIME, ResourceRef.ANY, true );
+          def.getResourceRefs( getProject(), Policy.RUNTIME, ResourceRef.ANY, true );
         for( int i=0; i<refs.length; i++ )
         {
             if( i>0 )

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org