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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]