dion        2003/08/18 21:29:25

  Modified:    src/java/org/apache/maven/project Branch.java Project.java
                        Dependency.java Repository.java License.java
                        Build.java BaseObject.java Resource.java
  Added:       src/java/org/apache/maven/project ArtifactType.java
  Log:
  Switch stable branch back to HEAD
  
  Revision  Changes    Path
  1.4       +0 -0      maven/src/java/org/apache/maven/project/Branch.java
  
  Index: Branch.java
  ===================================================================
  RCS file: /home/cvs/maven/src/java/org/apache/maven/project/Branch.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  
  
  
  1.88      +274 -395  maven/src/java/org/apache/maven/project/Project.java
  
  Index: Project.java
  ===================================================================
  RCS file: /home/cvs/maven/src/java/org/apache/maven/project/Project.java,v
  retrieving revision 1.87
  retrieving revision 1.88
  diff -u -r1.87 -r1.88
  --- Project.java      4 Aug 2003 06:27:56 -0000       1.87
  +++ Project.java      19 Aug 2003 04:29:25 -0000      1.88
  @@ -56,18 +56,33 @@
    * ====================================================================
    */
   
  -import org.apache.maven.ArtifactListBuilder;
  -import org.apache.maven.Maven;
   import org.apache.maven.MavenConstants;
  -import org.apache.maven.jelly.MavenJellyContext;
  +import org.apache.maven.MavenUtils;
  +import org.apache.maven.DependencyClasspathBuilder;
  +import org.apache.maven.ArtifactListBuilder;
  +import org.apache.maven.AntProjectBuilder;
  +import org.apache.maven.plugin.PluginManager;
   import org.apache.maven.repository.Artifact;
  -import org.apache.maven.verifier.ChecksumVerificationException;
  -import org.apache.maven.verifier.DependencyVerifier;
   import org.apache.maven.verifier.RepoConfigException;
   import org.apache.maven.verifier.UnsatisfiedDependencyException;
  -import org.apache.plexus.util.StringUtils;
  +import org.apache.maven.verifier.DependencyVerifier;
  +import org.apache.maven.verifier.ChecksumVerificationException;
  +import org.apache.maven.jelly.MavenJellyContext;
  +import org.apache.maven.jelly.JellyUtils;
  +import org.apache.tools.ant.types.Path;
  +import org.apache.commons.grant.GrantProject;
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
  +import org.dom4j.Document;
  +import org.dom4j.io.SAXReader;
  +
  +import com.werken.forehead.Forehead;
  +import com.werken.forehead.ForeheadClassLoader;
   
   import java.io.File;
  +import java.io.InputStreamReader;
  +import java.io.InputStream;
  +import java.net.MalformedURLException;
   import java.util.ArrayList;
   import java.util.HashMap;
   import java.util.Iterator;
  @@ -75,6 +90,7 @@
   import java.util.Map;
   import java.util.Set;
   import java.util.TreeSet;
  +import java.util.StringTokenizer;
   
   /**
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  @@ -205,6 +221,9 @@
        */
       private List reports;
   
  +    /** This project's Jelly context. */
  +    private MavenJellyContext context;
  +
       /**
        * A list of the plugin context for the plugins that have been loaded for this 
project.
        * This allows inter plugin communication. Needs some fleshing out.
  @@ -216,40 +235,9 @@
   
       /** ArtifactId. */
       private String artifactId;
  -
  -    /**
  -     * Properties that consist of the contents of the standard Maven properties 
files
  -     * and System properties.
  -     */
  -    private Map projectProperties;
  -
  -    private Project parent;
  -
  -    /** The maven session this project is running in. */
  -    private Maven maven;
       
  -    /** the maven.xml file for this project */
  -    private File mavenXml;
  -
  -    public Project getParent()
  -    {
  -        return parent;
  -    }
  -
  -    public void setParent( Project parent )
  -    {
  -        this.parent = parent;
  -    }
  -
  -    public Maven getMaven()
  -    {
  -        return maven;
  -    }
  -
  -    public void setMaven( Maven maven )
  -    {
  -        this.maven = maven;
  -    }
  +    /** log for debug and output */
  +    private static final Log log = LogFactory.getLog(Project.class);
   
       /**
        * Default constructor.
  @@ -265,6 +253,7 @@
           branches = new ArrayList();
           dependencyPaths = new HashMap();
           dependencyMap = new HashMap();
  +        goalNames = new ArrayList();
           reports = new ArrayList();
           packageGroups = new ArrayList();
       }
  @@ -382,6 +371,26 @@
       }
   
       /**
  +     * Set the context attribute.
  +     *
  +     * @param context
  +     */
  +    public void setContext( MavenJellyContext context )
  +    {
  +        this.context = context;
  +    }
  +
  +    /**
  +     * Get the context attribute.
  +     *
  +     * @return The
  +     */
  +    public MavenJellyContext getContext()
  +    {
  +        return context;
  +    }
  +
  +    /**
        * Set the  attribute.
        *
        * @param artifactList
  @@ -448,7 +457,7 @@
        */
       public boolean hasParent()
       {
  -        return getParent() != null;
  +        return isValid( getExtend() );
       }
   
       /**
  @@ -472,26 +481,6 @@
       }
       
       /**
  -     * @return the maven.xml file
  -     */
  -    public File getMavenXml()
  -    {
  -        if (mavenXml == null)
  -        {
  -            mavenXml = new File( getFile().getParentFile(), 
MavenConstants.BUILD_FILE_NAME );
  -        }
  -        return mavenXml;
  -    }
  -    
  -    /**
  -     * @return true if the maven.xml file for the project exists
  -     */
  -    public boolean hasMavenXml()
  -    {
  -        return getMavenXml().exists();        
  -    }
  -
  -    /**
        * Set the gump repository descriptor.
        *
        * @param gumpRepositoryId Gump repository id.
  @@ -1141,6 +1130,36 @@
       }
   
       /**
  +     * Add a branch to this project.
  +     *
  +     * @param branch Branch for this project.
  +     */
  +    public void addBranch( Branch branch )
  +    {
  +        branches.add( branch );
  +    }
  +
  +    /**
  +     * Set the branches for this project.
  +     *
  +     * @param branches List of branches for this project.
  +     */
  +    public void setBranches( List branches )
  +    {
  +        this.branches = branches;
  +    }
  +
  +    /**
  +     * Return the branches for this project.
  +     *
  +     * @return List of branches.
  +     */
  +    public List getBranches()
  +    {
  +        return branches;
  +    }
  +
  +    /**
        * Return a distribution for this project.
        *
        * @param versionId the id of the version to return
  @@ -1217,8 +1236,25 @@
           packageGroups.add( packageGroup );
       }
   
  +    /**
  +     * Create a dom4j document from the POM. Used for dvsl processing right now.
  +     * Hopefully we can make this more general so that people
  +     * can use the POM in XSLT transformations. This is not
  +     * working for some reason, I believe due to encoding problems.
  +     * This might be working now but I will test it later.
  +     *
  +     * @return Document Dom4j document.
  +     * @throws Exception If an error occurs while creating the dom4j document.
  +     */
  +    public Document createDocument()
  +        throws Exception
  +    {
  +        SAXReader reader = new SAXReader();
  +        return reader.read( new InputStreamReader( 
MavenUtils.getProjectInputStream( this ) ) );
  +    }
  +
       // ----------------------------------------------------------------------
  -    // Properties that have been created
  +    //
       // ----------------------------------------------------------------------
   
       /** Flag to indicate the project has been verified. */
  @@ -1230,6 +1266,11 @@
       /** Dependency classpath used for compilation. */
       private String dependencyClasspath;
   
  +    /** Goal names the project has been asked to satisfy. */
  +    private List goalNames;
  +
  +    private GrantProject grantProject;
  +
       /**
        * Initialize the project. This consists of the following stages.
        *
  @@ -1242,6 +1283,8 @@
        *
        * 4) Create the dependency verifier.
        *
  +     * 5) Initialize the driver for this project.
  +     *
        * @throws Exception If an error occurs during project initialization.
        */
       public void initialize()
  @@ -1252,15 +1295,76 @@
               return;
           }
   
  +        setAntProject( AntProjectBuilder.build( this ) );
  +        getContext().setAntProject( getAntProject() );
           buildArtifactList();
  -        getDependencyClasspath();
  +        buildDependencyClasspath();
           setDependencyVerifier( new DependencyVerifier( this ) );
  -        getDependencyVerifier().setIgnoreErrors( false );
  -
  +        getDependencyVerifier().setIgnoreErrors(false);
  +        initializeDriver();
  +        if ( build != null )
  +        {
  +            build.resolveDirectories( file.getParentFile() );
  +        }
           initialized = true;
       }
   
       /**
  +     * Set the grantProject attribute.
  +     *
  +     * @param grantProject
  +     */
  +    public void setAntProject( GrantProject grantProject )
  +    {
  +        this.grantProject = grantProject;
  +    }
  +
  +    /**
  +     * Get the grantProject attribute.
  +     *
  +     * @return The
  +     */
  +    public GrantProject getAntProject()
  +    {
  +        return grantProject;
  +    }
  +
  +   /**
  +     * Return an InputStream found in the classpath. Used
  +     *  specifically to find resources stored in the maven.jar
  +     *
  +     * @param name Name of the resource to find.
  +     * @return InputStream Found the found resource.
  +     * @throws Exception If an error occurs while trying to retreive the
  +     * named resource.
  +     */
  +    private InputStream getResourceAsStream( String name )
  +        throws Exception
  +    {
  +        return Project.class.getClassLoader().getResourceAsStream( name );
  +    }
  +
  +    /**
  +     * Initialise the jelly script that drives the build
  +     *
  +     * @throws Exception when any error occurs
  +     */
  +    private void initializeDriver()
  +        throws Exception
  +    {
  +        // this is working correctly and the driver can be initialized
  +        // for a project then we can go way and initialize other projects
  +        // come back in the reactor and the values set are still correct.
  +
  +        InputStream driverInputStream = getResourceAsStream( "driver.jelly" );
  +
  +        JellyUtils.runScript( driverInputStream,
  +                              null,
  +                              getContext(),
  +                              getContext().getXMLOutput() );
  +    }
  +
  +    /**
        * Verify the dependencies for this project.
        *
        * @throws RepoConfigException If an error occurs checking the local settings.
  @@ -1317,41 +1421,10 @@
        */
       public String getDependencyClasspath()
       {
  -        if (dependencyClasspath == null)
  -        {
  -            StringBuffer classpath = new StringBuffer();
  -
  -            for ( Iterator i = getArtifacts().iterator(); i.hasNext(); )
  -            {
  -                Artifact artifact = (Artifact) i.next();
  -                Dependency d = artifact.getDependency();
  -
  -                // Only add appropriate dependencies to the classpath
  -                if ( isClasspathDependency(d) )
  -                {
  -                    classpath.append( artifact.getPath() ).append( PS );
  -                }
  -                setDependencyPath( d.getId(), artifact.getPath() );
  -            }
  -
  -            dependencyClasspath = classpath.toString();
  -
  -        }
           return dependencyClasspath;
       }
   
       /**
  -     * Currently this is just jars.
  -     * 
  -     * @param d
  -     * @return true if the given dependency belongs on the classpath
  -     */
  -    private boolean isClasspathDependency(Dependency d)
  -    {
  -        return d.getType().equals( "jar" );
  -    }
  -
  -    /**
        * Build the dependency classpath.
        *
        * @throws Exception If an error occurs while building the dependency classpath.
  @@ -1359,23 +1432,10 @@
       public void buildDependencyClasspath()
           throws Exception
       {
  -        StringBuffer classpath = new StringBuffer();
  -
  -        for ( Iterator i = getArtifacts().iterator(); i.hasNext(); )
  -        {
  -            Artifact artifact = (Artifact) i.next();
  -            Dependency d = artifact.getDependency();
  -
  -            // Only add jar dependencies to the classpath
  -            if ( d.getType().equals( "jar" ) == false )
  -            {
  -                continue;
  -            }
  -
  -            classpath.append( artifact.getPath() ).append( PS );
  -        }
  -
  -        setDependencyClasspath( classpath.toString() );
  +        setDependencyClasspath( DependencyClasspathBuilder.build( this ) );
  +        Path p = new Path( getContext().getAntProject() );
  +        p.setPath( getDependencyClasspath() );
  +        getContext().getAntProject().addReference( 
MavenConstants.DEPENDENCY_CLASSPATH, p );
       }
   
       /**
  @@ -1386,73 +1446,65 @@
           artifactList = ArtifactListBuilder.build( this );
       }
   
  -    // ----------------------------------------------------------------------
  -    // Test and compile sourceroots.
  -    // ----------------------------------------------------------------------
  -
  -    private static String PS = System.getProperty( "path.separator" );
  -
  -    private String compileSourceRoots = "";
  -
  -    private String testCompileSourceRoots = "";
  -
  -    public void addCompileSourceRoot( String path )
  +    /**
  +     * Get the goal names that must be satisfied.
  +     *
  +     * @return The goal names to be satisfied.
  +     */
  +    public List getGoalNames()
       {
  -        compileSourceRoots += PS + path;
  +        return goalNames;
       }
   
       /**
  -     * Get sourceroots.
  +     * Set the goal names to be satisfied.
        *
  -     * @return location of Maven local home installation.
  +     * @param goals Goals to be satisfied.
        */
  -    public String getCompileSourceRoots()
  +    public void setGoalNames( List goals )
       {
  -        return compileSourceRoots;
  +        getGoalNames().addAll( goals );
       }
   
  -    public List getCompileSourceRootsList()
  +    /**
  +     * Set goals as a CSV list.
  +     *
  +     * @param goalsCsv List of goals in CSV form.
  +     */
  +    public void setGoalNames( String goalsCsv )
       {
  -        String[] s = StringUtils.split( getCompileSourceRoots(), PS );
  -
  -        List list = new ArrayList();
  -
  -        for ( int i = 0; i < s.length; i++ )
  +        if ( goalNames != null )
           {
  -            list.add( s[i] );
  -        }
  +            StringTokenizer tokens = new StringTokenizer( goalsCsv, "," );
   
  -        return list;
  +            while ( tokens.hasMoreTokens() )
  +            {
  +                goalNames.add( tokens.nextToken().trim() );
  +            }
  +        }
       }
  -
  -    public void addTestCompileSourceRoot( String path )
  +    
  +    /**
  +     * Remove all project goals.
  +     */
  +    public void removeGoalNames()
       {
  -        testCompileSourceRoots += PS + path;
  +        if ( goalNames != null )
  +        {
  +            goalNames.clear();
  +        }
       }
   
  -
       /**
  -     * Get sourceroots.
  +     * Load a Jelly script for this project.
        *
  -     * @return location of Maven local home installation.
  +      * @param jellyScript Jelly script to run for this project's use.
  +     * @throws Exception If an error occurs while running Jelly script.
        */
  -    public String getTestCompileSourceRoots()
  -    {
  -        return testCompileSourceRoots;
  -    }
  -
  -    public List getTestCompileSourceRootsList()
  +    public void loadJellyScript( File jellyScript )
  +        throws Exception
       {
  -        String[] s = StringUtils.split( getTestCompileSourceRoots(), PS );
  -
  -        List list = new ArrayList();
  -
  -        for ( int i = 0; i < s.length; i++ )
  -        {
  -            list.add( s[i] );
  -        }
  -
  -        return list;
  +        getContext().getMavenSession().loadJellyScript( jellyScript, this );
       }
   
       // ----------------------------------------------------------------------
  @@ -1519,249 +1571,76 @@
           return id;
       }
   
  -    // ----------------------------------------------------------------------
  -    // Convenience properties accessors
  -    // ----------------------------------------------------------------------
  -
  -    public String getProjectProperty( String key )
  -    {
  -        String p;
  -
  -        p = (String) getProjectProperties().get( key );
  -
  -        if ( p != null )
  -        {
  -            return p;
  -        }
  -
  -        // These are properties in the XML document that look like this:
  -        //
  -        // <properties>
  -        //   <key>value</key>
  -        // </properties>
  -        //
  -        p = (String) getProperties().get( key );
  -
  -        if ( p != null )
  -        {
  -            return p;
  -        }
  -
  -        if ( hasParent() )
  -        {
  -            return getParent().getProjectProperty( key );
  -        }
  -
  -        return p;
  -    }
  -
       /**
  -     * Convert a <code>String</code> property to a
  -     * <code>Boolean</code> based on its contents.  It would be nice
  -     * if Jelly would deal with this automatically.
  -     *
  -     *  @param key The property key to lookup and convert.
  -     *
  -     *  @return The boolean value of the property if convertiable,
  -     *          otherwise <code>Boolean.FALSE</code>.
  +     * Process the dependencies of the project, adding dependencies to the
  +     * appropriate classloader etc
  +     * 
  +     * @throws MalformedURLException
        */
  -    public boolean getBoolean( String key )
  +    public void processDependencies() throws MalformedURLException, Exception
       {
  -        String value = getProjectProperty( key );
  -
  -        if ( "true".equalsIgnoreCase( value )
  -            || "on".equalsIgnoreCase( value )
  -            || "1".equals( value ) )
  +        if (getArtifacts() == null)
           {
  -            return true;
  +            log.debug("No dependencies to process for project " + getName());
  +            return;
           }
  -
  -        return false;
  -    }
  -
  -    public Map getProjectProperties()
  -    {
  -        return projectProperties;
  -    }
  -
  -    public void setProjectProperties( Map projectProperties )
  -    {
  -        this.projectProperties = projectProperties;
  -    }
  -
  -    public void setProjectProperty( String key, Object value )
  -    {
  -        getProjectProperties().put( key, value );
  -    }
  -
  -    /**
  -     * Add a remote repository to the list of remote repositories.
  -     *
  -     * @param mavenRemoteRepo Remote repository to add.
  -     */
  -    public void addMavenRemoteRepo( String mavenRemoteRepo )
  -    {
  -        ( (List) getProjectProperties().get( MavenConstants.REPO_REMOTE ) ).add( 
mavenRemoteRepo );
  -    }
  -
  -    /**
  -     * Set the mavenRepoRemote attribute.
  -     *
  -     * @param mavenRepoRemote List of remove repositories.
  -     */
  -    public void setMavenRepoRemotes( List mavenRepoRemote )
  -    {
  -        setProjectProperty( MavenConstants.REPO_REMOTE, mavenRepoRemote );
  -    }
  -
  -    /**
  -     * Get the mavenRepoRemote attribute.
  -     *
  -     * @return The list of remote repositories.
  -     */
  -    public List getMavenRepoRemote()
  -    {
  -        // We might have CSV list of remote repositories.
  -        return convertCsvStringToList( getProjectProperty( 
MavenConstants.REPO_REMOTE ) );
  -    }
  -
  -    /**
  -     * Convert a CSV list of values into a List
  -     *
  -     * @param csvString CVS list of values.
  -     * @return The List of value.
  -     */
  -    private List convertCsvStringToList( String csvString )
  -    {
  -        ArrayList list = new ArrayList();
  -        String[] s = StringUtils.split( csvString, "," );
  -
  -        for ( int i = 0; i < s.length; i++ )
  +        
  +        // This may definitely break plugins.
  +        ClassLoader projectClassLoader = getContext().getClassLoader();
  +    
  +        if ( projectClassLoader instanceof ForeheadClassLoader )
           {
  -            list.add( s[i] );
  -        }
  -
  -        return list;
  -    }
  -
  -    /**
  -     * Set the location of the local maven repository.
  -     *
  -     * @param mavenRepoLocal The local repository.
  -     */
  -    public void setMavenRepoLocal( String mavenRepoLocal )
  -    {
  -        setProjectProperty( MavenConstants.REPO_LOCAL, mavenRepoLocal );
  -    }
  -
  -    /**
  -     * Get the location of the local maven repository.
  -     *
  -     * @return The local repository.
  -     */
  -    public String getMavenRepoLocal()
  -    {
  -        return getProjectProperty( MavenConstants.REPO_LOCAL );
  -    }
  -
  -
  -    /**
  -     * Set flag indicating if the remote repository is enabled for use.
  -     *
  -     * @param remoteRepositoryEnabled Remote repository usage flag.
  -     */
  -    public void setRemoteRepositoryEnabled( Boolean remoteRepositoryEnabled )
  -    {
  -        setProjectProperty( MavenConstants.REPO_REMOTE_ENABLED, 
remoteRepositoryEnabled );
  -    }
  -
  -    /**
  -     * Set flag indicating if the remote repository is enabled for use.
  -     *
  -     * @return Remote repository usage flag.
  -     */
  -    public boolean getRemoteRepositoryEnabled()
  -    {
  -        return getBoolean( MavenConstants.REPO_REMOTE_ENABLED );
  -    }
  -
  -    /**
  -     * Set the flag indicating the use of the JAR overriding facility.
  -     *
  -     * @param mavenJarOverride MavenSession jar override flag.
  -     */
  -    public void setMavenJarOverride( Boolean mavenJarOverride )
  -    {
  -        setProjectProperty( MavenConstants.JAR_OVERRIDE, mavenJarOverride );
  -    }
  -
  -    /**
  -     * Get the flag indicating the use of the JAR overriding facility.
  -     *
  -     * @return MavenSession jar override flag.
  -     */
  -    public boolean getMavenJarOverride()
  -    {
  -        return getBoolean( MavenConstants.JAR_OVERRIDE );
  -    }
  -
  -    /**
  -     * Get the maven jar override value for a particular dependency.
  -     *
  -     * @param id Id of the project to override.
  -     * @return MavenSession jar override value for a particular dependency.
  -     */
  -    public String getMavenJarOverride( String id )
  -    {
  -        return getProjectProperty( MavenConstants.JAR_OVERRIDE_PROPERTY + id );
  -    }
  -
  -    /**
  -     * Get MavenSession home.
  -     *
  -     * @return MavenSession home.
  -     */
  -    public String getMavenHome()
  -    {
  -        return getProjectProperty( MavenConstants.MAVEN_HOME );
  -    }
  -
  -    /**
  -     * Get local maven home.
  -     *
  -     * @return location of Maven local home installation.
  -     */
  -    public String getMavenHomeLocal()
  -    {
  -        return getProjectProperty( MavenConstants.MAVEN_HOME_LOCAL );
  -    }
  -
  -    /**
  -     * Get unpacked plugins location.
  -     *
  -     * @return unpacked plugins location.
  -     */
  -    public String getUnpackedPluginsDir()
  -    {
  -        return getProjectProperty( MavenConstants.MAVEN_UNPACKED_PLUGINS_DIR );
  -    }
  +            // add the dependencies to the classpath
  +            for ( Iterator i = getArtifacts().iterator(); i.hasNext(); )
  +            {
  +                ForeheadClassLoader loader = 
(ForeheadClassLoader)projectClassLoader;
  +                Artifact artifact = (Artifact) i.next();
  +                Dependency dependency = artifact.getDependency();
  +                if (dependency.isPlugin())
  +                {
  +                    // dependencies should already be downloaded
  +                    // get the plugin manager to install it
  +                    PluginManager pluginManager = 
getContext().getMavenSession().getPluginManager();
  +                    pluginManager.installPlugin(this, artifact.getFile());
  +                }
   
  -    /**
  -     * @return the list of branches for a project
  -     */
  -    public List getBranches()
  -    {
  +                // get correct classloader
  +                String classLoader = artifact.getDependency().getProperty( 
"classloader" );
  +                if (classLoader != null)
  +                {
  +                    loader = Forehead.getInstance().getClassLoader( classLoader ); 
  +                    if (loader == null)
  +                    {
  +                        log.info("classloader '" + classLoader
  +                            + "' not found. Adding dependencies to the project 
classloader instead");
  +                        loader = (ForeheadClassLoader)projectClassLoader;
  +                    }
  +                }
  +    
  +                // add to classloader
  +                if (artifact.exists())
  +                {
  +                    if (dependency.isAddedToClasspath())
  +                    {
  +                        loader.addURL( artifact.getFile().toURL() );
  +                    }
  +                    else
  +                    {
  +                        log.debug("Non classpath dependency: '" + 
artifact.getFile() + "'"
  +                            + " not added to classpath " + loader);
  +                    }
  +                }
  +                else
  +                {
  +                    log.info("Artifact '" + artifact.getFile() + "' not found to 
add to classpath");
  +                }
  +            }
  +        }
           
  -        return branches;
  -    }
  -
  -    /**
  -     * Add a branch to the project
  -     * @param b a Branch
  -     */
  -    public void addBranch(Branch b)
  -    {
  -        branches.add(b);                
  +        // FIXME: Don't know why we're doing this?
  +        // Explicity set the classloader used to find resources. As we just
  +        // poked all the dependencies into the classloader.
  +        getContext().setClassLoader( projectClassLoader );
       }
   
   }
  
  
  
  1.37      +47 -10    maven/src/java/org/apache/maven/project/Dependency.java
  
  Index: Dependency.java
  ===================================================================
  RCS file: /home/cvs/maven/src/java/org/apache/maven/project/Dependency.java,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- Dependency.java   28 Jul 2003 05:00:03 -0000      1.36
  +++ Dependency.java   19 Aug 2003 04:29:25 -0000      1.37
  @@ -80,7 +80,7 @@
       private String groupId;
   
       /** The dependency type */
  -    private String type;
  +    private ArtifactType type;
   
       /** Flag to indicate the artifact is poorly named. */
       //private boolean isPoorlyNamed = false;
  @@ -223,7 +223,7 @@
               return jar;
           }
   
  -        return getArtifactId() + "-" + getVersion() + "." + getType();
  +        return getArtifactId() + "-" + getVersion() + "." + getExtension();
       }
   
       /**
  @@ -298,15 +298,33 @@
   
   
       /**
  -     * Set the type of the dependency.
  -     *
  -     * @return dependency type such as "jar" or "war"
  +     * @return dependency type such as "jar", "war", etc.
        */
       public String getType()
       {
  -        return type;
  -    }
  -
  +             String result = null;
  +             
  +             if (this.type != null)
  +             {
  +                     result = this.type.getType(); 
  +             }
  +        return result;
  +    }
  +
  +     /**
  +      * @return dependency extension such as "jar", "war", etc.
  +      */
  +     public String getExtension()
  +     {
  +             String result = null;
  +             
  +             if (this.type != null)
  +             {
  +                     result = this.type.getExtension(); 
  +             }
  +             return result;
  +     }
  +     
       /**
        * Sets the dependency type such as "jar" or "war"
        *
  @@ -314,7 +332,7 @@
        */
       public void setType( String type )
       {
  -        this.type = type;
  +        this.type = ArtifactType.findType(type);
       }
   
       /**
  @@ -327,5 +345,24 @@
           return "Dep[ id:" + getId() + " pid:" + getId()
               + " ver:" + getVersion() + " ar:" + getArtifact() + " jar:"
               + getJar() + " ]";
  +    }
  +
  +    /**
  +     * Usually only jars and ejbs are added to the classpath
  +     * 
  +     * @return true if the given dependency belongs on the classpath
  +     */
  +    public boolean isAddedToClasspath()
  +    {
  +        String artifactType = type.getType();
  +        return artifactType.equals("jar") || artifactType.equalsIgnoreCase("ejb");
  +    }
  +    
  +    /**
  +     * @return true if the dependency is a maven plugin
  +     */
  +    public boolean isPlugin()
  +    {
  +        return type.getType().equals("plugin");
       }
   }
  
  
  
  1.15      +1 -1      maven/src/java/org/apache/maven/project/Repository.java
  
  Index: Repository.java
  ===================================================================
  RCS file: /home/cvs/maven/src/java/org/apache/maven/project/Repository.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  
  
  
  1.4       +1 -1      maven/src/java/org/apache/maven/project/License.java
  
  Index: License.java
  ===================================================================
  RCS file: /home/cvs/maven/src/java/org/apache/maven/project/License.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  
  
  
  1.23      +51 -1     maven/src/java/org/apache/maven/project/Build.java
  
  Index: Build.java
  ===================================================================
  RCS file: /home/cvs/maven/src/java/org/apache/maven/project/Build.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- Build.java        27 Jul 2003 23:33:59 -0000      1.22
  +++ Build.java        19 Aug 2003 04:29:25 -0000      1.23
  @@ -56,8 +56,13 @@
    * ====================================================================
    */
   
  +import org.apache.maven.MavenUtils;
  +
   import java.util.ArrayList;
   import java.util.List;
  +import java.util.Iterator;
  +import java.io.File;
  +import java.io.IOException;
   
   /**
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  @@ -297,5 +302,50 @@
       {
           return "[ sourceDirectory = " + getSourceDirectory() +
                  ", unitTestSourceDirectory = " + getUnitTestSourceDirectory() + " ]";
  +    }
  +
  +    /**
  +     * Resolve relative directories against a base directory.
  +     * @param basedir the base directory
  +     * @todo *sourceDirectory
  +     * @throws IOException file resolution error
  +     */
  +    public void resolveDirectories( File basedir ) throws IOException
  +    {
  +        for ( Iterator i = resources.iterator(); i.hasNext(); )
  +        {
  +            Resource r = ( Resource ) i.next();
  +            r.resolveDirectory( basedir );
  +        }
  +
  +        if ( unitTest != null )
  +        {
  +            for ( Iterator i = unitTest.getResources().iterator(); i.hasNext(); )
  +            {
  +                Resource r = ( Resource ) i.next();
  +                r.resolveDirectory( basedir );
  +            }
  +        }
  +
  +        if ( sourceDirectory != null && sourceDirectory.length() > 0 )
  +        {   
  +            sourceDirectory = MavenUtils.makeAbsolutePath( basedir, sourceDirectory 
);
  +        }
  +
  +        if ( aspectSourceDirectory != null && aspectSourceDirectory.length() > 0 )
  +        {
  +            aspectSourceDirectory = MavenUtils.makeAbsolutePath( basedir, 
aspectSourceDirectory );
  +        }
  +
  +        if ( unitTestSourceDirectory != null && unitTestSourceDirectory.length() > 
0 )
  +        {
  +            unitTestSourceDirectory = MavenUtils.makeAbsolutePath( basedir, 
unitTestSourceDirectory );
  +        }
  +
  +        if ( integrationUnitTestSourceDirectory != null && 
integrationUnitTestSourceDirectory.length() > 0 )
  +        {
  +            integrationUnitTestSourceDirectory =
  +                    MavenUtils.makeAbsolutePath( basedir, 
integrationUnitTestSourceDirectory );
  +        }
       }
   }
  
  
  
  1.26      +83 -15    maven/src/java/org/apache/maven/project/BaseObject.java
  
  Index: BaseObject.java
  ===================================================================
  RCS file: /home/cvs/maven/src/java/org/apache/maven/project/BaseObject.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- BaseObject.java   28 Jul 2003 04:56:43 -0000      1.25
  +++ BaseObject.java   19 Aug 2003 04:29:25 -0000      1.26
  @@ -56,7 +56,12 @@
    * ====================================================================
    */
   
  +import org.apache.commons.lang.StringUtils;
  +
  +import java.util.ArrayList;
   import java.util.HashMap;
  +import java.util.Iterator;
  +import java.util.List;
   import java.util.Map;
   
   /**
  @@ -88,6 +93,11 @@
       private Map properties;
   
       /**
  +     * properties that are in the format name:value
  +     */
  +    private List combinedProperties = new ArrayList();
  +
  +    /**
        * Sets the name attribute
        *
        * @param name the new name value
  @@ -133,44 +143,102 @@
       }
   
       /**
  +     * Add a meta property to this object.
        *
  -     * @param key
  -     * @param value
  +     * @param combinedProperty The property that is fed in by
  +     *        the MetaPropertiesRule is in the form name:value
  +     *        so that we can fake out betwixt. Not beautiful
  +     *        but it works and when we find a better solution
  +     *        nothing will change for users.
        */
  -    public void addProperty( String key, Object value )
  +    public void addProperty( String combinedProperty )
       {
  -        getProperties().put( key, value );
  +        combinedProperties.add( combinedProperty );
       }
   
  -    public String getProperty( String key )
  +    /**
  +     * Get a meta property. The first time one is retrieved we
  +     * create a property Map from the name:value entries in the
  +     * list we have used to store the meta properties during
  +     * mapping through betwixt.
  +     *
  +     * @param propertyName the name of the property to retrieve
  +     * @return the property value
  +     */
  +    public String getProperty( String propertyName )
       {
  -        return (String) getProperties().get( key );
  +        if ( properties == null )
  +        {
  +            resolveProperties();
  +        }
  +
  +        return (String) properties.get( propertyName );
       }
   
       /**
  +     * Set meta properties. They are stored in a [EMAIL PROTECTED] List} of
  +     * name:value entries.
        *
  -     * @param properties
  +     * @param combinedProperties a list of name:value strings
        */
  -    public void setProperties( Map properties )
  +    public void setProperties( List combinedProperties )
       {
  -        this.properties = properties;
  +        this.combinedProperties = combinedProperties;
       }
   
       /**
  +     * Get meta properties.
        *
  -     * @return
  +     * @return a [EMAIL PROTECTED] List} of name:value entries
        */
  -    public Map getProperties()
  +    public List getProperties()
  +    {
  +        return combinedProperties;
  +    }
  +
  +    /**
  +     * Get the resolved properties after the name:value
  +     * processing has been done.
  +     *
  +     * @return a map from the [EMAIL PROTECTED] #getProperties() meta properties} 
turning
  +     * the name:value strings into a key and value for the map
  +     */
  +    public Map resolvedProperties()
       {
           if ( properties == null )
           {
  -            properties = new HashMap();
  +            resolveProperties();
           }
   
           return properties;
       }
   
       /**
  +     * Resolve the name:value list into a real Map.
  +     */
  +    private void resolveProperties()
  +    {
  +        properties = new HashMap();
  +
  +        for ( Iterator i = combinedProperties.iterator(); i.hasNext(); )
  +        {
  +            String combinedProperty = (String) i.next();
  +            String[] s = StringUtils.split( combinedProperty, ":" );
  +
  +            if ( s.length == 3 )
  +            {
  +                // Property is specific and has a value.
  +                properties.put( s[1], s[2] );
  +            }
  +            else
  +            {
  +                // Property is specific but has no value.
  +                properties.put( s[1], "" );
  +            }
  +        }
  +    }
  +
  +    /**
        * Return a string suitable for display/debugging
        *
        * @return the name attribute as a default
  @@ -237,8 +305,8 @@
        */
       protected boolean isValid( String value )
       {
  -        if ( value != null
  -            && value.trim().equals( "" ) == false )
  +        if (    value != null
  +             && value.trim().equals("") == false )
           {
               return true;
           }
  
  
  
  1.11      +17 -1     maven/src/java/org/apache/maven/project/Resource.java
  
  Index: Resource.java
  ===================================================================
  RCS file: /home/cvs/maven/src/java/org/apache/maven/project/Resource.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Resource.java     27 Jul 2003 23:33:59 -0000      1.10
  +++ Resource.java     19 Aug 2003 04:29:25 -0000      1.11
  @@ -56,8 +56,12 @@
    * ====================================================================
    */
   
  +import org.apache.maven.MavenUtils;
  +
   import java.util.ArrayList;
   import java.util.List;
  +import java.io.File;
  +import java.io.IOException;
   
   /**
    * Represents a set of files in a single directory.
  @@ -170,7 +174,7 @@
       }
   
        /**
  -      * @param filtering specifies whether filtering is active or not
  +      * @param isFiltering specifies whether filtering is active or not
         */
        public void setFiltering( boolean isFiltering )
        {
  @@ -184,4 +188,16 @@
        {
                return this.isFiltering;
        }
  +
  +    /**
  +     * Resolve directory against a base directory if it is not already absolute.
  +     * @todo proper project marshaller should construct as such
  +     * @param basedir the base directory for relative paths
  +     * @throws IOException if canonical path fails
  +     */
  +    public void resolveDirectory( File basedir ) throws IOException
  +    {
  +        dir = MavenUtils.makeAbsolutePath( basedir, dir );
  +    }
  +
   }
  
  
  
  1.3       +11 -2     maven/src/java/org/apache/maven/project/ArtifactType.java
  
  
  
  

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

Reply via email to