Author: mcconnell Date: Fri Jun 11 04:27:39 2004 New Revision: 21087 Removed: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/PluginRef.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/ProjectRef.java Modified: avalon/trunk/central/system/index.xml avalon/trunk/runtime/merlin/impl/build.properties avalon/trunk/runtime/merlin/impl/build.xml avalon/trunk/tools/project/src/main/org/apache/avalon/tools/event/StandardListener.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Home.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Repository.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Definition.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Plugin.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Resource.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/ResourceRef.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/ArtifactTask.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/DeclareTask.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/FilterTask.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JarTask.java avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JavacTask.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/main/org/apache/avalon/tools/tasks/ReactorTask.java avalon/trunk/tools/project/src/test/index.xml Log: Refactoring of the project model to improve the handling of scoped runtime dependencies.
Modified: avalon/trunk/central/system/index.xml ============================================================================== --- avalon/trunk/central/system/index.xml (original) +++ avalon/trunk/central/system/index.xml Fri Jun 11 04:27:39 2004 @@ -106,12 +106,10 @@ <version>2.0.0</version> </info> <dependencies> - <resources> - <resourceref key="log4j" runtime="false"/> - <resourceref key="servletapi" runtime="false"/> - <resourceref key="mailapi" runtime="false"/> - <resourceref key="jms" runtime="false"/> - </resources> + <include key="log4j" runtime="false"/> + <include key="servletapi" runtime="false"/> + <include key="mailapi" runtime="false"/> + <include key="jms" runtime="false"/> </dependencies> </project> @@ -126,9 +124,7 @@ <version>4.2.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-logkit" runtime="false" test="false"/> - </projects> + <include key="avalon-logkit" runtime="false" test="false"/> </dependencies> </project> @@ -139,9 +135,7 @@ <version>4.2.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-framework-api"/> - </projects> + <include key="avalon-framework-api"/> </dependencies> </project> @@ -160,13 +154,11 @@ <info> <group>avalon/util</group> <name>avalon-util-configuration</name> - <version>1.0-dev</version> + <version>1.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-framework-api"/> - <projectref key="avalon-framework-impl"/> - </projects> + <include key="avalon-framework-api"/> + <include key="avalon-framework-impl"/> </dependencies> </project> @@ -185,9 +177,7 @@ <version>1.2.1</version> </info> <dependencies> - <projects> - <projectref key="avalon-util-env"/> - </projects> + <include key="avalon-util-env"/> </dependencies> </project> @@ -230,9 +220,7 @@ <version>1.2.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-util-extension-api"/> - </projects> + <include key="avalon-util-extension-api"/> </dependencies> </project> @@ -243,9 +231,7 @@ <version>1.1.1</version> </info> <dependencies> - <projects> - <projectref key="avalon-framework-api"/> - </projects> + <include key="avalon-framework-api"/> </dependencies> </project> @@ -260,10 +246,8 @@ <version>1.4.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-framework-api"/> - <projectref key="avalon-framework-impl" compile="false" test="true"/> - </projects> + <include key="avalon-framework-api"/> + <include key="avalon-framework-impl" compile="false" test="true" runtime="false"/> </dependencies> </project> @@ -274,9 +258,7 @@ <version>1.4.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-meta-api"/> - </projects> + <include key="avalon-meta-api"/> </dependencies> </project> @@ -287,11 +269,9 @@ <version>1.4.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-meta-spi"/> - <projectref key="avalon-util-i18n"/> - <projectref key="avalon-util-configuration"/> - </projects> + <include key="avalon-meta-spi"/> + <include key="avalon-util-i18n"/> + <include key="avalon-util-configuration"/> </dependencies> </project> @@ -302,12 +282,8 @@ <version>1.4.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-meta-impl"/> - </projects> - <resources> - <resourceref key="qdox"/> - </resources> + <include key="avalon-meta-impl"/> + <include key="qdox"/> </dependencies> <tasks> <taskdef name="meta" class="org.apache.avalon.meta.info.ant.MetaTask"/> @@ -324,13 +300,11 @@ <name>avalon-test-dynamics</name> </info> <dependencies> - <projects> - <projectref key="avalon-framework-impl"/> - </projects> - <plugins> - <pluginref key="avalon-meta-tools"/> - </plugins> + <include key="avalon-framework-impl"/> </dependencies> + <plugins> + <include key="avalon-meta-tools"/> + </plugins> </project> <project basedir="../../runtime/test/playground"> @@ -339,14 +313,12 @@ <name>avalon-test-playground</name> </info> <dependencies> - <projects> - <projectref key="avalon-framework-impl"/> - <projectref key="avalon-util-lifecycle"/> - </projects> - <plugins> - <pluginref key="avalon-meta-tools"/> - </plugins> + <include key="avalon-framework-impl"/> + <include key="avalon-util-lifecycle"/> </dependencies> + <plugins> + <include key="avalon-meta-tools"/> + </plugins> </project> <project basedir="../../runtime/test/testa"> @@ -355,14 +327,12 @@ <name>avalon-test-testa</name> </info> <dependencies> - <projects> - <projectref key="avalon-framework-api"/> - <projectref key="avalon-util-configuration"/> - </projects> - <plugins> - <pluginref key="avalon-meta-tools"/> - </plugins> + <include key="avalon-framework-api"/> + <include key="avalon-util-configuration"/> </dependencies> + <plugins> + <include key="avalon-meta-tools"/> + </plugins> </project> <project basedir="../../runtime/test/testb"> @@ -371,13 +341,11 @@ <name>avalon-test-testb</name> </info> <dependencies> - <projects> - <projectref key="avalon-framework-api"/> - </projects> - <plugins> - <pluginref key="avalon-meta-tools"/> - </plugins> + <include key="avalon-framework-api"/> </dependencies> + <plugins> + <include key="avalon-meta-tools"/> + </plugins> </project> <project basedir="../../runtime/test/testc"> @@ -386,13 +354,11 @@ <name>avalon-test-testc</name> </info> <dependencies> - <projects> - <projectref key="avalon-framework-api"/> - </projects> - <plugins> - <pluginref key="avalon-meta-tools"/> - </plugins> + <include key="avalon-framework-api"/> </dependencies> + <plugins> + <include key="avalon-meta-tools"/> + </plugins> </project> <project basedir="../../runtime/test/testd"> @@ -401,13 +367,11 @@ <name>avalon-test-testd</name> </info> <dependencies> - <projects> - <projectref key="avalon-framework-api"/> - </projects> - <plugins> - <pluginref key="avalon-meta-tools"/> - </plugins> + <include key="avalon-framework-api"/> </dependencies> + <plugins> + <include key="avalon-meta-tools"/> + </plugins> </project> <project basedir="../../runtime/test/teste"> @@ -416,13 +380,11 @@ <name>avalon-test-teste</name> </info> <dependencies> - <projects> - <projectref key="avalon-framework-api"/> - </projects> - <plugins> - <pluginref key="avalon-meta-tools"/> - </plugins> + <include key="avalon-framework-api"/> </dependencies> + <plugins> + <include key="avalon-meta-tools"/> + </plugins> </project> <project basedir="../../runtime/test/includes"> @@ -431,14 +393,12 @@ <name>avalon-test-includes</name> </info> <dependencies> - <projects> - <projectref key="avalon-test-playground" build="false" runtime="false"/> - <projectref key="avalon-test-testa" build="false" runtime="false"/> - <projectref key="avalon-test-testb" build="false" runtime="false"/> - <projectref key="avalon-test-testc" build="false" runtime="false"/> - <projectref key="avalon-test-testd" build="false" runtime="false"/> - <projectref key="avalon-test-teste" build="false" runtime="false"/> - </projects> + <include key="avalon-test-playground" build="false" runtime="false"/> + <include key="avalon-test-testa" build="false" runtime="false"/> + <include key="avalon-test-testb" build="false" runtime="false"/> + <include key="avalon-test-testc" build="false" runtime="false"/> + <include key="avalon-test-testd" build="false" runtime="false"/> + <include key="avalon-test-teste" build="false" runtime="false"/> </dependencies> </project> @@ -448,13 +408,11 @@ <name>avalon-test-components</name> </info> <dependencies> - <projects> - <projectref key="avalon-framework-api"/> - </projects> - <plugins> - <pluginref key="avalon-meta-tools"/> - </plugins> + <include key="avalon-framework-api"/> </dependencies> + <plugins> + <include key="avalon-meta-tools"/> + </plugins> </project> <!-- @@ -476,9 +434,7 @@ <version>2.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-repository-api"/> - </projects> + <include key="avalon-repository-api"/> </dependencies> </project> @@ -489,9 +445,7 @@ <version>2.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-repository-api"/> - </projects> + <include key="avalon-repository-api"/> </dependencies> </project> @@ -502,9 +456,7 @@ <version>2.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-repository-main" runtime="false"/> - </projects> + <include key="avalon-repository-main" runtime="false"/> </dependencies> </project> @@ -515,15 +467,13 @@ <version>2.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-repository-spi"/> - <projectref key="avalon-repository-util"/> - <projectref key="avalon-util-exception"/> - <projectref key="avalon-util-env"/> - <projectref key="avalon-util-i18n"/> - <projectref key="avalon-util-criteria"/> - <projectref key="avalon-util-defaults"/> - </projects> + <include key="avalon-repository-spi"/> + <include key="avalon-repository-util"/> + <include key="avalon-util-exception"/> + <include key="avalon-util-env"/> + <include key="avalon-util-i18n"/> + <include key="avalon-util-criteria"/> + <include key="avalon-util-defaults"/> </dependencies> </project> @@ -535,12 +485,8 @@ <version>2.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-repository-main"/> - </projects> - <resources> - <resourceref key="commons-cli"/> - </resources> + <include key="avalon-repository-main"/> + <include key="commons-cli"/> </dependencies> </project> @@ -551,11 +497,9 @@ <version>2.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-repository-impl" test="false"/> - <projectref key="avalon-repository-main"/> - <projectref key="avalon-framework-impl" test="true"/> - </projects> + <include key="avalon-repository-impl" test="false"/> + <include key="avalon-repository-main"/> + <include key="avalon-framework-impl" test="true"/> </dependencies> </project> @@ -578,11 +522,9 @@ <version>1.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-logging-api"/> - <projectref key="avalon-repository-spi"/> - <projectref key="avalon-framework-api"/> - </projects> + <include key="avalon-logging-api"/> + <include key="avalon-repository-spi"/> + <include key="avalon-framework-api"/> </dependencies> </project> @@ -593,10 +535,8 @@ <version>1.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-logging-spi"/> - <projectref key="avalon-repository-main" runtime="false"/> - </projects> + <include key="avalon-logging-spi"/> + <include key="avalon-repository-main" runtime="false"/> </dependencies> </project> @@ -607,12 +547,8 @@ <version>1.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-logging-impl" runtime="false"/> - </projects> - <resources> - <resourceref key="log4j"/> - </resources> + <include key="avalon-logging-impl" runtime="false"/> + <include key="log4j"/> </dependencies> </project> @@ -623,10 +559,8 @@ <version>1.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-logging-spi" runtime="false"/> - <projectref key="avalon-logkit"/> - </projects> + <include key="avalon-logging-spi" runtime="false"/> + <include key="avalon-logkit"/> </dependencies> </project> @@ -637,11 +571,9 @@ <version>1.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-logging-logkit-api"/> - <projectref key="avalon-logging-impl" runtime="false"/> - <projectref key="avalon-util-configuration"/> - </projects> + <include key="avalon-logging-logkit-api"/> + <include key="avalon-logging-impl" runtime="false"/> + <include key="avalon-util-configuration"/> </dependencies> </project> @@ -652,10 +584,8 @@ <version>1.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-logging-logkit-api" runtime="false"/> - <projectref key="avalon-repository-main" runtime="false"/> - </projects> + <include key="avalon-logging-logkit-api" runtime="false"/> + <include key="avalon-repository-main" runtime="false"/> </dependencies> </project> @@ -666,10 +596,8 @@ <version>1.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-logging-logkit-api" runtime="false"/> - <projectref key="avalon-repository-main" runtime="false"/> - </projects> + <include key="avalon-logging-logkit-api" runtime="false"/> + <include key="avalon-repository-main" runtime="false"/> </dependencies> </project> @@ -680,10 +608,8 @@ <version>1.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-logging-logkit-api" runtime="false"/> - <projectref key="avalon-repository-main" runtime="false"/> - </projects> + <include key="avalon-logging-logkit-api" runtime="false"/> + <include key="avalon-repository-main" runtime="false"/> </dependencies> </project> @@ -694,17 +620,15 @@ <version>1.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-logging-logkit-impl" test="false"/> - <projectref key="avalon-logging-log4j" test="false"/> - <projectref key="avalon-logging-logkit-syslog" test="false"/> - <projectref key="avalon-logging-logkit-socket" test="false"/> - <projectref key="avalon-logging-logkit-datagram" test="false"/> - <projectref key="avalon-repository-main"/> - <projectref key="avalon-logging-impl"/> - <projectref key="avalon-framework-impl"/> - <projectref key="avalon-repository-test" build="false" test="false" runtime="false"/> - </projects> + <include key="avalon-logging-logkit-impl" test="false"/> + <include key="avalon-logging-log4j" test="false"/> + <include key="avalon-logging-logkit-syslog" test="false"/> + <include key="avalon-logging-logkit-socket" test="false"/> + <include key="avalon-logging-logkit-datagram" test="false"/> + <include key="avalon-repository-main"/> + <include key="avalon-logging-impl"/> + <include key="avalon-framework-impl"/> + <include key="avalon-repository-test" build="false" test="false" runtime="false"/> </dependencies> </project> @@ -719,12 +643,10 @@ <version>2.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-util-extension-api"/> - <projectref key="avalon-repository-api"/> - <projectref key="avalon-logging-spi"/> - <projectref key="avalon-meta-api"/> - </projects> + <include key="avalon-util-extension-api"/> + <include key="avalon-repository-api"/> + <include key="avalon-logging-api"/> + <include key="avalon-meta-api"/> </dependencies> </project> @@ -735,9 +657,8 @@ <version>2.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-composition-api"/> - </projects> + <include key="avalon-composition-api"/> + <include key="avalon-logging-spi"/> </dependencies> </project> @@ -745,21 +666,19 @@ <info> <group>avalon/composition</group> <name>avalon-composition-impl</name> - <version>2.0.1-dev</version> + <version>2.0.1</version> </info> <dependencies> - <projects> - <projectref key="avalon-composition-spi"/> - <projectref key="avalon-repository-main"/> - <projectref key="avalon-meta-impl"/> - <projectref key="avalon-util-configuration"/> - <projectref key="avalon-util-extension-impl"/> - <projectref key="avalon-util-lifecycle"/> - <projectref key="avalon-logging-impl" build="false" test="true"/> - <projectref key="avalon-test-dynamics" build="false" test="true" runtime="false"/> - <projectref key="avalon-test-includes" build="false" test="true" runtime="false"/> - <projectref key="avalon-logging-test" build="false" test="false" runtime="false"/> - </projects> + <include key="avalon-composition-spi"/> + <include key="avalon-repository-main"/> + <include key="avalon-meta-impl"/> + <include key="avalon-util-configuration"/> + <include key="avalon-util-extension-impl"/> + <include key="avalon-util-lifecycle"/> + <include key="avalon-logging-impl" build="false" test="true"/> + <include key="avalon-test-dynamics" build="false" test="true" runtime="false"/> + <include key="avalon-test-includes" build="false" test="true" runtime="false"/> + <include key="avalon-logging-test" build="false" test="false" runtime="false"/> </dependencies> </project> @@ -774,9 +693,7 @@ <version>2.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-composition-api"/> - </projects> + <include key="avalon-composition-api"/> </dependencies> </project> @@ -787,17 +704,15 @@ <version>2.0.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-util-lifecycle"/> - <projectref key="avalon-util-i18n"/> - <projectref key="avalon-util-defaults"/> - <projectref key="avalon-repository-spi"/> - <projectref key="avalon-composition-spi"/> - <projectref key="avalon-composition-impl" build="false" test="true" runtime="false"/> - <projectref key="avalon-activation-api"/> - <projectref key="avalon-test-components" build="false" test="true" runtime="false"/> - <projectref key="avalon-test-playground" build="false" test="true" runtime="false"/> - </projects> + <include key="avalon-util-lifecycle"/> + <include key="avalon-util-i18n"/> + <include key="avalon-util-defaults"/> + <include key="avalon-repository-spi"/> + <include key="avalon-composition-spi"/> + <include key="avalon-composition-impl" build="false" test="true" runtime="false"/> + <include key="avalon-activation-api"/> + <include key="avalon-test-components" build="false" test="true" runtime="false"/> + <include key="avalon-test-playground" build="false" test="true" runtime="false"/> </dependencies> </project> @@ -812,9 +727,7 @@ <version>3.3.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-composition-api"/> - </projects> + <include key="avalon-composition-api"/> </dependencies> </project> @@ -825,12 +738,18 @@ <version>3.3.0</version> </info> <dependencies> - <projects> - <projectref key="avalon-merlin-api"/> - <projectref key="avalon-composition-impl"/> - <projectref key="avalon-repository-main"/> - <projectref key="avalon-util-configuration"/> - </projects> + <include key="avalon-framework-api" tag="api"/> + <include key="avalon-util-extension-api" tag="api"/> + <include key="avalon-merlin-api" tag="api"/> + <include key="avalon-repository-api" tag="api"/> + <include key="avalon-util-lifecycle" tag="api"/> + <include key="avalon-meta-spi" tag="spi"/> + <include key="avalon-repository-spi" tag="spi"/> + <include key="avalon-logging-spi" tag="spi"/> + <include key="avalon-composition-spi" tag="spi"/> + <include key="avalon-composition-impl" tag="impl"/> + <include key="avalon-util-configuration" tag="impl"/> + <include key="avalon-repository-main" runtime="false"/> </dependencies> </project> Modified: avalon/trunk/runtime/merlin/impl/build.properties ============================================================================== --- avalon/trunk/runtime/merlin/impl/build.properties (original) +++ avalon/trunk/runtime/merlin/impl/build.properties Fri Jun 11 04:27:39 2004 @@ -1,3 +1,6 @@ + project.name = avalon-merlin-impl project.src.main = java project.home = ../../../central/system + +avalon.artifact.factory = org.apache.avalon.merlin.impl.DefaultFactory Modified: avalon/trunk/runtime/merlin/impl/build.xml ============================================================================== --- avalon/trunk/runtime/merlin/impl/build.xml (original) +++ avalon/trunk/runtime/merlin/impl/build.xml Fri Jun 11 04:27:39 2004 @@ -8,7 +8,11 @@ <target name="init" depends="standard.init"> <x:filter key="avalon-logging-logkit-impl" feature="uri" - token="AVALON-LOGGING-LOGKIT-SPEC"/> + token="LOGGING_IMPLEMENTATION"/> + <x:filter key="avalon-merlin-impl" feature="uri" + token="MERLIN_IMPLEMENTATION"/> + <x:filter key="avalon-activation-impl" feature="uri" + token="STANDARD_RUNTIME"/> </target> <target name="package" depends="standard.package"> Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/event/StandardListener.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/event/StandardListener.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/event/StandardListener.java Fri Jun 11 04:27:39 2004 @@ -30,7 +30,7 @@ import org.apache.avalon.tools.home.Home; import org.apache.avalon.tools.project.Definition; -import org.apache.avalon.tools.project.PluginRef; +import org.apache.avalon.tools.project.ResourceRef; import org.apache.avalon.tools.project.Plugin; /** @@ -74,16 +74,6 @@ project.log( "project: " + getDefinition() ); project.log( "basedir: " + project.getBaseDir() ); project.log( BANNER ); - - /* - PluginRef[] refs = getDefinition().getPluginRefs(); - for( int i=0; i<refs.length; i++ ) - { - PluginRef ref = refs[i]; - Plugin plugin = getHome().getPlugin( ref ); - project.log( "plugin ref: " + plugin ); - } - */ } private Task getTask() Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Home.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Home.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Home.java Fri Jun 11 04:27:39 2004 @@ -49,10 +49,8 @@ import org.apache.avalon.tools.event.StandardListener; import org.apache.avalon.tools.project.Definition; -import org.apache.avalon.tools.project.ProjectRef; import org.apache.avalon.tools.project.ResourceRef; import org.apache.avalon.tools.project.Resource; -import org.apache.avalon.tools.project.PluginRef; import org.apache.avalon.tools.project.Plugin; import org.apache.avalon.tools.project.builder.XMLDefinitionBuilder; import org.apache.avalon.tools.util.ElementHelper; @@ -138,6 +136,11 @@ return m_system; } + public long getIndexLastModified() + { + return getIndexFile().lastModified(); + } + public Repository getRepository() { return m_repository; @@ -146,8 +149,13 @@ public Resource[] getResources() { return (Resource[]) m_resources.values().toArray( new Resource[0] ); + } + public boolean isaDefinition( ResourceRef ref ) + { + return ( getResource( ref ) instanceof Definition ); } + public Definition[] getDefinitions() throws BuildException { @@ -164,18 +172,6 @@ return (Definition[]) list.toArray( new Definition[0] ); } - public Plugin getPlugin( PluginRef ref ) - throws BuildException - { - return (Plugin) getDefinition( ref ); - } - - public Definition getDefinition( ProjectRef ref ) - throws BuildException - { - return getDefinition( ref.getKey() ); - } - public Resource getResource( ResourceRef ref ) throws BuildException { @@ -193,100 +189,46 @@ public Definition getDefinition( String key ) throws BuildException { - return getDefinition( key, true ); + ResourceRef ref = new ResourceRef( key ); + return getDefinition( ref ); } - public Definition getDefinition( String key, boolean fail ) + public Definition getDefinition( ResourceRef ref ) throws BuildException { - Resource def = (Resource) m_resources.get( key ); - if( null == def ) + Resource resource = getResource( ref ); + if( resource instanceof Definition ) { - if( fail ) - { - final String error = - "Unknown definition [" + key + "]"; - throw new BuildException( error ); - } + return (Definition) resource; } else { - if( def instanceof Definition ) - { - return (Definition) def; - } - else - { - if( fail ) - { - final String error = - "Key [" + key + "] is not project."; - throw new BuildException( error ); - } - } + final String error = + "Reference [" + ref + "] does not refer to a projects."; + throw new BuildException( error ); } - return null; } - /* - public void build( Definition definition ) - { - Ant ant = (Ant) getProject().createTask( "ant" ); - Property property = ant.createProperty(); - property.setName( "urn:avalon.definition.key" ); - property.setValue( definition.getKey() ); - ant.setDir( definition.getBasedir() ); - ant.setInheritRefs( true ); - ant.init(); - ant.execute(); - } - - public Definition[] getBuildSequence( Definition definition ) + public Plugin getPlugin( ResourceRef ref ) + throws BuildException { - ArrayList visited = new ArrayList(); - ArrayList targets = new ArrayList(); - ProjectRef[] refs = definition.getProjectRefs(); - for( int i=0; i<refs.length; i++ ) + Resource resource = getResource( ref ); + if( resource instanceof Plugin ) { - Definition def = getDefinition( refs[i] ); - getBuildSequence( visited, targets, def ); + return (Plugin) resource; + } + else + { + final String error = + "Reference [" + ref + "] does not refer to a plugin."; + throw new BuildException( error ); } - return (Definition[]) targets.toArray( new Definition[0] ); } - */ //------------------------------------------------------------- // internal //------------------------------------------------------------- - /* - private void getBuildSequence( List visited, List targets, Definition definition ) - { - if( visited.contains( definition ) ) return; - visited.add( definition ); - - ProjectRef[] refs = definition.getProjectRefs(); - for( int i=0; i<refs.length; i++ ) - { - Definition def = getDefinition( refs[i] ); - if( visited.contains( def ) ) - { - final String error = - "Recursive reference identified in project: " - + definition - + " in dependency " + def + "."; - throw new BuildException( error ); - } - getBuildSequence( visited, targets, def ); - } - - if( !targets.contains( definition ) ) - { - targets.add( definition ); - } - } - */ - private void buildResourceList( Element resources ) { if( null == resources ) return; @@ -431,5 +373,59 @@ props.execute(); } + /* + public void build( Definition definition ) + { + Ant ant = (Ant) getProject().createTask( "ant" ); + Property property = ant.createProperty(); + property.setName( "urn:avalon.definition.key" ); + property.setValue( definition.getKey() ); + ant.setDir( definition.getBasedir() ); + ant.setInheritRefs( true ); + ant.init(); + ant.execute(); + } + + public Definition[] getBuildSequence( Definition definition ) + { + ArrayList visited = new ArrayList(); + ArrayList targets = new ArrayList(); + ProjectRef[] refs = definition.getProjectRefs(); + for( int i=0; i<refs.length; i++ ) + { + Definition def = getDefinition( refs[i] ); + getBuildSequence( visited, targets, def ); + } + return (Definition[]) targets.toArray( new Definition[0] ); + } + */ + + /* + private void getBuildSequence( List visited, List targets, Definition definition ) + { + if( visited.contains( definition ) ) return; + visited.add( definition ); + + ProjectRef[] refs = definition.getProjectRefs(); + for( int i=0; i<refs.length; i++ ) + { + Definition def = getDefinition( refs[i] ); + if( visited.contains( def ) ) + { + final String error = + "Recursive reference identified in project: " + + definition + + " in dependency " + def + "."; + throw new BuildException( error ); + } + getBuildSequence( visited, targets, def ); + } + + if( !targets.contains( definition ) ) + { + targets.add( definition ); + } + } + */ } Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Repository.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Repository.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Repository.java Fri Jun 11 04:27:39 2004 @@ -48,7 +48,6 @@ import org.apache.avalon.tools.util.ElementHelper; import org.apache.avalon.tools.project.Definition; import org.apache.avalon.tools.project.ResourceRef; -import org.apache.avalon.tools.project.ProjectRef; import org.apache.avalon.tools.project.Resource; import org.apache.avalon.tools.project.Policy; @@ -93,6 +92,86 @@ return m_hosts; } + private File getCanonicalFile( File file ) throws BuildException + { + try + { + return file.getCanonicalFile(); + } + catch( IOException ioe ) + { + throw new BuildException( ioe ); + } + } + + private String[] getHostsSequence( Element element ) + { + if( null == element ) + { + return new String[0]; + } + + Element[] children = + ElementHelper.getChildren( element, "host" ); + String[] list = new String[ children.length ]; + for( int i=0; i<children.length; i++ ) + { + Element child = children[i]; + list[i] = ElementHelper.getValue( child ); + } + return list; + } + + private String getCachePath( Element element ) + { + if( null != element ) + { + String path = element.getAttribute( "dir" ); + if( null != path ) + { + return path; + } + } + + return ".cache"; + } + + /* + public ResourceRef[] getShortResourceRefs( Definition def, int mode, int category ) + { + ArrayList list = new ArrayList(); + getShortResourceRefs( def, list, mode, category ); + return (ResourceRef[]) list.toArray( new ResourceRef[0] ); + } + + private void getShortResourceRefs( Definition def, List list, int mode, int category ) + { + ResourceRef[] refs = def.getResourceRefs(); +System.out.println( "short: " + def + ", " + category + ", " + refs.length ); + for( int i=0; i<refs.length; i++ ) + { + ResourceRef ref = refs[i]; + if( !list.contains( ref ) ) + { + Policy policy = ref.getPolicy(); + if( policy.matches( mode ) ) + { +System.out.println( " candidate: " + ref + ", " + ref.matches( category ) ); + if( ref.matches( category ) ) + { + list.add( ref ); + if( ref instanceof ProjectRef ) + { + ProjectRef pr = (ProjectRef) ref; + Definition d = m_home.getDefinition( pr ); + getShortResourceRefs( d, list, mode, ResourceRef.ANY ); + } + } + } + } + } + } + public ResourceRef[] getResourceRefs( Definition def ) { return getResourceRefs( def, Policy.ANY ); @@ -137,7 +216,9 @@ } } } + */ + /* public Path createPath( Project project, Definition def ) throws BuildException { @@ -176,7 +257,7 @@ Resource resource = m_home.getResource( ref ); try { - getResource( project, resource ); + resource.getArtifact( project ); FileList file = getResourceFileList( project, resource ); path.addFilelist( file ); } @@ -187,6 +268,12 @@ buffer.append( ": " ); buffer.append( resource.getInfo() ); } + if( resource instanceof Definition ) + { + Defintion defintion = (Definition) resource; + Path projectPath = createPath( project, defintion, false, policy ); + path.add( projectPath ); + } } } @@ -198,34 +285,6 @@ throw new BuildException( error ); } - // - // add each dependent project's path - // - - ProjectRef[] projects = def.getProjectRefs(); - for( int i=0; i<projects.length; i++ ) - { - ProjectRef ref = projects[i]; - if( ref.getPolicy().matches( policy ) ) - { - Definition defintion = m_home.getDefinition( ref ); - Path projectPath = createPath( project, defintion, true, policy ); - File file = new File( getCacheDirectory(), defintion.getInfo().getPath() ); - if( file.exists() ) - { - path.add( projectPath ); - } - else - { - final String error = - "Cannot construct a valid path for the project " - + def + " because the dependent project " - + defintion + " has not installed an artifact."; - throw new BuildException( error ); - } - } - } - if( flag ) { File file = new File( getCacheDirectory(), def.getInfo().getPath() ); @@ -257,6 +316,19 @@ } } + private FileList getResourceFileList( Project project, Resource resource ) + throws Exception + { + FileList list = new FileList(); + list.setProject( project ); + list.setDir( getCacheDirectory() ); + String path = resource.getInfo().getPath(); + list.setFiles( path ); + return list; + } + */ + + /* public File getResource( Project project, Resource resource ) throws Exception { @@ -303,59 +375,6 @@ return target; } + */ - private FileList getResourceFileList( Project project, Resource resource ) - throws Exception - { - FileList list = new FileList(); - list.setProject( project ); - list.setDir( getCacheDirectory() ); - String path = resource.getInfo().getPath(); - list.setFiles( path ); - return list; - } - - private File getCanonicalFile( File file ) throws BuildException - { - try - { - return file.getCanonicalFile(); - } - catch( IOException ioe ) - { - throw new BuildException( ioe ); - } - } - - private String[] getHostsSequence( Element element ) - { - if( null == element ) - { - return new String[0]; - } - - Element[] children = - ElementHelper.getChildren( element, "host" ); - String[] list = new String[ children.length ]; - for( int i=0; i<children.length; i++ ) - { - Element child = children[i]; - list[i] = ElementHelper.getValue( child ); - } - return list; - } - - private String getCachePath( Element element ) - { - if( null != element ) - { - String path = element.getAttribute( "dir" ); - if( null != path ) - { - return path; - } - } - - return ".cache"; - } } Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Definition.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Definition.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Definition.java Fri Jun 11 04:27:39 2004 @@ -18,6 +18,14 @@ package org.apache.avalon.tools.project; import java.io.File; +import java.util.List; +import java.util.ArrayList; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.FileSet; + +import org.apache.avalon.tools.home.Home; /** * Defintion of a project. @@ -27,19 +35,17 @@ */ public class Definition extends Resource { - private ProjectRef[] m_projects; private ResourceRef[] m_resources; - private PluginRef[] m_plugins; + private ResourceRef[] m_plugins; private File m_basedir; public Definition( - String key, File basedir, Info info, - ResourceRef[] resources, ProjectRef[] projects, PluginRef[] plugins ) + Home home, String key, File basedir, Info info, + ResourceRef[] resources, ResourceRef[] plugins ) { - super( key, info ); + super( home, key, info ); m_basedir = basedir; - m_projects = projects; m_resources = resources; m_plugins = plugins; } @@ -49,21 +55,67 @@ return m_basedir; } - public ProjectRef[] getProjectRefs() + public ResourceRef[] getResourceRefs() { - return m_projects; + return m_resources; } - public ResourceRef[] getResourceRefs() + public ResourceRef[] getResourceRefs( int mode, int tag, boolean flag ) { - return m_resources; + ArrayList list = new ArrayList(); +//System.out.println( "#THIS " + this + ", mode: " + mode + ", tag: " + tag ); + getResourceRefs( list, mode, tag, flag ); + return (ResourceRef[]) list.toArray( new ResourceRef[0] ); + } + + protected void getResourceRefs( List list, int mode, int tag, boolean flag ) + { + ResourceRef[] refs = getResourceRefs(); + for( int i=0; i<refs.length; i++ ) + { + ResourceRef ref = refs[i]; + if( !list.contains( ref ) ) + { +//System.out.println( "#REF: " + ref + ", " + ref.getPolicy().matches( mode ) + ", " + ref.matches( tag ) ); + Policy policy = ref.getPolicy(); + if( policy.matches( mode ) && ref.matches( tag ) ) + { + list.add( ref ); + if( flag && getHome().isaDefinition( ref ) ) + { + Definition def = getHome().getDefinition( ref ); + def.getResourceRefs( list, mode, tag, flag ); + } + } + } + } } - public PluginRef[] getPluginRefs() + public ResourceRef[] getPluginRefs() { return m_plugins; } + public Path getPath( Project project, int mode ) + { + if( null == project ) + { + throw new NullPointerException( "project" ); + } + + Path path = new Path( project ); + ResourceRef[] refs = getResourceRefs( mode, ResourceRef.ANY, true ); + for( int i=0; i<refs.length; i++ ) + { + ResourceRef ref = refs[i]; + Resource resource = getHome().getResource( ref ); + File file = resource.getArtifact( project ); + path.createPathElement().setLocation( file ); + } + + return path; + } + public String toString() { return "[" + getInfo().getGroup() + "/" + getInfo().getName() + "]"; @@ -74,21 +126,15 @@ if( super.equals( other ) && ( other instanceof Definition )) { Definition def = (Definition) other; - ProjectRef[] refs = getProjectRefs(); - ProjectRef[] refs2 = def.getProjectRefs(); + ResourceRef[] refs = getResourceRefs(); + ResourceRef[] references = def.getResourceRefs(); for( int i=0; i<refs.length; i++ ) { - if( !refs[i].equals( refs2[i] ) ) return false; + if( !refs[i].equals( references[i] ) ) return false; } - ResourceRef[] resources = getResourceRefs(); - ResourceRef[] resources2 = def.getResourceRefs(); - for( int i=0; i<resources.length; i++ ) - { - if( !resources[i].equals( resources2[i] ) ) return false; - } - PluginRef[] plugins = getPluginRefs(); - PluginRef[] plugins2 = def.getPluginRefs(); + ResourceRef[] plugins = getPluginRefs(); + ResourceRef[] plugins2 = def.getPluginRefs(); for( int i=0; i<plugins.length; i++ ) { if( !plugins[i].equals( plugins2[i] ) ) return false; Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Plugin.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Plugin.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Plugin.java Fri Jun 11 04:27:39 2004 @@ -19,6 +19,8 @@ import java.io.File; +import org.apache.avalon.tools.home.Home; + /** * Defintion of a project. * @@ -30,11 +32,11 @@ private final TaskDef[] m_tasks; public Plugin( - String key, File basedir, Info info, - ResourceRef[] resources, ProjectRef[] projects, PluginRef[] plugins, + Home home, String key, File basedir, Info info, + ResourceRef[] resources, ResourceRef[] plugins, TaskDef[] tasks ) { - super( key, basedir, info, resources, projects, plugins ); + super( home, key, basedir, info, resources, plugins ); m_tasks = tasks; } Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Resource.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Resource.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/Resource.java Fri Jun 11 04:27:39 2004 @@ -18,9 +18,17 @@ package org.apache.avalon.tools.project; import java.io.File; +import java.io.FileNotFoundException; +import java.net.URL; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.taskdefs.Get; + +import org.apache.avalon.tools.home.Home; /** - * Defintion of a project. + * Defintion of a resource. * * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> * @version $Revision: 1.2 $ $Date: 2004/03/17 10:30:09 $ @@ -29,16 +37,18 @@ { private String m_key; private Info m_info; + private Home m_home; - public Resource( Info info ) + public Resource( Home home, Info info ) { - this( null, info ); + this( home, null, info ); } - public Resource( String key, Info info ) + public Resource( Home home, String key, Info info ) { m_key = key; m_info = info; + m_home = home; } public String getKey() @@ -49,6 +59,61 @@ public Info getInfo() { return m_info; + } + + protected Home getHome() + { + return m_home; + } + + public File getArtifact( Project project ) + { + // + // TODO: add support for snapshot semantics + // based on a resource feature + // + + String path = getInfo().getPath(); + File cache = getHome().getRepository().getCacheDirectory(); + File target = new File( cache, path ); + if( target.exists() ) + { + return target; + } + else + { + return get( project, target, path ); + } + } + + private File get( Project project, File target, String path ) + { + target.getParentFile().mkdirs(); + String[] hosts = getHome().getRepository().getHosts(); + for( int i=0; i<hosts.length; i++ ) + { + String host = hosts[i]; + try + { + URL url = new URL( host ); + URL source = new URL( url, path ); + + Get get = (Get) project.createTask( "get" ); + get.setSrc( source ); + get.setDest( target ); + get.setIgnoreErrors( false ); + get.setUseTimestamp( true ); + get.setVerbose( false ); + get.execute(); + + return target; + } + catch( Throwable e ) + { + // ignore + } + } + throw new BuildException( new FileNotFoundException( path ) ); } public String toString() Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/ResourceRef.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/ResourceRef.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/project/ResourceRef.java Fri Jun 11 04:27:39 2004 @@ -25,39 +25,53 @@ */ public class ResourceRef { + public static final int ANY = -1; + public static final int API = 0; + public static final int SPI = 1; + public static final int IMPL = 2; + private String m_key; private Policy m_policy; - private String m_tag; + private int m_tag; - public ResourceRef( String key ) + public static int getCategory( String category ) { - this( key, new Policy(), null ); - } - - public ResourceRef( String key, Policy policy, String tag ) - { - m_key = key; - m_policy = policy; - if( null == tag ) + if( "api".equals( category ) ) { - m_tag = "impl"; + return API; } - else if( "".equals( tag ) ) + else if( "spi".equals( category ) ) { - m_tag = "impl"; + return SPI; + } + else if( "impl".equals( category ) ) + { + return IMPL; } else { - m_tag = tag; + return ANY; } } + public ResourceRef( String key ) + { + this( key, new Policy(), ANY ); + } + + public ResourceRef( String key, Policy policy, int tag ) + { + m_key = key; + m_policy = policy; + m_tag = tag; + } + public String getKey() { return m_key; } - public String getTag() + public int getTag() { return m_tag; } @@ -65,6 +79,18 @@ public Policy getPolicy() { return m_policy; + } + + public boolean matches( int category ) + { + if(( ANY == category ) || ( ANY == m_tag )) + { + return true; + } + else + { + return ( m_tag == category ); + } } public boolean equals( Object other ) 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 Fri Jun 11 04:27:39 2004 @@ -29,10 +29,10 @@ import org.apache.avalon.tools.util.ElementHelper; import org.apache.avalon.tools.project.Info; import org.apache.avalon.tools.project.Definition; -import org.apache.avalon.tools.project.ProjectRef; +//import org.apache.avalon.tools.project.ProjectRef; import org.apache.avalon.tools.project.ResourceRef; import org.apache.avalon.tools.project.Resource; -import org.apache.avalon.tools.project.PluginRef; +//import org.apache.avalon.tools.project.PluginRef; import org.apache.avalon.tools.project.Plugin; import org.apache.avalon.tools.project.Plugin.TaskDef; import org.apache.avalon.tools.project.Policy; @@ -53,7 +53,7 @@ Info info = createInfo( ElementHelper.getChild( element, "info" ) ); String key = getDefinitionKey( element, info ); - return new Resource( key, info ); + return new Resource( home, key, info ); } public static Definition createDefinition( Home home, Element element, File anchor ) @@ -65,30 +65,26 @@ File basedir = getBasedir( anchor, element ); - Element deps = ElementHelper.getChild( element, "dependencies" ); - ResourceRef[] resources = createResourceRefs( - ElementHelper.getChild( deps, "resources" ) ); + ElementHelper.getChild( element, "dependencies" ) ); - ProjectRef[] projects = - createProjectRefs( - ElementHelper.getChild( deps, "projects" ) ); - - PluginRef[] plugins = + ResourceRef[] plugins = createPluginRefs( - ElementHelper.getChild( deps, "plugins" ) ); + ElementHelper.getChild( element, "plugins" ) ); final String tag = element.getTagName(); if( tag.equals( "project" ) ) { - return new Definition( key, basedir, info, resources, projects, plugins ); + return new Definition( + home, key, basedir, info, resources, plugins ); } else if( tag.equals( "plugin" ) ) { TaskDef[] tasks = getTaskDefs( ElementHelper.getChild( element, "tasks" ) ); - return new Plugin( key, basedir, info, resources, projects, plugins, tasks ); + return new Plugin( + home, key, basedir, info, resources, plugins, tasks ); } else { @@ -173,48 +169,31 @@ private static ResourceRef[] createResourceRefs( Element element ) throws BuildException { - Element[] children = ElementHelper.getChildren( element, "resourceref" ); + Element[] children = ElementHelper.getChildren( element, "include" ); ResourceRef[] refs = new ResourceRef[ children.length ]; - for( int i=0; i<children.length; i++ ) { Element child = children[i]; String key = child.getAttribute( "key" ); - String tag = child.getAttribute( "tag" ); + int tag = ResourceRef.getCategory( child.getAttribute( "tag" ) ); Policy policy = createPolicy( child ); refs[i] = new ResourceRef( key, policy, tag ); } return refs; } - private static ProjectRef[] createProjectRefs( Element element ) - throws BuildException - { - Element[] children = ElementHelper.getChildren( element, "projectref" ); - ProjectRef[] refs = new ProjectRef[ children.length ]; - for( int i=0; i<children.length; i++ ) - { - Element child = children[i]; - String key = child.getAttribute( "key" ); - String tag = child.getAttribute( "tag" ); - Policy policy = createPolicy( child ); - refs[i] = new ProjectRef( key, policy, tag ); - } - return refs; - } - - private static PluginRef[] createPluginRefs( Element element ) + private static ResourceRef[] createPluginRefs( Element element ) throws BuildException { - Element[] children = ElementHelper.getChildren( element, "pluginref" ); - PluginRef[] refs = new PluginRef[ children.length ]; + Element[] children = ElementHelper.getChildren( element, "include" ); + ResourceRef[] refs = new ResourceRef[ children.length ]; for( int i=0; i<children.length; i++ ) { Element child = children[i]; String key = child.getAttribute( "key" ); - String tag = child.getAttribute( "tag" ); + int tag = ResourceRef.getCategory( child.getAttribute( "tag" ) ); Policy policy = createPolicy( child, false, false, false ); - refs[i] = new PluginRef( key, policy, tag ); + refs[i] = new ResourceRef( key, policy, tag ); } return refs; } Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java Fri Jun 11 04:27:39 2004 @@ -28,6 +28,7 @@ import java.util.Date; import java.util.SimpleTimeZone; import java.util.TimeZone; +import java.util.List; import org.apache.tools.ant.Task; import org.apache.tools.ant.Project; @@ -60,7 +61,8 @@ public void execute() throws BuildException { String key = getContext().getKey(); - Definition def = getHome().getDefinition( key ); + ResourceRef ref = new ResourceRef( key ); + Definition def = getHome().getDefinition( ref ); File artifact = getArtifactFile( def ); m_factory = getProject().getProperty( FACTORY_KEY ); @@ -80,20 +82,24 @@ if( file.exists() ) { + // + // TODO : check if the index.xml was modified + // + if( file.lastModified() > artifact.lastModified() ) { - return; + if( getHome().getIndexLastModified() < file.lastModified() ) + { + return; + } } } try { - log( "Creating meta directive" ); - file.createNewFile(); final OutputStream output = new FileOutputStream( file ); - try { writeMetaDescriptor( output, def, artifact ); @@ -206,8 +212,8 @@ private void writeClasspath( final Writer writer, final Definition def ) throws IOException { - ResourceRef[] refs = getRuntimeRefs( def ); - ResourceRef[] apis = getRefs( refs, "api" ); + ArrayList visited = new ArrayList(); + ResourceRef[] apis = getQualifiedRefs( def, visited, ResourceRef.API ); if( apis.length > 0 ) { writer.write( "\n" ); @@ -217,7 +223,7 @@ String lead = "avalon.artifact.dependency.api"; writeRefs( writer, apis, lead ); } - ResourceRef[] spis = getRefs( refs, "spi" ); + ResourceRef[] spis = getQualifiedRefs( def, visited, ResourceRef.SPI ); if( spis.length > 0 ) { writer.write( "\n" ); @@ -228,7 +234,7 @@ writeRefs( writer, spis, lead ); } - ResourceRef[] impl = getRefs( refs, "impl" ); + ResourceRef[] impl = getQualifiedRefs( def, visited, ResourceRef.IMPL ); if( impl.length > 0 ) { writer.write( "\n" ); @@ -240,33 +246,17 @@ } } - private ResourceRef[] getRuntimeRefs( final Definition def ) - { - ArrayList list = new ArrayList(); - ResourceRef[] resources = - getHome().getRepository().getResourceRefs( def, Policy.RUNTIME ); - for( int i=0; i<resources.length; i++ ) - { - ResourceRef ref = resources[i]; - Policy policy = ref.getPolicy(); - if( policy.isRuntimeEnabled() ) - { - list.add( ref ); - } - } - return (ResourceRef[]) list.toArray( new ResourceRef[0] ); - } - - private ResourceRef[] getRefs( final ResourceRef[] refs, String category ) + private ResourceRef[] getQualifiedRefs( final Definition def, final List visited, int category ) { ArrayList list = new ArrayList(); + ResourceRef[] refs = def.getResourceRefs( Policy.RUNTIME, category, true ); for( int i=0; i<refs.length; i++ ) { ResourceRef ref = refs[i]; - String tag = ref.getTag(); - if( category.equals( tag ) ) + if( !visited.contains( ref ) ) { list.add( ref ); + visited.add( ref ); } } return (ResourceRef[]) list.toArray( new ResourceRef[0] ); Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/DeclareTask.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/DeclareTask.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/DeclareTask.java Fri Jun 11 04:27:39 2004 @@ -179,7 +179,10 @@ { writer.write( "\n <classpath>" ); final String pad = " "; - ResourceRef[] resources = getHome().getRepository().getResourceRefs( def ); + ResourceRef[] resources = + def.getResourceRefs( Policy.RUNTIME, ResourceRef.ANY, true ); + + // getHome().getRepository().getResourceRefs( def ); writeResourceRefs( writer, pad, resources ); writeResource( writer, pad, def ); writer.write( "\n </classpath>" ); Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/FilterTask.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/FilterTask.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/FilterTask.java Fri Jun 11 04:27:39 2004 @@ -35,8 +35,6 @@ import org.apache.avalon.tools.project.Resource; import org.apache.avalon.tools.project.Definition; import org.apache.avalon.tools.project.ResourceRef; -import org.apache.avalon.tools.project.ProjectRef; -import org.apache.avalon.tools.project.PluginRef; /** * Build a set of projects taking into account dependencies within the Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java Fri Jun 11 04:27:39 2004 @@ -110,8 +110,10 @@ File classes = new File( m_test, "classes" ); mkDir( classes ); Definition definition = getHome().getDefinition( getKey() ); - Path classpath = - getHome().getRepository().createPath( project, definition, Policy.TEST ); + Path classpath = definition.getPath( project, Policy.TEST ); + + //Path classpath = + // getHome().getRepository().createPath( project, definition, Policy.TEST ); // // add the project jar to the classpath for the compilation Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JarTask.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JarTask.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JarTask.java Fri Jun 11 04:27:39 2004 @@ -35,6 +35,7 @@ import org.apache.avalon.tools.home.Context; import org.apache.avalon.tools.home.Home; import org.apache.avalon.tools.project.Definition; +import org.apache.avalon.tools.project.ResourceRef; /** * Load a goal. Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JavacTask.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JavacTask.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JavacTask.java Fri Jun 11 04:27:39 2004 @@ -33,6 +33,7 @@ import org.apache.avalon.tools.home.Home; import org.apache.avalon.tools.project.Definition; import org.apache.avalon.tools.project.Policy; +import org.apache.avalon.tools.project.ResourceRef; /** * Compile sources. @@ -77,9 +78,10 @@ File classes = getContext().getBuildPath( BUILD_CLASSES_KEY ); mkDir( classes ); - Path classpath = - getHome().getRepository().createPath( - getProject(), getHome().getDefinition( getKey() ), Policy.BUILD ); + ResourceRef ref = new ResourceRef( getKey() ); + Definition definition = getHome().getDefinition( ref ); + Path classpath = definition.getPath( project, Policy.BUILD ); + compile( main, classes, classpath ); Copy copy = (Copy) getProject().createTask( "copy" ); 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 Fri Jun 11 04:27:39 2004 @@ -84,14 +84,16 @@ Info info = Info.create( id ); Project project = getProject(); - Resource resource = new Resource( info ); - File file = getHome().getRepository().getResource( project, resource ); + Resource resource = new Resource( getHome(), info ); + File file = resource.getArtifact( project ); + + //File file = getHome().getRepository().getResource( project, resource ); // // create a utility data object from the defintion // - AntLibData data = new AntLibData( getProject(), file ); + AntLibData data = new AntLibData( getHome(), getProject(), file ); AntClassLoader classloader = project.createClassLoader( data.getPath() ); String spec = data.getInfo().getSpec(); @@ -126,7 +128,7 @@ private final Path m_path = new Path( project ); private final TaskDef[] m_tasks; - public AntLibData( Project project, File file ) throws Exception + public AntLibData( Home home, Project project, File file ) throws Exception { Element root = ElementHelper.getRootElement( file ); Element infoElement = ElementHelper.getChild( root, "info" ); @@ -142,9 +144,10 @@ String type = child.getTagName(); String value = ElementHelper.getValue( child ); Info info = Info.create( type, value ); - Resource resource = new Resource( info ); - File jar = - getHome().getRepository().getResource( project, resource ); + Resource resource = new Resource( home, info ); + File jar = resource.getArtifact( project ); + //File jar = + // getHome().getRepository().getResource( project, resource ); m_path.createPathElement().setLocation( jar ); } } 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 Fri Jun 11 04:27:39 2004 @@ -32,7 +32,7 @@ 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.ResourceRef; import org.apache.avalon.tools.project.Plugin; /** @@ -77,10 +77,10 @@ String key = getContext().getKey(); Definition def = getHome().getDefinition( key ); - PluginRef[] refs = def.getPluginRefs(); + ResourceRef[] refs = def.getPluginRefs(); for( int i=0; i<refs.length; i++ ) { - PluginRef ref = refs[i]; + ResourceRef ref = refs[i]; Plugin plugin = getHome().getPlugin( ref ); String path = "plugin:" + plugin.getInfo().getSpec(); PluginTask task = new PluginTask(); Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/ReactorTask.java ============================================================================== --- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/ReactorTask.java (original) +++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/ReactorTask.java Fri Jun 11 04:27:39 2004 @@ -42,9 +42,9 @@ import org.apache.avalon.tools.home.Context; import org.apache.avalon.tools.home.Home; +import org.apache.avalon.tools.project.Plugin; import org.apache.avalon.tools.project.Definition; -import org.apache.avalon.tools.project.ProjectRef; -import org.apache.avalon.tools.project.PluginRef; +import org.apache.avalon.tools.project.ResourceRef; /** * Build a set of projects taking into account dependencies within the @@ -98,16 +98,9 @@ public void execute() throws BuildException { final Project project = getProject(); - log( "Finding project defintions." ); - long now = System.currentTimeMillis(); + log( "Preparing build sequence." ); m_defs = getDefinitions(); - long discovery = System.currentTimeMillis() - now; - - log( "Discovery took: (" + discovery + " msecs.)" ); - log( "Build sequence for projects." ); final Definition[] defs = walkGraph(); - long graph = System.currentTimeMillis() - discovery - now; - log( "Sequence established: (" + graph + " msecs.)" ); project.log( BANNER ); for( int i=0; i<defs.length; i++ ) { @@ -190,24 +183,34 @@ private Definition[] getProviders( final Definition def ) { final ArrayList list = new ArrayList(); - final ProjectRef[] refs = def.getProjectRefs(); + final ResourceRef[] refs = def.getResourceRefs(); for( int i=0; i<refs.length; i++ ) { - final Definition d = getHome().getDefinition( refs[i] ); - if( m_defs.contains( d ) ) + ResourceRef ref = refs[i]; + if( getHome().isaDefinition( ref ) ) { - list.add( d ); + final Definition d = getHome().getDefinition( ref ); + if( m_defs.contains( d ) ) + { + list.add( d ); + } } } - final PluginRef[] prefs = def.getPluginRefs(); - for( int i=0; i<prefs.length; i++ ) + + final ResourceRef[] plugins = def.getPluginRefs(); + for( int i=0; i<plugins.length; i++ ) { - final Definition d = getHome().getPlugin( prefs[i] ); - if( m_defs.contains( d ) ) + ResourceRef ref = plugins[i]; + if( getHome().isaDefinition( ref ) ) { - list.add( d ); + final Definition plugin = getHome().getPlugin( ref ); + if( m_defs.contains( plugin ) ) + { + list.add( plugin ); + } } } + return (Definition[]) list.toArray( new Definition[0] ); } @@ -265,7 +268,8 @@ final String key = getProjectName( dir ); if( null != key ) { - list.add( getHome().getDefinition( key ) ); + ResourceRef ref = new ResourceRef( key ); + list.add( getHome().getDefinition( ref ) ); } else { Modified: avalon/trunk/tools/project/src/test/index.xml ============================================================================== --- avalon/trunk/tools/project/src/test/index.xml (original) +++ avalon/trunk/tools/project/src/test/index.xml Fri Jun 11 04:27:39 2004 @@ -63,10 +63,10 @@ <type>jar</type> </info> <dependencies> - <plugins> - <pluginref key="demo"/> - </plugins> </dependencies> + <plugins> + <include key="demo"/> + </plugins> </project> <plugin basedir="projects/demo"> @@ -80,13 +80,9 @@ <taskdef name="hello" class="org.apache.avalon.demo.StandardDemo"/> </tasks> <dependencies> - <resources> - <resourceref key="avalon-framework-api"/> - </resources> - <projects> - <projectref key="widget"/> - <projectref key="gizmo"/> - </projects> + <include key="avalon-framework-api" tag="api"/> + <include key="avalon-framework-impl"/> + <include key="widget" tag="spi"/> </dependencies> </plugin> @@ -98,9 +94,7 @@ <type>jar</type> </info> <dependencies> - <projects> - <projectref key="gizmo"/> - </projects> + <include key="gizmo"/> </dependencies> </project> @@ -112,9 +106,7 @@ <type>jar</type> </info> <dependencies> - <resources> - <resourceref key="avalon-util-i18n"/> - </resources> + <include key="avalon-util-i18n"/> </dependencies> </project> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]