Author: jvanzyl
Date: Thu Feb 23 07:11:48 2006
New Revision: 380140

URL: http://svn.apache.org/viewcvs?rev=380140&view=rev
Log:
embedder refactoring

Added:
    maven/components/branches/maven-embedder-refactor/
      - copied from r379578, maven/components/trunk/
    
maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
      - copied, changed from r379579, 
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
    
maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder2.java
      - copied unchanged from r379670, 
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder2.java
Modified:
    
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
    
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
    
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
    
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java

Modified: 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL: 
http://svn.apache.org/viewcvs/maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=380140&r1=379578&r2=380140&view=diff
==============================================================================
--- 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
 (original)
+++ 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
 Thu Feb 23 07:11:48 2006
@@ -28,7 +28,6 @@
 import org.apache.maven.execution.RuntimeInformation;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.lifecycle.LifecycleExecutor;
-import org.apache.maven.model.Profile;
 import org.apache.maven.monitor.event.EventDispatcher;
 import org.apache.maven.monitor.event.MavenEvents;
 import org.apache.maven.profiles.ProfileManager;
@@ -42,7 +41,6 @@
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Server;
 import org.apache.maven.settings.Settings;
-import org.apache.maven.settings.SettingsUtils;
 import org.apache.maven.usability.SystemWarnings;
 import org.apache.maven.usability.diagnostics.ErrorDiagnostics;
 import org.codehaus.plexus.PlexusConstants;

Modified: 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
URL: 
http://svn.apache.org/viewcvs/maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java?rev=380140&r1=379578&r2=380140&view=diff
==============================================================================
--- 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
 (original)
+++ 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
 Thu Feb 23 07:11:48 2006
@@ -24,7 +24,7 @@
 
 /**
  * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
- * @version $Id:$
+ * @version $Id$
  * @todo this should probably be a component with some dynamic control of 
filtering
  */
 public class MavenArtifactFilterManager

Modified: 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
URL: 
http://svn.apache.org/viewcvs/maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java?rev=380140&r1=379578&r2=380140&view=diff
==============================================================================
--- 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
 (original)
+++ 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/cli/MavenCli.java
 Thu Feb 23 07:11:48 2006
@@ -44,9 +44,9 @@
 import org.apache.maven.settings.MavenSettingsBuilder;
 import org.apache.maven.settings.RuntimeInfo;
 import org.apache.maven.settings.Settings;
+import org.apache.maven.wagon.events.TransferListener;
 import org.codehaus.classworlds.ClassWorld;
 import org.codehaus.plexus.PlexusContainerException;
-import 
org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
 import 
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.embed.Embedder;
 import org.codehaus.plexus.logging.Logger;
@@ -56,11 +56,13 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Properties;
 import java.util.StringTokenizer;
 
 /**
- * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
+ * @author jason van zyl
  * @version $Id$
  * @noinspection UseOfSystemOutOrSystemErr,ACCESS_STATIC_VIA_INSTANCE
  */
@@ -119,7 +121,7 @@
             cliManager.displayHelp();
             return 0;
         }
-        
+
         if ( commandLine.hasOption( CLIManager.VERSION ) )
         {
             showVersion();
@@ -131,8 +133,6 @@
             showVersion();
         }
 
-        EventDispatcher eventDispatcher = new DefaultEventDispatcher();
-
         // 
----------------------------------------------------------------------
         // Now that we have everything that we need we will fire up plexus and
         // bring the maven component to life for use.
@@ -158,42 +158,113 @@
 
         Properties executionProperties = getExecutionProperties( commandLine );
 
-        Settings settings;
+        // 
----------------------------------------------------------------------
+        //
+        // 
----------------------------------------------------------------------
 
-        try
+        String userSettingsPath = null;
+
+        if ( commandLine.hasOption( CLIManager.ALTERNATE_USER_SETTINGS ) )
         {
-            settings = buildSettings( commandLine );
+            userSettingsPath = commandLine.getOptionValue( 
CLIManager.ALTERNATE_USER_SETTINGS );
         }
-        catch ( SettingsConfigurationException e )
-        {
-            showError( "Error reading settings.xml: " + e.getMessage(), e, 
showErrors );
 
-            return 1;
-        }
-        catch ( ComponentLookupException e )
+        boolean interactive = true;
+
+        if ( commandLine.hasOption( CLIManager.BATCH_MODE ) )
         {
-            showFatalError( "Unable to read settings.xml", e, showErrors );
+            interactive = false;
+        }
 
-            return 1;
+        boolean usePluginRegistry = true;
+
+        if ( commandLine.hasOption( CLIManager.SUPPRESS_PLUGIN_REGISTRY ) )
+        {
+            usePluginRegistry = false;
         }
 
-        Maven maven = null;
+        Boolean pluginUpdateOverride = Boolean.FALSE;
 
-        MavenExecutionRequest request = null;
+        if ( commandLine.hasOption( CLIManager.FORCE_PLUGIN_UPDATES ) ||
+            commandLine.hasOption( CLIManager.FORCE_PLUGIN_UPDATES2 ) )
+        {
+            pluginUpdateOverride = Boolean.TRUE;
+        }
+        else if ( commandLine.hasOption( CLIManager.SUPPRESS_PLUGIN_UPDATES ) )
+        {
+            pluginUpdateOverride = Boolean.FALSE;
+        }
 
-        LoggerManager loggerManager = null;
+        // 
----------------------------------------------------------------------
+        //
+        // 
----------------------------------------------------------------------
 
         try
         {
-            // logger must be created first
-            loggerManager = (LoggerManager) embedder.lookup( 
LoggerManager.ROLE );
+            List goals = commandLine.getArgList();
 
-            if ( debug )
+            boolean recursive = true;
+
+            String failureType = null;
+
+            if ( commandLine.hasOption( CLIManager.NON_RECURSIVE ) )
             {
-                loggerManager.setThreshold( Logger.LEVEL_DEBUG );
+                recursive = false;
             }
 
-            ProfileManager profileManager = new DefaultProfileManager( 
embedder.getContainer() );
+            if ( commandLine.hasOption( CLIManager.FAIL_FAST ) )
+            {
+                failureType = ReactorManager.FAIL_FAST;
+            }
+            else if ( commandLine.hasOption( CLIManager.FAIL_AT_END ) )
+            {
+                failureType = ReactorManager.FAIL_AT_END;
+            }
+            else if ( commandLine.hasOption( CLIManager.FAIL_NEVER ) )
+            {
+                failureType = ReactorManager.FAIL_NEVER;
+            }
+
+            boolean offline = false;
+
+            if ( commandLine.hasOption( CLIManager.OFFLINE ) )
+            {
+                offline = true;
+            }
+
+            boolean updateSnapshots = false;
+
+            if ( commandLine.hasOption( CLIManager.UPDATE_SNAPSHOTS ) )
+            {
+                updateSnapshots = true;
+            }
+
+            String globalChecksumPolicy = null;
+
+            if ( commandLine.hasOption( CLIManager.CHECKSUM_FAILURE_POLICY ) )
+            {
+                // todo; log
+                System.out.println( "+ Enabling strict checksum verification 
on all artifact downloads." );
+
+                globalChecksumPolicy = 
ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL;
+            }
+            else if ( commandLine.hasOption( 
CLIManager.CHECKSUM_WARNING_POLICY ) )
+            {
+                // todo: log
+                System.out.println( "+ Disabling strict checksum verification 
on all artifact downloads." );
+
+                globalChecksumPolicy = 
ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
+            }
+
+            File baseDirectory = new File( System.getProperty( "user.dir" ) );
+
+            // 
----------------------------------------------------------------------
+            // Profile Activation
+            // 
----------------------------------------------------------------------
+
+            List activeProfiles = new ArrayList();
+
+            List inactiveProfiles = new ArrayList();
 
             if ( commandLine.hasOption( CLIManager.ACTIVATE_PROFILES ) )
             {
@@ -207,143 +278,120 @@
 
                     if ( profileAction.startsWith( "-" ) )
                     {
-                        profileManager.explicitlyDeactivate( 
profileAction.substring( 1 ) );
+                        activeProfiles.add( profileAction.substring( 1 ) );
                     }
                     else if ( profileAction.startsWith( "+" ) )
                     {
-                        profileManager.explicitlyActivate( 
profileAction.substring( 1 ) );
+                        inactiveProfiles.add( profileAction.substring( 1 ) );
                     }
                     else
                     {
                         // TODO: deprecate this eventually!
-                        profileManager.explicitlyActivate( profileAction );
+                        activeProfiles.add( profileAction );
                     }
                 }
             }
 
-            request = createRequest( commandLine, settings, eventDispatcher, 
loggerManager, profileManager,
-                                     executionProperties, showErrors );
+            TransferListener transferListener;
 
-            setProjectFileOptions( commandLine, request );
+            if ( interactive )
+            {
+                transferListener = new ConsoleDownloadMonitor();
+            }
+            else
+            {
+                transferListener = new BatchModeDownloadMonitor();
+            }
 
-            maven = createMavenInstance( settings.isInteractiveMode() );
-        }
-        catch ( ComponentLookupException e )
-        {
-            showFatalError( "Unable to configure the Maven application", e, 
showErrors );
+            boolean reactorActive = false;
 
-            return 1;
-        }
-        finally
-        {
-            if ( loggerManager != null )
+            if ( commandLine.hasOption( CLIManager.REACTOR ) )
             {
-                try
-                {
-                    embedder.release( loggerManager );
-                }
-                catch ( ComponentLifecycleException e )
-                {
-                    showFatalError( "Error releasing logging manager", e, 
showErrors );
-                }
+                reactorActive = true;
             }
-        }
 
-        try
-        {
-            maven.execute( request );
-        }
-        catch ( MavenExecutionException e )
-        {
-            return 1;
-        }
+            String alternatePomFile = null;
 
-        return 0;
-    }
+            if ( commandLine.hasOption( CLIManager.ALTERNATE_POM_FILE ) )
+            {
+                alternatePomFile = commandLine.getOptionValue( 
CLIManager.ALTERNATE_POM_FILE );
+            }
 
-    private static Settings buildSettings( CommandLine commandLine )
-        throws ComponentLookupException, SettingsConfigurationException
-    {
-        String userSettingsPath = null;
+            // 
----------------------------------------------------------------------
+            // From here we are CLI free
+            // 
----------------------------------------------------------------------
+
+            // We have a general problem with plexus components that are 
singletons in that they use
+            // the same logger for their lifespan. This is not good in that 
many requests may be fired
+            // off and the singleton plexus component will continue to funnel 
their output to the same
+            // logger. We need to be able to swap the logger.
 
-        if ( commandLine.hasOption( CLIManager.ALTERNATE_USER_SETTINGS ) )
-        {
-            userSettingsPath = commandLine.getOptionValue( 
CLIManager.ALTERNATE_USER_SETTINGS );
-        }
+            LoggerManager loggerManager = (LoggerManager) embedder.lookup( 
LoggerManager.ROLE );
 
-        Settings settings = null;
+            if ( debug )
+            {
+                loggerManager.setThreshold( Logger.LEVEL_DEBUG );
+            }
 
-        MavenSettingsBuilder settingsBuilder = (MavenSettingsBuilder) 
embedder.lookup( MavenSettingsBuilder.ROLE );
+            Settings settings = buildSettings( userSettingsPath, interactive, 
usePluginRegistry, pluginUpdateOverride );
 
-        try
-        {
-            if ( userSettingsPath != null )
-            {
-                File userSettingsFile = new File( userSettingsPath );
+            ProfileManager profileManager = new DefaultProfileManager( 
embedder.getContainer() );
 
-                if ( userSettingsFile.exists() && 
!userSettingsFile.isDirectory() )
-                {
-                    settings = settingsBuilder.buildSettings( userSettingsFile 
);
-                }
-                else
-                {
-                    System.out.println( "WARNING: Alternate user settings 
file: " + userSettingsPath +
-                        " is invalid. Using default path." );
-                }
-            }
+            profileManager.explicitlyActivate( activeProfiles );
 
-            if ( settings == null )
-            {
-                settings = settingsBuilder.buildSettings();
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new SettingsConfigurationException( "Error reading settings 
file", e );
-        }
-        catch ( XmlPullParserException e )
-        {
-            throw new SettingsConfigurationException( e.getMessage(), 
e.getDetail(), e.getLineNumber(),
-                                                      e.getColumnNumber() );
-        }
+            profileManager.explicitlyDeactivate( inactiveProfiles );
 
-        // why aren't these part of the runtime info? jvz.
+            EventDispatcher eventDispatcher = new DefaultEventDispatcher();
 
-        if ( commandLine.hasOption( CLIManager.BATCH_MODE ) )
-        {
-            settings.setInteractiveMode( false );
-        }
+            MavenExecutionRequest request = createRequest( baseDirectory,
+                                                           goals,
+                                                           settings,
+                                                           eventDispatcher,
+                                                           loggerManager,
+                                                           profileManager,
+                                                           executionProperties,
+                                                           failureType,
+                                                           
globalChecksumPolicy,
+                                                           showErrors,
+                                                           recursive,
+                                                           offline,
+                                                           updateSnapshots
+            );
 
-        if ( commandLine.hasOption( CLIManager.SUPPRESS_PLUGIN_REGISTRY ) )
-        {
-            settings.setUsePluginRegistry( false );
-        }
+            request.setReactorActive( reactorActive );
 
-        // Create settings runtime info
+            request.setPomFile( alternatePomFile );
 
-        settings.setRuntimeInfo( createRuntimeInfo( commandLine, settings ) );
+            WagonManager wagonManager = (WagonManager) embedder.lookup( 
WagonManager.ROLE );
 
-        return settings;
-    }
+            wagonManager.setDownloadMonitor( transferListener );
 
-    private static RuntimeInfo createRuntimeInfo( CommandLine commandLine, 
Settings settings )
-    {
-        RuntimeInfo runtimeInfo = new RuntimeInfo( settings );
+            wagonManager.setInteractive( interactive );
 
-        if ( commandLine.hasOption( CLIManager.FORCE_PLUGIN_UPDATES ) ||
-            commandLine.hasOption( CLIManager.FORCE_PLUGIN_UPDATES2 ) )
+            Maven maven = (Maven) embedder.lookup( Maven.ROLE );
+
+            maven.execute( request );
+        }
+        catch ( SettingsConfigurationException e )
         {
-            runtimeInfo.setPluginUpdateOverride( Boolean.TRUE );
+            showError( "Error reading settings.xml: " + e.getMessage(), e, 
showErrors );
+
+            return 1;
         }
-        else if ( commandLine.hasOption( CLIManager.SUPPRESS_PLUGIN_UPDATES ) )
+        catch ( ComponentLookupException e )
         {
-            runtimeInfo.setPluginUpdateOverride( Boolean.FALSE );
+            showFatalError( "Unable to configure the Maven application", e, 
showErrors );
+
+            return 1;
+        }
+        catch ( MavenExecutionException e )
+        {
+            return 1;
         }
 
-        return runtimeInfo;
+        return 0;
     }
 
-
     private static void showFatalError( String message, Exception e, boolean 
show )
     {
         System.err.println( "FATAL ERROR: " + message );
@@ -370,133 +418,6 @@
         }
     }
 
-    private static MavenExecutionRequest createRequest( CommandLine 
commandLine, Settings settings,
-                                                        EventDispatcher 
eventDispatcher, LoggerManager loggerManager,
-                                                        ProfileManager 
profileManager, Properties executionProperties,
-                                                        boolean showErrors )
-        throws ComponentLookupException
-    {
-        MavenExecutionRequest request;
-
-        ArtifactRepository localRepository = createLocalRepository( embedder, 
settings, commandLine );
-
-        File userDir = new File( System.getProperty( "user.dir" ) );
-
-        request = new DefaultMavenExecutionRequest( localRepository, settings, 
eventDispatcher,
-                                                    commandLine.getArgList(), 
userDir.getPath(), profileManager,
-                                                    executionProperties, 
showErrors );
-
-        // TODO [BP]: do we set one per mojo? where to do it?
-        Logger logger = loggerManager.getLoggerForComponent( Mojo.ROLE );
-
-        if ( logger != null )
-        {
-            request.addEventMonitor( new DefaultEventMonitor( logger ) );
-        }
-
-        if ( commandLine.hasOption( CLIManager.NON_RECURSIVE ) )
-        {
-            request.setRecursive( false );
-        }
-
-        if ( commandLine.hasOption( CLIManager.FAIL_FAST ) )
-        {
-            request.setFailureBehavior( ReactorManager.FAIL_FAST );
-        }
-        else if ( commandLine.hasOption( CLIManager.FAIL_AT_END ) )
-        {
-            request.setFailureBehavior( ReactorManager.FAIL_AT_END );
-        }
-        else if ( commandLine.hasOption( CLIManager.FAIL_NEVER ) )
-        {
-            request.setFailureBehavior( ReactorManager.FAIL_NEVER );
-        }
-
-        return request;
-    }
-
-    private static void setProjectFileOptions( CommandLine commandLine, 
MavenExecutionRequest request )
-    {
-        if ( commandLine.hasOption( CLIManager.REACTOR ) )
-        {
-            request.setReactorActive( true );
-        }
-        else if ( commandLine.hasOption( CLIManager.ALTERNATE_POM_FILE ) )
-        {
-            request.setPomFile( commandLine.getOptionValue( 
CLIManager.ALTERNATE_POM_FILE ) );
-        }
-    }
-
-    private static Maven createMavenInstance( boolean interactive )
-        throws ComponentLookupException
-    {
-        // TODO [BP]: doing this here as it is CLI specific, though it doesn't 
feel like the right place (likewise logger).
-        WagonManager wagonManager = (WagonManager) embedder.lookup( 
WagonManager.ROLE );
-        if ( interactive )
-        {
-            wagonManager.setDownloadMonitor( new ConsoleDownloadMonitor() );
-        }
-        else
-        {
-            wagonManager.setDownloadMonitor( new BatchModeDownloadMonitor() );
-        }
-
-        wagonManager.setInteractive( interactive );
-
-        return (Maven) embedder.lookup( Maven.ROLE );
-    }
-
-    private static ArtifactRepository createLocalRepository( Embedder 
embedder, Settings settings,
-                                                             CommandLine 
commandLine )
-        throws ComponentLookupException
-    {
-        // TODO: release
-        // TODO: something in plexus to show all active hooks?
-        ArtifactRepositoryLayout repositoryLayout =
-            (ArtifactRepositoryLayout) embedder.lookup( 
ArtifactRepositoryLayout.ROLE, "default" );
-
-        ArtifactRepositoryFactory artifactRepositoryFactory =
-            (ArtifactRepositoryFactory) embedder.lookup( 
ArtifactRepositoryFactory.ROLE );
-
-        String url = settings.getLocalRepository();
-
-        if ( !url.startsWith( "file:" ) )
-        {
-            url = "file://" + url;
-        }
-
-        ArtifactRepository localRepository = new DefaultArtifactRepository( 
"local", url, repositoryLayout );
-
-        boolean snapshotPolicySet = false;
-
-        if ( commandLine.hasOption( CLIManager.OFFLINE ) )
-        {
-            settings.setOffline( true );
-
-            snapshotPolicySet = true;
-        }
-
-        if ( !snapshotPolicySet && commandLine.hasOption( 
CLIManager.UPDATE_SNAPSHOTS ) )
-        {
-            artifactRepositoryFactory.setGlobalUpdatePolicy( 
ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS );
-        }
-
-        if ( commandLine.hasOption( CLIManager.CHECKSUM_FAILURE_POLICY ) )
-        {
-            System.out.println( "+ Enabling strict checksum verification on 
all artifact downloads." );
-
-            artifactRepositoryFactory.setGlobalChecksumPolicy( 
ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL );
-        }
-        else if ( commandLine.hasOption( CLIManager.CHECKSUM_WARNING_POLICY ) )
-        {
-            System.out.println( "+ Disabling strict checksum verification on 
all artifact downloads." );
-
-            artifactRepositoryFactory.setGlobalChecksumPolicy( 
ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
-        }
-
-        return localRepository;
-    }
-
     private static void showVersion()
     {
         InputStream resourceAsStream;
@@ -506,15 +427,15 @@
             resourceAsStream = 
MavenCli.class.getClassLoader().getResourceAsStream(
                 "META-INF/maven/org.apache.maven/maven-core/pom.properties" );
             properties.load( resourceAsStream );
-            
-            if( properties.getProperty( "builtOn" ) != null )
+
+            if ( properties.getProperty( "builtOn" ) != null )
             {
-               System.out.println( "Maven version: " + properties.getProperty( 
"version", "unknown" ) 
-                       + " built on " + properties.getProperty( "builtOn" ) );
+                System.out.println( "Maven version: " + 
properties.getProperty( "version", "unknown" )
+                    + " built on " + properties.getProperty( "builtOn" ) );
             }
             else
             {
-               System.out.println( "Maven version: " + properties.getProperty( 
"version", "unknown" ) );
+                System.out.println( "Maven version: " + 
properties.getProperty( "version", "unknown" ) );
             }
         }
         catch ( IOException e )
@@ -714,5 +635,148 @@
             HelpFormatter formatter = new HelpFormatter();
             formatter.printHelp( "mvn [options] [<goal(s)>] [<phase(s)>]", 
"\nOptions:", options, "\n" );
         }
+    }
+
+    // ----------------------------------------------------------------------
+    // Methods that are now decoupled from the CLI, we want to push these
+    // into DefaultMaven and use them in the embedder as well.
+    // ----------------------------------------------------------------------
+
+    private static MavenExecutionRequest createRequest( File baseDirectory,
+                                                        List goals,
+                                                        Settings settings,
+                                                        EventDispatcher 
eventDispatcher,
+                                                        LoggerManager 
loggerManager,
+                                                        ProfileManager 
profileManager,
+                                                        Properties 
executionProperties,
+                                                        String failureType,
+                                                        String 
globalChecksumPolicy,
+                                                        boolean showErrors,
+                                                        boolean recursive,
+                                                        boolean offline,
+                                                        boolean updateSnapshots
+    )
+        throws ComponentLookupException
+    {
+        MavenExecutionRequest request;
+
+        ArtifactRepository localRepository = createLocalRepository( embedder, 
settings, offline, updateSnapshots, globalChecksumPolicy );
+
+        request = new DefaultMavenExecutionRequest( localRepository,
+                                                    settings,
+                                                    eventDispatcher,
+                                                    goals,
+                                                    
baseDirectory.getAbsolutePath(),
+                                                    profileManager,
+                                                    executionProperties,
+                                                    showErrors );
+
+        Logger logger = loggerManager.getLoggerForComponent( Mojo.ROLE );
+
+        request.addEventMonitor( new DefaultEventMonitor( logger ) );
+
+        if ( !recursive )
+        {
+            request.setRecursive( false );
+        }
+
+        request.setFailureBehavior( failureType );
+
+        return request;
+    }
+
+    private static ArtifactRepository createLocalRepository( Embedder embedder,
+                                                             Settings settings,
+                                                             boolean offline,
+                                                             boolean 
updateSnapshots,
+                                                             String 
globalChecksumPolicy )
+        throws ComponentLookupException
+    {
+        // TODO: release
+        // TODO: something in plexus to show all active hooks?
+        ArtifactRepositoryLayout repositoryLayout =
+            (ArtifactRepositoryLayout) embedder.lookup( 
ArtifactRepositoryLayout.ROLE, "default" );
+
+        ArtifactRepositoryFactory artifactRepositoryFactory =
+            (ArtifactRepositoryFactory) embedder.lookup( 
ArtifactRepositoryFactory.ROLE );
+
+        String url = settings.getLocalRepository();
+
+        if ( !url.startsWith( "file:" ) )
+        {
+            url = "file://" + url;
+        }
+
+        ArtifactRepository localRepository = new DefaultArtifactRepository( 
"local", url, repositoryLayout );
+
+        boolean snapshotPolicySet = false;
+
+        if ( offline )
+        {
+            settings.setOffline( true );
+
+            snapshotPolicySet = true;
+        }
+
+        if ( !snapshotPolicySet && updateSnapshots )
+        {
+            artifactRepositoryFactory.setGlobalUpdatePolicy( 
ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS );
+        }
+
+        artifactRepositoryFactory.setGlobalChecksumPolicy( 
globalChecksumPolicy );
+
+        return localRepository;
+    }
+
+    private static Settings buildSettings( String userSettingsPath, boolean 
interactive, boolean usePluginRegistry, Boolean pluginUpdateOverride )
+        throws ComponentLookupException, SettingsConfigurationException
+    {
+        Settings settings = null;
+
+        MavenSettingsBuilder settingsBuilder = (MavenSettingsBuilder) 
embedder.lookup( MavenSettingsBuilder.ROLE );
+
+        try
+        {
+            if ( userSettingsPath != null )
+            {
+                File userSettingsFile = new File( userSettingsPath );
+
+                if ( userSettingsFile.exists() && 
!userSettingsFile.isDirectory() )
+                {
+                    settings = settingsBuilder.buildSettings( userSettingsFile 
);
+                }
+                else
+                {
+                    System.out.println( "WARNING: Alternate user settings 
file: " + userSettingsPath +
+                        " is invalid. Using default path." );
+                }
+            }
+
+            if ( settings == null )
+            {
+                settings = settingsBuilder.buildSettings();
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new SettingsConfigurationException( "Error reading settings 
file", e );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new SettingsConfigurationException( e.getMessage(), 
e.getDetail(), e.getLineNumber(),
+                                                      e.getColumnNumber() );
+        }
+
+        settings.setInteractiveMode( interactive );
+
+        settings.setUsePluginRegistry( usePluginRegistry );
+
+        RuntimeInfo runtimeInfo = new RuntimeInfo( settings );
+
+        runtimeInfo.setPluginUpdateOverride( pluginUpdateOverride );
+
+        settings.setRuntimeInfo( runtimeInfo );
+
+        return settings;
     }
 }

Modified: 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java
URL: 
http://svn.apache.org/viewcvs/maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java?rev=380140&r1=379578&r2=380140&view=diff
==============================================================================
--- 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java
 (original)
+++ 
maven/components/branches/maven-embedder-refactor/maven-core/src/main/java/org/apache/maven/monitor/event/DefaultEventMonitor.java
 Thu Feb 23 07:11:48 2006
@@ -24,7 +24,6 @@
 public class DefaultEventMonitor
     extends AbstractSelectiveEventMonitor
 {
-
     private static final String[] START_EVENTS = {MavenEvents.MOJO_EXECUTION};
 
     private final Logger logger;
@@ -40,5 +39,4 @@
     {
         logger.info( "[" + target + "]" );
     }
-
 }

Copied: 
maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
 (from r379579, 
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java)
URL: 
http://svn.apache.org/viewcvs/maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java?p2=maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java&p1=maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java&r1=379579&r2=380140&rev=380140&view=diff
==============================================================================
--- 
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
 (original)
+++ 
maven/components/branches/maven-embedder-refactor/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
 Thu Feb 23 07:11:48 2006
@@ -16,7 +16,8 @@
  * limitations under the License.
  */
 
-import org.apache.maven.BuildFailureException;
+import org.apache.maven.Maven;
+import org.apache.maven.SettingsConfigurationException;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.manager.WagonManager;
@@ -27,9 +28,9 @@
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.execution.MavenSession;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.ReactorManager;
-import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.lifecycle.LifecycleExecutor;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
@@ -42,10 +43,10 @@
 import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
 import org.apache.maven.profiles.DefaultProfileManager;
 import org.apache.maven.profiles.ProfileManager;
-import org.apache.maven.project.DuplicateProjectException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.reactor.MavenExecutionException;
 import org.apache.maven.settings.MavenSettingsBuilder;
 import org.apache.maven.settings.RuntimeInfo;
 import org.apache.maven.settings.Settings;
@@ -59,8 +60,9 @@
 import org.codehaus.plexus.configuration.PlexusConfiguration;
 import org.codehaus.plexus.configuration.PlexusConfigurationException;
 import org.codehaus.plexus.embed.Embedder;
+import org.codehaus.plexus.logging.LoggerManager;
+import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.DirectoryScanner;
-import org.codehaus.plexus.util.dag.CycleDetectedException;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.File;
@@ -72,10 +74,10 @@
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
+import java.util.StringTokenizer;
 
 /**
  * Class intended to be used by clients who wish to embed Maven into their 
applications
@@ -120,6 +122,8 @@
 
     private ArtifactRepositoryLayout defaultArtifactRepositoryLayout;
 
+    private Maven maven;
+
     // ----------------------------------------------------------------------
     // Configuration
     // ----------------------------------------------------------------------
@@ -377,7 +381,7 @@
                          TransferListener transferListener,
                          Properties properties,
                          File executionRootDirectory )
-        throws CycleDetectedException, LifecycleExecutionException, 
BuildFailureException, DuplicateProjectException
+        throws MavenExecutionException
     {
         execute( Collections.singletonList( project ), goals, eventMonitor, 
transferListener, properties, executionRootDirectory );
     }
@@ -388,36 +392,26 @@
                          TransferListener transferListener,
                          Properties properties,
                          File executionRootDirectory )
-        throws CycleDetectedException, LifecycleExecutionException, 
BuildFailureException, DuplicateProjectException
+        throws MavenExecutionException
     {
-        ReactorManager rm = new ReactorManager( projects );
-
         EventDispatcher eventDispatcher = new DefaultEventDispatcher();
 
         eventDispatcher.addEventMonitor( eventMonitor );
 
-        // If this option is set the exception seems to be hidden ...
-
-        //rm.setFailureBehavior( ReactorManager.FAIL_AT_END );
-
-        rm.setFailureBehavior( ReactorManager.FAIL_FAST );
-
-        MavenSession session = new MavenSession( embedder.getContainer(),
-                                                 settings,
-                                                 localRepository,
-                                                 eventDispatcher,
-                                                 rm,
-                                                 goals,
-                                                 
executionRootDirectory.getAbsolutePath(),
-                                                 properties,
-                                                 new Date() );
+        LoggerManager  loggerManager = new MavenEmbedderLoggerManager( new 
PlexusLoggerAdapter( logger ) );
 
-        session.setUsingPOMsFromFilesystem( true );
+        loggerManager.setThreshold( Logger.LEVEL_INFO );
 
-        if ( transferListener != null )
-        {
-            wagonManager.setDownloadMonitor( transferListener );
-        }
+        MavenExecutionRequest request = createRequest( settings,
+                                                       goals,
+                                                       eventDispatcher,
+                                                       loggerManager,
+                                                       profileManager,
+                                                       executionRootDirectory,
+                                                       properties,
+                                                       true,
+                                                       false,
+                                                       null );
 
         // 
----------------------------------------------------------------------
         // Maven should not be using system properties internally but because
@@ -438,9 +432,61 @@
             }
         }
 
-        lifecycleExecutor.execute( session, rm, session.getEventDispatcher() );
+        if ( transferListener != null )
+        {
+            wagonManager.setDownloadMonitor( transferListener );
+        }
+
+        maven.execute( request );
+    }
+
+
+    private MavenExecutionRequest createRequest( Settings settings,
+                                                 List goals,
+                                                 EventDispatcher 
eventDispatcher,
+                                                 LoggerManager loggerManager,
+                                                 ProfileManager profileManager,
+                                                 File baseDir,
+                                                 Properties properties,
+                                                 boolean showErrors,
+                                                 boolean isNonRecursive ,
+                                                 String failureType )
+    {
+        MavenExecutionRequest request;
+
+        ArtifactRepository localRepository = createLocalRepository( settings );
+
+        request = new DefaultMavenExecutionRequest( localRepository,
+                                                    settings,
+                                                    eventDispatcher,
+                                                    goals,
+                                                    baseDir.getPath(),
+                                                    profileManager,
+                                                    properties,
+                                                    showErrors );
+
+        if ( isNonRecursive )
+        {
+            request.setRecursive( false );
+        }
+
+        if ( failureType == null || failureType.equals( 
ReactorManager.FAIL_FAST ) )
+        {
+            request.setFailureBehavior( ReactorManager.FAIL_FAST );
+        }
+        else if ( failureType.equals( ReactorManager.FAIL_AT_END ) )
+        {
+            request.setFailureBehavior( ReactorManager.FAIL_AT_END );
+        }
+        else if ( failureType.equals( ReactorManager.FAIL_FAST ) )
+        {
+            request.setFailureBehavior( ReactorManager.FAIL_NEVER );
+        }
+
+        return request;
     }
 
+
     // ----------------------------------------------------------------------
     // Lifecycle information
     // ----------------------------------------------------------------------
@@ -490,13 +536,11 @@
     }
 
     public ArtifactRepository createLocalRepository( Settings settings )
-        throws ComponentLookupException
     {
         return createLocalRepository( settings.getLocalRepository(), 
DEFAULT_LOCAL_REPO_ID );
     }
 
     public ArtifactRepository createLocalRepository( String url, String 
repositoryId )
-        throws ComponentLookupException
     {
         if ( !url.startsWith( "file:" ) )
         {
@@ -507,7 +551,6 @@
     }
 
     public ArtifactRepository createRepository( String url, String 
repositoryId )
-        throws ComponentLookupException
     {
         // snapshots vs releases
         // offline = to turning the update policy off
@@ -602,6 +645,8 @@
             modelReader = new MavenXpp3Reader();
 
             modelWriter = new MavenXpp3Writer();
+
+            maven = (Maven) embedder.lookup( Maven.ROLE );
 
             pluginDescriptorBuilder = new PluginDescriptorBuilder();
 


Reply via email to