You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2008/08/25 01:38:39 UTC

svn commit: r688584 - in /maven/components/trunk: ./ maven-core/src/main/java/org/apache/maven/execution/ maven-core/src/main/java/org/apache/maven/monitor/event/ maven-embedder/src/main/java/org/apache/maven/embedder/ maven-embedder/src/main/java/org/...

Author: jvanzyl
Date: Sun Aug 24 16:38:39 2008
New Revision: 688584

URL: http://svn.apache.org/viewvc?rev=688584&view=rev
Log:
reverting that commit, meant for my branch

Added:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/AbstractWorkspaceMonitor.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/MavenWorkspaceMonitor.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/OnStopWorkspaceMonitor.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/PerCallWorkspaceMonitor.java
    maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/embedder/MavenEmbedderEventingTest.java
Modified:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
    maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/Configuration.java
    maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/DefaultConfiguration.java
    maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
    maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java
    maven/components/trunk/maven-embedder/src/main/resources/META-INF/plexus/components.xml
    maven/components/trunk/pom.xml

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java?rev=688584&r1=688583&r2=688584&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java Sun Aug 24 16:38:39 2008
@@ -22,6 +22,7 @@
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.errors.CoreErrorReporter;
 import org.apache.maven.monitor.event.EventMonitor;
+import org.apache.maven.monitor.event.MavenWorkspaceMonitor;
 import org.apache.maven.profiles.ProfileManager;
 import org.apache.maven.profiles.activation.ProfileActivationContext;
 import org.apache.maven.project.DefaultProjectBuilderConfiguration;
@@ -101,6 +102,8 @@
 
     private List eventMonitors;
 
+    private MavenWorkspaceMonitor workspaceMonitor;
+
     private List activeProfiles;
 
     private List inactiveProfiles;
@@ -709,6 +712,17 @@
         return this;
     }
 
+    public MavenWorkspaceMonitor getWorkspaceMonitor()
+    {
+        return workspaceMonitor;
+    }
+
+    public MavenExecutionRequest setWorkspaceMonitor( MavenWorkspaceMonitor workspaceMonitor )
+    {
+        this.workspaceMonitor = workspaceMonitor;
+        return this;
+    }
+
     public Properties getUserProperties()
     {
         return userProperties;

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java?rev=688584&r1=688583&r2=688584&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java Sun Aug 24 16:38:39 2008
@@ -23,6 +23,7 @@
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.errors.CoreErrorReporter;
 import org.apache.maven.monitor.event.EventMonitor;
+import org.apache.maven.monitor.event.MavenWorkspaceMonitor;
 import org.apache.maven.profiles.ProfileManager;
 import org.apache.maven.profiles.activation.ProfileActivationContext;
 import org.apache.maven.project.ProjectBuilderConfiguration;
@@ -221,5 +222,8 @@
     MavenExecutionRequest setErrorReporter( CoreErrorReporter reporter );
     CoreErrorReporter getErrorReporter();
 
+    MavenExecutionRequest setWorkspaceMonitor( MavenWorkspaceMonitor workspaceMonitor );
+    MavenWorkspaceMonitor getWorkspaceMonitor();
+
     ProjectBuilderConfiguration getProjectBuildingConfiguration();
 }

Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/AbstractWorkspaceMonitor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/AbstractWorkspaceMonitor.java?rev=688584&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/AbstractWorkspaceMonitor.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/AbstractWorkspaceMonitor.java Sun Aug 24 16:38:39 2008
@@ -0,0 +1,25 @@
+package org.apache.maven.monitor.event;
+
+import org.apache.maven.workspace.MavenWorkspaceStore;
+
+public abstract class AbstractWorkspaceMonitor
+    extends AbstractEmbedderLifecycleMonitor
+    implements MavenWorkspaceMonitor
+{
+
+    private MavenWorkspaceStore workspaceManager;
+
+    public void setWorkspaceStore( MavenWorkspaceStore workspaceManager )
+    {
+        this.workspaceManager = workspaceManager;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.maven.embedder.lifecycle.MavenWorkspaceMonitor#clearCache()
+     */
+    public void clearCache()
+    {
+        workspaceManager.clear();
+    }
+
+}
\ No newline at end of file

Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/MavenWorkspaceMonitor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/MavenWorkspaceMonitor.java?rev=688584&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/MavenWorkspaceMonitor.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/MavenWorkspaceMonitor.java Sun Aug 24 16:38:39 2008
@@ -0,0 +1,13 @@
+package org.apache.maven.monitor.event;
+
+import org.apache.maven.workspace.MavenWorkspaceStore;
+
+public interface MavenWorkspaceMonitor
+    extends EventMonitor
+{
+
+    void setWorkspaceStore( MavenWorkspaceStore workspaceStore );
+
+    void clearCache();
+
+}

Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/OnStopWorkspaceMonitor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/OnStopWorkspaceMonitor.java?rev=688584&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/OnStopWorkspaceMonitor.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/OnStopWorkspaceMonitor.java Sun Aug 24 16:38:39 2008
@@ -0,0 +1,12 @@
+package org.apache.maven.monitor.event;
+
+public class OnStopWorkspaceMonitor
+    extends AbstractWorkspaceMonitor
+{
+
+    public void embedderStopped( long timestamp )
+    {
+        clearCache();
+    }
+
+}

Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/PerCallWorkspaceMonitor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/PerCallWorkspaceMonitor.java?rev=688584&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/PerCallWorkspaceMonitor.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/monitor/event/PerCallWorkspaceMonitor.java Sun Aug 24 16:38:39 2008
@@ -0,0 +1,23 @@
+package org.apache.maven.monitor.event;
+
+
+
+public class PerCallWorkspaceMonitor
+    extends AbstractWorkspaceMonitor
+{
+
+    public void embedderMethodEnded( String method,
+                                        long timestamp )
+    {
+        clearCache();
+    }
+
+    // Be double-sure that the cache is cleared when the embedder stops.
+    public void embedderStopped( long timestamp )
+    {
+        clearCache();
+    }
+
+
+
+}

Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/Configuration.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/Configuration.java?rev=688584&r1=688583&r2=688584&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/Configuration.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/Configuration.java Sun Aug 24 16:38:39 2008
@@ -20,6 +20,7 @@
 
 import org.apache.maven.errors.CoreErrorReporter;
 import org.apache.maven.monitor.event.EventMonitor;
+import org.apache.maven.monitor.event.MavenWorkspaceMonitor;
 import org.apache.maven.realm.MavenRealmManager;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.classworlds.ClassWorld;
@@ -151,4 +152,8 @@
     Configuration setEventMonitors( List eventMonitors );
 
     List getEventMonitors();
+
+    Configuration setWorkspaceMonitor( MavenWorkspaceMonitor workspaceMonitor );
+
+    MavenWorkspaceMonitor getWorkspaceMonitor();
 }

Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/DefaultConfiguration.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/DefaultConfiguration.java?rev=688584&r1=688583&r2=688584&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/DefaultConfiguration.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/DefaultConfiguration.java Sun Aug 24 16:38:39 2008
@@ -20,6 +20,7 @@
 
 import org.apache.maven.errors.CoreErrorReporter;
 import org.apache.maven.monitor.event.EventMonitor;
+import org.apache.maven.monitor.event.MavenWorkspaceMonitor;
 import org.apache.maven.realm.MavenRealmManager;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.classworlds.ClassWorld;
@@ -68,6 +69,8 @@
     /** List<EventMonitor>. */
     private List eventMonitors;
 
+    private MavenWorkspaceMonitor workspaceMonitor;
+
     /** Creates a new instance of DefaultConfiguration */
     public DefaultConfiguration()
     {
@@ -273,4 +276,15 @@
         this.eventMonitors = eventMonitors;
         return this;
     }
+
+    public MavenWorkspaceMonitor getWorkspaceMonitor()
+    {
+        return workspaceMonitor;
+    }
+
+    public Configuration setWorkspaceMonitor( MavenWorkspaceMonitor workspaceMonitor )
+    {
+        this.workspaceMonitor = workspaceMonitor;
+        return this;
+    }
 }

Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java?rev=688584&r1=688583&r2=688584&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java Sun Aug 24 16:38:39 2008
@@ -167,6 +167,9 @@
 
     private BuildPlanner buildPlanner;
 
+    // TODO: Remove this once we have better control over cache-cleaning.
+    private MavenWorkspaceStore workspaceStore;
+
     // ----------------------------------------------------------------------
     // Configuration
     // ----------------------------------------------------------------------
@@ -200,6 +203,11 @@
         return request;
     }
 
+    protected MavenWorkspaceStore getWorkspaceStore()
+    {
+        return workspaceStore;
+    }
+
     // ----------------------------------------------------------------------
     // Accessors
     // ----------------------------------------------------------------------
@@ -702,6 +710,8 @@
 
             buildPlanner = (BuildPlanner) container.lookup( BuildPlanner.class );
 
+            workspaceStore = (MavenWorkspaceStore) container.lookup( MavenWorkspaceStore.class );
+
             artifactHandlerManager = (ArtifactHandlerManager) container.lookup( ArtifactHandlerManager.ROLE );
 
             // This is temporary as we can probably cache a single request and use it for default values and

Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java?rev=688584&r1=688583&r2=688584&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java Sun Aug 24 16:38:39 2008
@@ -34,6 +34,8 @@
 import org.apache.maven.model.Repository;
 import org.apache.maven.monitor.event.DefaultEventMonitor;
 import org.apache.maven.monitor.event.EventMonitor;
+import org.apache.maven.monitor.event.MavenWorkspaceMonitor;
+import org.apache.maven.monitor.event.PerCallWorkspaceMonitor;
 import org.apache.maven.plugin.Mojo;
 import org.apache.maven.profiles.DefaultProfileManager;
 import org.apache.maven.profiles.ProfileManager;
@@ -94,6 +96,8 @@
 
     private WagonManager wagonManager;
 
+    private MavenWorkspaceStore workspaceManager;
+
     private MavenSettingsBuilder settingsBuilder;
 
     public MavenExecutionRequest populateDefaults( MavenExecutionRequest request,
@@ -102,6 +106,8 @@
     {
         eventing( request, configuration );
 
+        workspaceMonitor( request, configuration );
+
         reporter( request, configuration );
 
         executionProperties( request, configuration );
@@ -130,6 +136,44 @@
         return request;
     }
 
+    private void workspaceMonitor( MavenExecutionRequest request,
+                                   Configuration configuration )
+    {
+        MavenWorkspaceMonitor workspaceMonitor = request.getWorkspaceMonitor();
+
+        if ( workspaceMonitor == null )
+        {
+            workspaceMonitor = configuration.getWorkspaceMonitor();
+        }
+
+        List requestEventMonitors = request.getEventMonitors();
+        if ( ( requestEventMonitors != null ) && !requestEventMonitors.isEmpty() )
+        {
+            for ( Iterator it = requestEventMonitors.iterator(); it.hasNext(); )
+            {
+                Object monitor = it.next();
+                if ( monitor instanceof MavenWorkspaceMonitor )
+                {
+                    if ( workspaceMonitor == null )
+                    {
+                        workspaceMonitor = (MavenWorkspaceMonitor) monitor;
+                    }
+                    it.remove();
+                    break;
+                }
+            }
+        }
+
+        if ( workspaceMonitor == null )
+        {
+            workspaceMonitor = new PerCallWorkspaceMonitor();
+        }
+
+        workspaceMonitor.setWorkspaceStore( workspaceManager );
+
+        request.addEventMonitor( workspaceMonitor );
+    }
+
     private void reporter( MavenExecutionRequest request,
                            Configuration configuration )
     {

Modified: maven/components/trunk/maven-embedder/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/resources/META-INF/plexus/components.xml?rev=688584&r1=688583&r2=688584&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/trunk/maven-embedder/src/main/resources/META-INF/plexus/components.xml Sun Aug 24 16:38:39 2008
@@ -24,6 +24,9 @@
       <implementation>org.apache.maven.embedder.execution.DefaultMavenExecutionRequestPopulator</implementation>
       <requirements>
         <requirement>
+          <role>org.apache.maven.workspace.MavenWorkspaceStore</role>
+        </requirement>
+        <requirement>
           <role>org.apache.maven.artifact.manager.WagonManager</role>
           <role-hint>default</role-hint>
         </requirement>
@@ -72,5 +75,6 @@
         </httpHeaders>
       </configuration>
     </component>
+
   </components>
 </component-set>

Added: maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/embedder/MavenEmbedderEventingTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/embedder/MavenEmbedderEventingTest.java?rev=688584&view=auto
==============================================================================
--- maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/embedder/MavenEmbedderEventingTest.java (added)
+++ maven/components/trunk/maven-embedder/src/test/java/org/apache/maven/embedder/MavenEmbedderEventingTest.java Sun Aug 24 16:38:39 2008
@@ -0,0 +1,261 @@
+package org.apache.maven.embedder;
+
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.extension.ExtensionScanningException;
+import org.apache.maven.monitor.event.AbstractWorkspaceMonitor;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.reactor.MavenExecutionException;
+import org.apache.maven.workspace.MavenWorkspaceStore;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+
+import junit.framework.TestCase;
+
+public class MavenEmbedderEventingTest
+    extends TestCase
+{
+
+    protected String basedir;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        basedir = System.getProperty( "basedir" );
+
+        if ( basedir == null )
+        {
+            basedir = new File( "." ).getCanonicalPath();
+        }
+    }
+
+    public void testEmbedderInitializeAndStopEventsFired()
+        throws MavenEmbedderException
+    {
+        TestWorkspaceMonitor testWSMonitor = new TestWorkspaceMonitor();
+
+        Configuration config = new DefaultConfiguration();
+        config.setWorkspaceMonitor( testWSMonitor );
+
+        assertEquals( 0, testWSMonitor.initializeCaught );
+        assertEquals( 0, testWSMonitor.setManagerCaught );
+
+        MavenEmbedder embedder = new MavenEmbedder( config );
+
+        assertEquals( 1, testWSMonitor.initializeCaught );
+        assertEquals( 1, testWSMonitor.setManagerCaught );
+
+        assertEquals( 0, testWSMonitor.stopCaught );
+        assertEquals( 0, testWSMonitor.clearCaught );
+
+        assertSame( embedder.getWorkspaceStore(), testWSMonitor.workspaceManager );
+
+        embedder.stop();
+
+        assertEquals( 1, testWSMonitor.stopCaught );
+        assertEquals( 1, testWSMonitor.clearCaught );
+
+        assertEquals( 0, testWSMonitor.startMethodCaught );
+        assertEquals( 0, testWSMonitor.endMethodCaught );
+    }
+
+    public void testStartAndEndMethodEventsFiredOnSimpleReadProject()
+        throws IOException, MavenEmbedderException, ProjectBuildingException,
+        ExtensionScanningException, MavenExecutionException
+    {
+        EmbedderAndMonitor em = newEmbedder();
+
+        assertEquals( 0, em.monitor.startMethodCaught );
+        assertEquals( 0, em.monitor.endMethodCaught );
+
+        File dir = getFile( "simple-read-project" );
+        File pomFile = new File( dir, "pom.xml" );
+
+        em.embedder.readProject( pomFile );
+
+        assertEquals( 1, em.monitor.startMethodCaught );
+        assertEquals( 1, em.monitor.endMethodCaught );
+        assertEquals( 1, em.monitor.clearCaught );
+
+        assertSame( em.embedder.getWorkspaceStore(), em.monitor.workspaceManager );
+
+        em.embedder.stop();
+    }
+
+    public void testStartAndEndMethodEventsFiredOnReadWithDeps()
+        throws IOException, MavenEmbedderException, ProjectBuildingException,
+        ExtensionScanningException, MavenExecutionException
+    {
+        File dir = getFile( "read-with-deps" );
+        File pomFile = new File( dir, "pom.xml" );
+        File localRepoDir = new File( dir, "repo" );
+
+        EmbedderAndMonitor em = newEmbedder( localRepoDir );
+
+        assertEquals( 0, em.monitor.startMethodCaught );
+        assertEquals( 0, em.monitor.endMethodCaught );
+
+        em.embedder.readProject( pomFile );
+
+        assertEquals( 1, em.monitor.startMethodCaught );
+        assertEquals( 1, em.monitor.endMethodCaught );
+        assertEquals( 1, em.monitor.clearCaught );
+
+        assertSame( em.embedder.getWorkspaceStore(), em.monitor.workspaceManager );
+
+        em.embedder.stop();
+    }
+
+    public void testStartAndEndMethodEventsFiredOnExecute()
+        throws IOException, MavenEmbedderException, ProjectBuildingException,
+        ExtensionScanningException, MavenExecutionException
+    {
+        EmbedderAndMonitor em = newEmbedder();
+
+        assertEquals( 0, em.monitor.startMethodCaught );
+        assertEquals( 0, em.monitor.endMethodCaught );
+
+        File dir = getFile( "simple-read-project" );
+
+        MavenExecutionRequest request = new DefaultMavenExecutionRequest();
+        request.setGoals( Collections.singletonList( "clean" ) );
+        request.setBaseDirectory( dir );
+
+        em.embedder.execute( request );
+
+        assertEquals( 1, em.monitor.startMethodCaught );
+        assertEquals( 1, em.monitor.endMethodCaught );
+        assertEquals( 1, em.monitor.clearCaught );
+
+        assertSame( em.embedder.getWorkspaceStore(), em.monitor.workspaceManager );
+
+        em.embedder.stop();
+    }
+
+    private EmbedderAndMonitor newEmbedder()
+        throws MavenEmbedderException
+    {
+        return newEmbedder( null );
+    }
+
+    private EmbedderAndMonitor newEmbedder( File localRepoDir )
+        throws MavenEmbedderException
+    {
+        TestWorkspaceMonitor testWSMonitor = new TestWorkspaceMonitor();
+
+        Configuration config = new DefaultConfiguration();
+        config.setWorkspaceMonitor( testWSMonitor );
+        config.setMavenEmbedderLogger( new MavenEmbedderConsoleLogger() );
+
+        if ( localRepoDir != null )
+        {
+            config.setLocalRepository( localRepoDir );
+        }
+
+        return new EmbedderAndMonitor( new MavenEmbedder( config ), testWSMonitor );
+    }
+
+    private static final class EmbedderAndMonitor
+    {
+        private MavenEmbedder embedder;
+
+        private TestWorkspaceMonitor monitor;
+
+        private EmbedderAndMonitor( MavenEmbedder embedder,
+                                    TestWorkspaceMonitor monitor )
+        {
+            this.embedder = embedder;
+            this.monitor = monitor;
+        }
+    }
+
+    private File getFile( String path )
+        throws IOException
+    {
+        File testDirectory = new File( basedir, "src/test/eventing-projects/" + path );
+
+        System.out.println( "Test source dir: " + testDirectory );
+
+        File targetDirectory = new File( basedir, "target/eventing-projects/" + path );
+
+        System.out.println( "Test temp dir: " + targetDirectory );
+
+        targetDirectory.getParentFile().mkdirs();
+
+        FileUtils.copyDirectoryStructure( testDirectory, targetDirectory );
+
+        return targetDirectory;
+    }
+
+    private static final class TestWorkspaceMonitor
+        extends AbstractWorkspaceMonitor
+    {
+
+        private int initializeCaught = 0;
+
+        private int startMethodCaught = 0;
+
+        private int endMethodCaught = 0;
+
+        private int stopCaught = 0;
+
+        private int setManagerCaught = 0;
+
+        private int clearCaught = 0;
+
+        private MavenWorkspaceStore workspaceManager;
+
+        private boolean clearOnEndMethod = true;
+
+        private boolean clearOnStop = true;
+
+        public void embedderInitialized( long timestamp )
+        {
+            initializeCaught++;
+        }
+
+        public void embedderMethodEnded( String method,
+                                         long timestamp )
+        {
+            endMethodCaught++;
+            if ( clearOnEndMethod )
+            {
+                clearCache();
+            }
+        }
+
+        public void embedderMethodStarted( String method,
+                                           long timestamp )
+        {
+            startMethodCaught++;
+        }
+
+        public void embedderStopped( long timestamp )
+        {
+            stopCaught++;
+            if ( clearOnStop )
+            {
+                clearCache();
+            }
+        }
+
+        public void setWorkspaceStore( MavenWorkspaceStore workspaceManager )
+        {
+            setManagerCaught++;
+            this.workspaceManager = workspaceManager;
+            super.setWorkspaceStore( workspaceManager );
+        }
+
+        public void clearCache()
+        {
+            clearCaught++;
+            super.clearCache();
+        }
+
+    }
+}

Modified: maven/components/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/pom.xml?rev=688584&r1=688583&r2=688584&view=diff
==============================================================================
--- maven/components/trunk/pom.xml (original)
+++ maven/components/trunk/pom.xml Sun Aug 24 16:38:39 2008
@@ -256,6 +256,7 @@
     <module>maven-project</module>
     <module>maven-reporting-api</module>
     <module>maven-embedder</module>
+    <module>maven-workspace</module>
     <module>maven-toolchain</module>
   </modules>
   <properties>
@@ -266,7 +267,7 @@
     <doxiaVersion>1.0-alpha-9</doxiaVersion>
     <easyMockVersion>1.2_Java1.3</easyMockVersion>
     <junitVersion>3.8.1</junitVersion>
-    <plexusVersion>1.0-alpha-50-SNAPSHOT</plexusVersion>
+    <plexusVersion>1.0-alpha-48</plexusVersion>
     <plexusInteractivityVersion>1.0-alpha-6</plexusInteractivityVersion>
     <plexusInterpolationVersion>1.1</plexusInterpolationVersion>
     <plexusUtilsVersion>1.5.5</plexusUtilsVersion>