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/06/09 13:03:33 UTC

svn commit: rev 20935 - in avalon/trunk/tools/project: . src/main/org/apache/avalon/tools/home src/main/org/apache/avalon/tools/project src/main/org/apache/avalon/tools/project/builder src/main/org/apache/avalon/tools/tasks src/test/projects/sample

Author: mcconnell
Date: Wed Jun  9 04:03:32 2004
New Revision: 20935

Modified:
   avalon/trunk/tools/project/build.xml
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Info.java
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/builder/XMLDefinitionBuilder.java
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PrepareTask.java
   avalon/trunk/tools/project/src/test/projects/sample/build.xml
Log:
Add support for the automatic loading of plugins based on <pluginref> dependency declarations in the project model.

Modified: avalon/trunk/tools/project/build.xml
==============================================================================
--- avalon/trunk/tools/project/build.xml	(original)
+++ avalon/trunk/tools/project/build.xml	Wed Jun  9 04:03:32 2004
@@ -60,8 +60,8 @@
   </target>
 
   <target name="test" depends="test-prepare">
-    <!--<ant dir="${target.test.dir}" />-->
-    <ant dir="${target.test.dir}/projects/gizmo" />
+    <ant dir="${target.test.dir}" />
+    <!--<ant dir="${target.test.dir}/projects/gizmo" />-->
   </target>
 
   <target name="clean">

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java	Wed Jun  9 04:03:32 2004
@@ -71,6 +71,11 @@
 
     public static Context getContext( Project project )
     {
+        if( null == project )
+        {
+            throw new NullPointerException( "project" );
+        }
+
         Context context = (Context) project.getReference( KEY );
         if( null == context )
         {

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Info.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Info.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Info.java	Wed Jun  9 04:03:32 2004
@@ -130,6 +130,19 @@
         return buffer.toString();
     }
 
+    public String getSpec()
+    {
+        StringBuffer buffer = new StringBuffer( getGroup() );
+        buffer.append( "/" );
+        buffer.append( getName() );
+        if( null != getVersion() )
+        {
+            buffer.append( "#" );
+            buffer.append( getVersion() );
+        }
+        return buffer.toString();
+    }
+
     public String toString()
     {
         return getURI();

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/builder/XMLDefinitionBuilder.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/builder/XMLDefinitionBuilder.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/builder/XMLDefinitionBuilder.java	Wed Jun  9 04:03:32 2004
@@ -213,7 +213,7 @@
             Element child = children[i];
             String key = child.getAttribute( "key" );
             String tag = child.getAttribute( "tag" );
-            Policy policy = createPolicy( child );
+            Policy policy = createPolicy( child, false, false, false );
             refs[i] = new PluginRef( key, policy, tag );
         }
         return refs;
@@ -221,12 +221,18 @@
 
     private static Policy createPolicy( Element element )
     {
+        return createPolicy( element, true, true, true );
+    }
+
+    private static Policy createPolicy( 
+      Element element, boolean defBuild, boolean defTest, boolean defRuntime )
+    {
         boolean build = 
-          ElementHelper.getBooleanAttribute( element, "build", true );
+          ElementHelper.getBooleanAttribute( element, "build", defBuild );
         boolean test = 
-          ElementHelper.getBooleanAttribute( element, "test", true );
+          ElementHelper.getBooleanAttribute( element, "test", defTest );
         boolean runtime = 
-          ElementHelper.getBooleanAttribute( element, "runtime", true );
+          ElementHelper.getBooleanAttribute( element, "runtime", defRuntime );
         return new Policy( build, test, runtime );
     }
 }

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java	Wed Jun  9 04:03:32 2004
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.net.URL;
 
+import org.apache.tools.ant.AntClassLoader;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.BuildException;
@@ -51,7 +52,6 @@
 public class PluginTask extends SystemTask
 {
     private String m_id;
-    private String m_uri;
 
     public void setArtifact( String id )
     {
@@ -93,8 +93,10 @@
 
             AntLibData data = new AntLibData( getProject(), file );
 
-            ClassLoader classloader = project.createClassLoader( data.getPath() );
-            String uri = data.getInfo().getURI(); 
+            AntClassLoader classloader = project.createClassLoader( data.getPath() );
+            String spec = data.getInfo().getSpec();
+            String uri = "plugin:" + spec.substring( 0, spec.indexOf( "#" ) );
+            log( "Install \"" + uri + "\"" );
 
             //
             // install the ant task defintions
@@ -109,7 +111,7 @@
                 Class taskClass = classloader.loadClass( def.getClassname() );
                 String name = uri + ":" + def.getName();
                 helper.addTaskDefinition( name, taskClass );
-                log( "Added task definition \"" + name + "\"", Project.MSG_DEBUG );
+                log( "Task \"" + name + "\"" );
             }
         }
         catch( Throwable e )

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PrepareTask.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PrepareTask.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PrepareTask.java	Wed Jun  9 04:03:32 2004
@@ -31,6 +31,9 @@
 import org.apache.tools.ant.types.FileSet;
 
 import org.apache.avalon.tools.home.Context;
+import org.apache.avalon.tools.project.Definition;
+import org.apache.avalon.tools.project.PluginRef;
+import org.apache.avalon.tools.project.Plugin;
 
 /**
  * Load a goal. 
@@ -38,7 +41,7 @@
  * @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 PrepareTask extends ContextualTask
+public class PrepareTask extends SystemTask
 {
     private static final String SRC_FILTERED_INCLUDES_KEY = 
       "project.prepare.src.filtered.includes";
@@ -66,6 +69,32 @@
     public void execute() throws BuildException 
     {
         Project project = getProject();
+
+        //
+        // if the project declares plugin dependencies then install
+        // these now
+        //
+
+        String key = getContext().getKey();
+        Definition def = getHome().getDefinition( key );
+        PluginRef[] refs = def.getPluginRefs();
+        for( int i=0; i<refs.length; i++ )
+        {
+            PluginRef ref = refs[i];
+            Plugin plugin = getHome().getPlugin( ref );
+            String path = "plugin:" + plugin.getInfo().getSpec();
+            PluginTask task = new PluginTask();
+            task.setTaskName( "plugin" );
+            task.setProject( project );
+            task.setArtifact( path );
+            task.init();
+            task.execute();            
+        }
+
+        //
+        // setup the file system
+        //
+
         File target = getContext().getTargetDirectory();
         if( !target.exists() )
         {

Modified: avalon/trunk/tools/project/src/test/projects/sample/build.xml
==============================================================================
--- avalon/trunk/tools/project/src/test/projects/sample/build.xml	(original)
+++ avalon/trunk/tools/project/src/test/projects/sample/build.xml	Wed Jun  9 04:03:32 2004
@@ -2,11 +2,10 @@
 
 <project name="sample" default="dist" basedir="."
     xmlns:x="antlib:org.apache.avalon.tools" 
-    xmlns:d="plugin:demo/demo#1.0" > 
+    xmlns:d="plugin:demo/demo" > 
 
   <property file="build.properties"/>
   <import file="${project.home}/standard.xml"/>
-  <x:plugin artifact="plugin:demo/demo#1.0"/>
 
   <target name="build" depends="standard.build">
     <d:hello/>

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