You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/02/29 23:58:06 UTC

svn commit: r632482 [2/2] - in /maven/components/trunk: ./ maven-core/ maven-core/src/main/java/org/apache/maven/execution/ maven-core/src/main/java/org/apache/maven/lifecycle/ maven-core/src/main/java/org/apache/maven/monitor/event/ maven-core/src/tes...

Added: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java (added)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java Fri Feb 29 14:58:00 2008
@@ -0,0 +1,234 @@
+package org.apache.maven.project.workspace;
+
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.model.Model;
+import org.apache.maven.profiles.DefaultProfileManager;
+import org.apache.maven.profiles.ProfileManager;
+import org.apache.maven.profiles.activation.DefaultProfileActivationContext;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.build.model.ModelAndFile;
+import org.apache.maven.project.build.model.ModelLineage;
+import org.apache.maven.project.build.model.ModelLineageBuilder;
+import org.apache.maven.workspace.MavenWorkspaceStore;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+public class ModelAndFileCachingTest
+    extends PlexusTestCase
+{
+    private static final String MY_PATH = ModelAndFileCachingTest.class.getName()
+                                                                       .replace( '.', '/' )
+                                          + ".class";
+
+    private ProjectWorkspace projectWorkspace;
+
+    private MavenWorkspaceStore workspaceStore;
+
+    private ModelLineageBuilder lineageBuilder;
+
+    private ArtifactRepositoryFactory repoFactory;
+
+    private ProfileManager profileManager;
+
+    private ArtifactRepository localRepo;
+
+    private ArtifactFactory artifactFactory;
+
+    private List dirsToDelete = new ArrayList();
+
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+        getContainer().getLoggerManager().setThresholds( Logger.LEVEL_DEBUG );
+
+        projectWorkspace = (ProjectWorkspace) lookup( ProjectWorkspace.class );
+        workspaceStore = (MavenWorkspaceStore) lookup( MavenWorkspaceStore.class );
+        lineageBuilder = (ModelLineageBuilder) lookup( ModelLineageBuilder.class );
+        repoFactory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.class );
+        artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.class );
+
+        File localRepoDir = File.createTempFile( "local-repo.", ".tmp" );
+        localRepoDir.delete();
+        localRepoDir.mkdirs();
+
+        dirsToDelete.add( localRepoDir );
+
+        localRepo = repoFactory.createLocalRepository( localRepoDir );
+        profileManager = new DefaultProfileManager(
+                                                    getContainer(),
+                                                    new DefaultProfileActivationContext(
+                                                                                         System.getProperties(),
+                                                                                         true ) );
+    }
+
+    public void tearDown()
+        throws Exception
+    {
+        workspaceStore.clear();
+
+        if ( !dirsToDelete.isEmpty() )
+        {
+            for ( Iterator it = dirsToDelete.iterator(); it.hasNext(); )
+            {
+                File dir = (File) it.next();
+                try
+                {
+                    FileUtils.deleteDirectory( dir );
+                }
+                catch ( IOException e )
+                {
+                    // ignore.
+                }
+            }
+        }
+
+        super.tearDown();
+    }
+
+    public void testResolveParentPom_PreferCachedInstance()
+        throws IOException, ProjectBuildingException
+    {
+        File childPomFile = getFile( "resolveParentPom/pom.xml" );
+
+        String gid = "tests";
+        String aid = "resolve-parent-pom-parent";
+        String ver = "1";
+
+        ModelAndFile maf = newModelAndFile( gid, aid, ver );
+        projectWorkspace.storeModelAndFile( maf );
+
+        ModelLineage lineage = lineageBuilder.buildModelLineage( childPomFile,
+                                                                 localRepo,
+                                                                 Collections.EMPTY_LIST,
+                                                                 profileManager,
+                                                                 false,
+                                                                 false );
+
+        assertSame( maf.getModel(), lineage.getDeepestAncestorModel() );
+    }
+
+    public void testResolveParentPom_StoreByFileAndGAVIfUncached()
+        throws IOException, ProjectBuildingException
+    {
+        File childPomFile = getFile( "resolveParentPom/childAndParent/child/pom.xml" );
+        File parentPomFile = new File( childPomFile.getParentFile().getParentFile(), "pom.xml" );
+
+        String gid = "tests";
+        String aid = "childAndParent-parent";
+        String ver = "1";
+
+        ModelLineage lineage = lineageBuilder.buildModelLineage( childPomFile,
+                                                                 localRepo,
+                                                                 Collections.EMPTY_LIST,
+                                                                 profileManager,
+                                                                 false,
+                                                                 false );
+
+        assertEquals( parentPomFile.getCanonicalPath(), lineage.getDeepestAncestorFile()
+                                                               .getCanonicalPath() );
+
+        ModelAndFile maf1 = projectWorkspace.getModelAndFile( gid, aid, ver );
+        assertNotNull( maf1 );
+        assertSame( maf1.getModel(), lineage.getDeepestAncestorModel() );
+
+        ModelAndFile maf2 = projectWorkspace.getModelAndFile( parentPomFile );
+        assertNotNull( maf2 );
+        assertSame( maf2.getModel(), lineage.getDeepestAncestorModel() );
+    }
+
+    public void testReadModel_PreferModelInstanceCachedByFile()
+        throws IOException, ProjectBuildingException
+    {
+        File pomFile = new File( "test/pom.xml" );
+
+        String gid = "tests";
+        String aid = "read-model";
+        String ver = "1";
+
+        ModelAndFile maf = newModelAndFile( gid, aid, ver, pomFile );
+        projectWorkspace.storeModelAndFile( maf );
+
+        ModelLineage lineage = lineageBuilder.buildModelLineage( pomFile,
+                                                                 localRepo,
+                                                                 Collections.EMPTY_LIST,
+                                                                 profileManager,
+                                                                 false,
+                                                                 false );
+
+        assertSame( maf.getModel(), lineage.getOriginatingModel() );
+    }
+
+    public void testBuildModelLineage_StoreByFileAndGAVIfUncached()
+        throws IOException, ProjectBuildingException
+    {
+        File pomFile = getFile( "buildModelLineage/pom.xml" );
+
+        String gid = "tests";
+        String aid = "build-model-lineage";
+        String ver = "1";
+
+        ModelLineage lineage = lineageBuilder.buildModelLineage( pomFile,
+                                                                 localRepo,
+                                                                 Collections.EMPTY_LIST,
+                                                                 profileManager,
+                                                                 false,
+                                                                 false );
+
+        assertEquals( pomFile.getCanonicalPath(), lineage.getOriginatingPOMFile()
+                                                               .getCanonicalPath() );
+
+        ModelAndFile maf1 = projectWorkspace.getModelAndFile( gid, aid, ver );
+        assertNotNull( maf1 );
+        assertSame( maf1.getModel(), lineage.getOriginatingModel() );
+
+        ModelAndFile maf2 = projectWorkspace.getModelAndFile( pomFile );
+        assertNotNull( maf2 );
+        assertSame( maf2.getModel(), lineage.getOriginatingModel() );
+    }
+
+    private ModelAndFile newModelAndFile( String gid,
+                                          String aid,
+                                          String ver )
+        throws IOException
+    {
+        return newModelAndFile( gid, aid, ver, File.createTempFile( "model-and-file.", ".tmp" ) );
+    }
+
+    private ModelAndFile newModelAndFile( String gid,
+                                          String aid,
+                                          String ver,
+                                          File file )
+    {
+        Model model = new Model();
+        model.setGroupId( gid );
+        model.setArtifactId( aid );
+        model.setVersion( ver );
+
+        ModelAndFile maf = new ModelAndFile( model, file, false );
+
+        return maf;
+    }
+
+    private File getFile( String path )
+    {
+        ClassLoader cloader = Thread.currentThread().getContextClassLoader();
+        URL myRes = cloader.getResource( MY_PATH );
+
+        File myFile = new File( myRes.getPath() );
+
+        return new File( myFile.getParentFile(), path );
+    }
+
+}

Propchange: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ProjectCachingTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ProjectCachingTest.java?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ProjectCachingTest.java (added)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ProjectCachingTest.java Fri Feb 29 14:58:00 2008
@@ -0,0 +1,286 @@
+package org.apache.maven.project.workspace;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.model.Model;
+import org.apache.maven.profiles.DefaultProfileManager;
+import org.apache.maven.profiles.ProfileManager;
+import org.apache.maven.profiles.activation.DefaultProfileActivationContext;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.build.model.ModelLineageBuilder;
+import org.apache.maven.workspace.MavenWorkspaceStore;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+// TODO: Add conversion/tests for modelAndFileCache -> projectWorkspace stuff in simple cases.
+// TODO: Add tests for project parents from cache (using model-and-file stuff, maybe?)
+public class ProjectCachingTest
+    extends PlexusTestCase
+{
+
+    private static final String MY_PATH = ProjectCachingTest.class.getName().replace( '.', '/' )
+                                          + ".class";
+
+    private ProjectWorkspace projectWorkspace;
+
+    private MavenWorkspaceStore workspaceStore;
+
+    private MavenProjectBuilder projectBuilder;
+
+    private ModelLineageBuilder lineageBuilder;
+
+    private ArtifactRepositoryFactory repoFactory;
+
+    private ProfileManager profileManager;
+
+    private ArtifactRepository localRepo;
+
+    private ArtifactFactory artifactFactory;
+
+    private List dirsToDelete = new ArrayList();
+
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+        getContainer().getLoggerManager().setThresholds( Logger.LEVEL_DEBUG );
+
+        projectWorkspace = (ProjectWorkspace) lookup( ProjectWorkspace.class );
+        workspaceStore = (MavenWorkspaceStore) lookup( MavenWorkspaceStore.class );
+        projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.class );
+        lineageBuilder = (ModelLineageBuilder) lookup( ModelLineageBuilder.class );
+        repoFactory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.class );
+        artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.class );
+
+        File localRepoDir = File.createTempFile( "local-repo.", ".tmp" );
+        localRepoDir.delete();
+        localRepoDir.mkdirs();
+
+        dirsToDelete.add( localRepoDir );
+
+        localRepo = repoFactory.createLocalRepository( localRepoDir );
+        profileManager = new DefaultProfileManager(
+                                                    getContainer(),
+                                                    new DefaultProfileActivationContext(
+                                                                                         System.getProperties(),
+                                                                                         true ) );
+    }
+
+    public void tearDown()
+        throws Exception
+    {
+        workspaceStore.clear();
+
+        if ( !dirsToDelete.isEmpty() )
+        {
+            for ( Iterator it = dirsToDelete.iterator(); it.hasNext(); )
+            {
+                File dir = (File) it.next();
+                try
+                {
+                    FileUtils.deleteDirectory( dir );
+                }
+                catch ( IOException e )
+                {
+                    // ignore.
+                }
+            }
+        }
+
+        super.tearDown();
+    }
+
+    public void testBuildFromRepository_PreferCachedProject()
+        throws ProjectBuildingException
+    {
+        String gid = "org.apache.maven.tests";
+        String aid = "buildFromRepo-checkCacheFirst";
+        String ver = "1";
+
+        MavenProject project = newProject( gid, aid, ver );
+        projectWorkspace.storeProjectByCoordinate( project );
+
+        Artifact artifact = artifactFactory.createProjectArtifact( gid, aid, ver );
+
+        MavenProject result = projectBuilder.buildFromRepository( artifact,
+                                                                  Collections.EMPTY_LIST,
+                                                                  localRepo );
+
+        assertSame( project, result );
+    }
+
+    public void testBuildFromRepository_StoreProjectByCoordOnlyIfUncached()
+        throws ProjectBuildingException, InvalidRepositoryException
+    {
+        File lrDir = getFile( "buildFromRepo" );
+        File pomFile = new File( lrDir, "tests/project-caching/1/project-caching-1.pom" );
+
+        String gid = "tests";
+        String aid = "project-caching";
+        String ver = "1";
+
+        Artifact artifact = artifactFactory.createProjectArtifact( gid, aid, ver );
+
+        ArtifactRepository localRepo = repoFactory.createLocalRepository( lrDir );
+
+        MavenProject project = projectBuilder.buildFromRepository( artifact,
+                                                                   Collections.EMPTY_LIST,
+                                                                   localRepo );
+
+        MavenProject r1 = projectWorkspace.getProject( pomFile );
+
+        MavenProject r2 = projectWorkspace.getProject( gid, aid, ver );
+
+        assertNull( r1 );
+
+        assertSame( project, r2 );
+    }
+
+    public void testBuildFromRepository_DontCheckCacheForRELEASEMetaVersion()
+        throws ProjectBuildingException, InvalidRepositoryException
+    {
+        File lrDir = getFile( "buildFromRepo" );
+        File pomFile = new File( lrDir, "tests/project-caching/1/project-caching-1.pom" );
+
+        String gid = "tests";
+        String aid = "project-caching";
+        String ver = "1";
+
+        MavenProject seed = newProject( gid, aid, ver );
+
+        Artifact artifact = artifactFactory.createProjectArtifact( gid,
+                                                                   aid,
+                                                                   Artifact.RELEASE_VERSION );
+
+        ArtifactRepository localRepo = repoFactory.createLocalRepository( lrDir );
+
+        MavenProject project = projectBuilder.buildFromRepository( artifact,
+                                                                   Collections.EMPTY_LIST,
+                                                                   localRepo );
+
+        assertNotSame( seed, project );
+
+        MavenProject r1 = projectWorkspace.getProject( pomFile );
+
+        MavenProject r2 = projectWorkspace.getProject( gid, aid, ver );
+
+        assertNull( r1 );
+
+        assertSame( project, r2 );
+    }
+
+    public void testBuildFromRepository_DontCheckCacheForLATESTMetaVersion()
+        throws ProjectBuildingException, InvalidRepositoryException
+    {
+        File lrDir = getFile( "buildFromRepo" );
+        File pomFile = new File( lrDir, "tests/project-caching/1/project-caching-1.pom" );
+
+        String gid = "tests";
+        String aid = "project-caching";
+        String ver = "1";
+
+        MavenProject seed = newProject( gid, aid, ver );
+        projectWorkspace.storeProjectByCoordinate( seed );
+
+        Artifact artifact = artifactFactory.createProjectArtifact( gid,
+                                                                   aid,
+                                                                   Artifact.RELEASE_VERSION );
+
+        ArtifactRepository localRepo = repoFactory.createLocalRepository( lrDir );
+
+        MavenProject project = projectBuilder.buildFromRepository( artifact,
+                                                                   Collections.EMPTY_LIST,
+                                                                   localRepo );
+
+        assertNotSame( seed, project );
+
+        MavenProject r1 = projectWorkspace.getProject( pomFile );
+
+        MavenProject r2 = projectWorkspace.getProject( gid, aid, ver );
+
+        assertNull( r1 );
+
+        assertSame( project, r2 );
+    }
+
+    public void testBuildFromFile_PreferProjectCachedByFile()
+        throws ProjectBuildingException, InvalidRepositoryException
+    {
+        File pomFile = getFile( "buildFromFile/pom.xml" );
+
+        String gid = "org.apache.maven.tests";
+        String aid = "build-from-file";
+        String ver = "1";
+
+        MavenProject seed = newProject( gid, aid, ver );
+        seed.setFile( pomFile );
+
+        projectWorkspace.storeProjectByFile( seed );
+
+        MavenProject project = projectBuilder.build( pomFile, localRepo, profileManager );
+
+        assertSame( seed, project );
+
+        assertNull( projectWorkspace.getProject( gid, aid, ver ) );
+    }
+
+    public void testBuildFromFile_StoreByCoordAndFileIfUncached()
+        throws ProjectBuildingException, InvalidRepositoryException
+    {
+        File pomFile = getFile( "buildFromFile/pom.xml" );
+
+        String gid = "org.apache.maven.tests";
+        String aid = "build-from-file";
+        String ver = "1";
+
+        assertNull( projectWorkspace.getProject( pomFile ) );
+        assertNull( projectWorkspace.getProject( gid, aid, ver ) );
+
+        MavenProject project = projectBuilder.build( pomFile, localRepo, profileManager );
+
+        MavenProject byFile = projectWorkspace.getProject( pomFile );
+        MavenProject byCoord = projectWorkspace.getProject( gid, aid, ver );
+
+        assertSame( project, byFile );
+        assertSame( project, byCoord );
+    }
+
+    private MavenProject newProject( String gid,
+                                     String aid,
+                                     String ver )
+    {
+        Model model = new Model();
+        model.setGroupId( gid );
+        model.setArtifactId( aid );
+        model.setVersion( ver );
+
+        MavenProject project = new MavenProject( model );
+
+        return project;
+    }
+
+    private File getFile( String path )
+    {
+        ClassLoader cloader = Thread.currentThread().getContextClassLoader();
+        URL myRes = cloader.getResource( MY_PATH );
+
+        File myFile = new File( myRes.getPath() );
+
+        return new File( myFile.getParentFile(), path );
+    }
+
+}

Propchange: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ProjectCachingTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ProjectCachingTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml?rev=632482&r1=632481&r2=632482&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml (original)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml Fri Feb 29 14:58:00 2008
@@ -81,6 +81,9 @@
       <implementation>org.apache.maven.project.TestProjectBuilder</implementation>
       <requirements>
         <requirement>
+          <role>org.apache.maven.project.workspace.ProjectWorkspace</role>
+        </requirement>
+        <requirement>
           <role>org.apache.maven.project.build.model.ModelLineageBuilder</role>
           <role-hint>default</role-hint>
         </requirement>

Modified: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml?rev=632482&r1=632481&r2=632482&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml (original)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml Fri Feb 29 14:58:00 2008
@@ -79,6 +79,9 @@
       <implementation>org.apache.maven.project.TestProjectBuilder</implementation>
       <requirements>
         <requirement>
+          <role>org.apache.maven.project.workspace.ProjectWorkspace</role>
+        </requirement>
+        <requirement>
           <role>org.apache.maven.project.build.model.ModelLineageBuilder</role>
           <role-hint>default</role-hint>
         </requirement>

Added: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml (added)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml Fri Feb 29 14:58:00 2008
@@ -0,0 +1,8 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  
+  <groupId>org.apache.maven.tests</groupId>
+  <artifactId>build-from-file</artifactId>
+  <version>1</version>
+  
+</project>
\ No newline at end of file

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom (added)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom Fri Feb 29 14:58:00 2008
@@ -0,0 +1,8 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  
+  <groupId>tests</groupId>
+  <artifactId>project-caching</artifactId>
+  <version>1</version>
+  
+</project>
\ No newline at end of file

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml (added)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml Fri Feb 29 14:58:00 2008
@@ -0,0 +1,11 @@
+<metadata>
+  <groupId>tests</groupId>
+  <artifactId>project-caching</artifactId>
+  <versioning>
+    <release>1</release>
+    <latest>1</latest>
+    <versions>
+      <version>1</version>
+    </versions>
+  </versioning>
+</metadata>
\ No newline at end of file

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml (added)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml Fri Feb 29 14:58:00 2008
@@ -0,0 +1,7 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  
+  <groupId>tests</groupId>
+  <artifactId>build-model-lineage</artifactId>
+  <version>1</version>
+</project>
\ No newline at end of file

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml (added)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml Fri Feb 29 14:58:00 2008
@@ -0,0 +1,10 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>tests</groupId>
+    <artifactId>childAndParent-parent</artifactId>
+    <version>1</version>
+  </parent>
+  
+  <artifactId>childAndParent-child</artifactId>
+</project>
\ No newline at end of file

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml (added)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml Fri Feb 29 14:58:00 2008
@@ -0,0 +1,7 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  
+  <groupId>tests</groupId>
+  <artifactId>childAndParent-parent</artifactId>
+  <version>1</version>
+</project>
\ No newline at end of file

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml (added)
+++ maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml Fri Feb 29 14:58:00 2008
@@ -0,0 +1,10 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>tests</groupId>
+    <artifactId>resolve-parent-pom-parent</artifactId>
+    <version>1</version>
+  </parent>
+  
+  <artifactId>resolve-parent-pom</artifactId>
+</project>
\ No newline at end of file

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-workspace/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-workspace/pom.xml?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-workspace/pom.xml (added)
+++ maven/components/trunk/maven-workspace/pom.xml Fri Feb 29 14:58:00 2008
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+  <parent>
+    <artifactId>maven</artifactId>
+    <groupId>org.apache.maven</groupId>
+    <version>2.1-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>maven-workspace</artifactId>
+  <name>maven-workspace</name>
+  
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-container-default</artifactId>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file

Propchange: maven/components/trunk/maven-workspace/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-workspace/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/DefaultMavenWorkspaceStore.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/DefaultMavenWorkspaceStore.java?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/DefaultMavenWorkspaceStore.java (added)
+++ maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/DefaultMavenWorkspaceStore.java Fri Feb 29 14:58:00 2008
@@ -0,0 +1,66 @@
+package org.apache.maven.workspace;
+
+import org.codehaus.plexus.logging.LogEnabled;
+import org.codehaus.plexus.logging.Logger;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+public class DefaultMavenWorkspaceStore
+    implements MavenWorkspaceStore, LogEnabled
+{
+
+    private Map caches = new HashMap();
+//    private Logger logger;
+
+    public void clear()
+    {
+        for ( Iterator it = caches.entrySet().iterator(); it.hasNext(); )
+        {
+            Map.Entry entry = (Map.Entry) it.next();
+//            String cacheType = (String) entry.getKey();
+            Map cache = (Map) entry.getValue();
+
+//            getLogger().debug( "Clearing workspace cache for: " + cacheType + " (" + cache.size() + " entries)" );
+            cache.clear();
+        }
+    }
+
+    public Map getWorkspaceCache( String cacheType )
+    {
+        Map result = (Map) caches.get( cacheType );
+
+        if ( result == null )
+        {
+            result = new HashMap();
+            initWorkspaceCache( cacheType, result );
+        }
+
+//        getLogger().debug( "Retrieving workspace cache for: " + cacheType + " (" + result.size() + " entries)" );
+        return result;
+    }
+
+    public void initWorkspaceCache( String cacheType,
+                           Map cache )
+    {
+//        getLogger().debug( "Initializing workspace cache for: " + cacheType + " (" + cache.size() + " entries)" );
+        caches.put( cacheType, cache );
+    }
+
+//    protected Logger getLogger()
+//    {
+//        if ( logger == null )
+//        {
+//            logger = new ConsoleLogger ( Logger.LEVEL_INFO, "internal" );
+//        }
+//
+//        return logger;
+//    }
+
+    public void enableLogging( Logger logger )
+    {
+//        this.logger = logger;
+    }
+
+}

Propchange: maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/DefaultMavenWorkspaceStore.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/DefaultMavenWorkspaceStore.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/MavenWorkspaceStore.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/MavenWorkspaceStore.java?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/MavenWorkspaceStore.java (added)
+++ maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/MavenWorkspaceStore.java Fri Feb 29 14:58:00 2008
@@ -0,0 +1,14 @@
+package org.apache.maven.workspace;
+
+import java.util.Map;
+
+public interface MavenWorkspaceStore
+{
+
+    Map getWorkspaceCache( String cacheType );
+
+    void initWorkspaceCache( String cacheType, Map cache );
+
+    void clear();
+
+}

Propchange: maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/MavenWorkspaceStore.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-workspace/src/main/java/org/apache/maven/workspace/MavenWorkspaceStore.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-workspace/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-workspace/src/main/resources/META-INF/plexus/components.xml?rev=632482&view=auto
==============================================================================
--- maven/components/trunk/maven-workspace/src/main/resources/META-INF/plexus/components.xml (added)
+++ maven/components/trunk/maven-workspace/src/main/resources/META-INF/plexus/components.xml Fri Feb 29 14:58:00 2008
@@ -0,0 +1,9 @@
+<component-set>
+  <components>
+    <component>
+      <role>org.apache.maven.workspace.MavenWorkspaceStore</role>
+      <role-hint>default</role-hint>
+      <implementation>org.apache.maven.workspace.DefaultMavenWorkspaceStore</implementation>
+    </component>
+  </components>
+</component-set>
\ No newline at end of file

Propchange: maven/components/trunk/maven-workspace/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-workspace/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/pom.xml?rev=632482&r1=632481&r2=632482&view=diff
==============================================================================
--- maven/components/trunk/pom.xml (original)
+++ maven/components/trunk/pom.xml Fri Feb 29 14:58:00 2008
@@ -209,6 +209,7 @@
     <module>maven-project</module>
     <module>maven-reporting-api</module>
     <module>maven-embedder</module>
+    <module>maven-workspace</module>
   </modules>
 
   <properties>