Author: jdcasey Date: Fri Jul 22 15:50:39 2011 New Revision: 1149642 URL: http://svn.apache.org/viewvc?rev=1149642&view=rev Log: enable the MAEServiceManager to create a new ProjectBuildingRequest based on a template, from the execution request, if available, or even just another project-building request if that's available.
Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/DefaultMAEServiceManager.java maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/MAEServiceManager.java maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/DefaultSessionInjector.java maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/ProjectToolsSession.java maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SimpleProjectToolsSession.java Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/DefaultMAEServiceManager.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/DefaultMAEServiceManager.java?rev=1149642&r1=1149641&r2=1149642&view=diff ============================================================================== --- maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/DefaultMAEServiceManager.java (original) +++ maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/DefaultMAEServiceManager.java Fri Jul 22 15:50:39 2011 @@ -27,11 +27,13 @@ import org.apache.maven.execution.MavenE import org.apache.maven.execution.MavenExecutionRequestPopulationException; import org.apache.maven.execution.MavenExecutionRequestPopulator; import org.apache.maven.mae.DefaultMAEExecutionRequest; +import org.apache.maven.mae.MAEExecutionRequest; import org.apache.maven.mae.boot.embed.MAEEmbeddingException; import org.apache.maven.mae.internal.container.ServiceAuthorizer; import org.apache.maven.model.building.ModelBuildingRequest; import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.ProjectBuilder; +import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.repository.RepositorySystem; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.annotations.Component; @@ -101,13 +103,61 @@ public class DefaultMAEServiceManager public DefaultProjectBuildingRequest createProjectBuildingRequest() throws MAEEmbeddingException { - final DefaultProjectBuildingRequest req = new DefaultProjectBuildingRequest(); - req.setLocalRepository( defaultLocalRepository() ); + return createProjectBuildingRequest( (ProjectBuildingRequest) null ); + } + + /** + * {@inheritDoc} + */ + @Override + public DefaultProjectBuildingRequest createProjectBuildingRequest( final MAEExecutionRequest executionRequest ) + throws MAEEmbeddingException + { + return createProjectBuildingRequest( executionRequest == null ? null + : executionRequest.getProjectBuildingRequest() ); + } + + /** + * {@inheritDoc} + */ + @Override + public DefaultProjectBuildingRequest createProjectBuildingRequest( final MavenExecutionRequest executionRequest ) + throws MAEEmbeddingException + { + return createProjectBuildingRequest( executionRequest == null ? null + : executionRequest.getProjectBuildingRequest() ); + } + + /** + * {@inheritDoc} + */ + @Override + public DefaultProjectBuildingRequest createProjectBuildingRequest( final ProjectBuildingRequest templateProjectBuildingRequest ) + throws MAEEmbeddingException + { + final DefaultProjectBuildingRequest req; + if ( templateProjectBuildingRequest != null ) + { + req = new DefaultProjectBuildingRequest( templateProjectBuildingRequest ); + } + else + { + req = new DefaultProjectBuildingRequest(); + } + + if ( req.getLocalRepository() == null ) + { + req.setLocalRepository( defaultLocalRepository() ); + } + req.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL ); req.setProcessPlugins( false ); req.setResolveDependencies( false ); - req.setRepositorySession( createAetherRepositorySystemSession() ); + if ( req.getRepositorySession() == null ) + { + req.setRepositorySession( createAetherRepositorySystemSession() ); + } return req; } @@ -147,8 +197,7 @@ public class DefaultMAEServiceManager catch ( final MavenExecutionRequestPopulationException e ) { throw new MAEEmbeddingException( "Failed to populate default Maven execution request, " - + " for use in constructing a repository system session." + "\nReason: %s", e, - e.getMessage() ); + + " for use in constructing a repository system session." + "\nReason: %s", e, e.getMessage() ); } } @@ -173,13 +222,12 @@ public class DefaultMAEServiceManager request.setRepositoryCache( new DefaultRepositoryCache() ); } } - catch ( MavenExecutionRequestPopulationException e ) + catch ( final MavenExecutionRequestPopulationException e ) { throw new MAEEmbeddingException( "Failed to populate default Maven execution request, " - + " for use in constructing a repository system session." + "\nReason: %s", e, - e.getMessage() ); + + " for use in constructing a repository system session." + "\nReason: %s", e, e.getMessage() ); } - + return defaultMaven.newRepositorySession( request ); } } @@ -199,7 +247,8 @@ public class DefaultMAEServiceManager } catch ( final InvalidRepositoryException e ) { - throw new MAEEmbeddingException( "Failed to create default local-repository instance: {0}", e, + throw new MAEEmbeddingException( "Failed to create default local-repository instance: {0}", + e, e.getMessage() ); } } @@ -230,7 +279,9 @@ public class DefaultMAEServiceManager } catch ( final ComponentLookupException e ) { - throw new MAEEmbeddingException( "Failed to retrieve service: %s. Reason: %s", e, type.getName(), + throw new MAEEmbeddingException( "Failed to retrieve service: %s. Reason: %s", + e, + type.getName(), e.getMessage() ); } } @@ -258,8 +309,11 @@ public class DefaultMAEServiceManager } catch ( final ComponentLookupException e ) { - throw new MAEEmbeddingException( "Failed to retrieve service: %s with hint: %s. Reason: %s", e, - type.getName(), hint, e.getMessage() ); + throw new MAEEmbeddingException( "Failed to retrieve service: %s with hint: %s. Reason: %s", + e, + type.getName(), + hint, + e.getMessage() ); } } Modified: maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/MAEServiceManager.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/MAEServiceManager.java?rev=1149642&r1=1149641&r2=1149642&view=diff ============================================================================== --- maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/MAEServiceManager.java (original) +++ maven/sandbox/trunk/mae/mae-booter/src/main/java/org/apache/maven/mae/boot/services/MAEServiceManager.java Fri Jul 22 15:50:39 2011 @@ -21,6 +21,7 @@ package org.apache.maven.mae.boot.servic import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.mae.MAEExecutionRequest; import org.apache.maven.mae.boot.embed.MAEEmbeddingException; import org.apache.maven.mae.conf.MAELibrary; import org.apache.maven.project.DefaultProjectBuildingRequest; @@ -30,10 +31,9 @@ import org.apache.maven.repository.Repos import org.sonatype.aether.RepositorySystemSession; /** - * Service manager used as an aid in constructing complex objects correctly for use in Maven, such - * as {@link RepositorySystemSession} instances, which are used to resolve artifacts, or - * {@link ProjectBuildingRequest} instances, used to build maven projects from their corresponding - * POM files or artifact coordinates. + * Service manager used as an aid in constructing complex objects correctly for use in Maven, such as + * {@link RepositorySystemSession} instances, which are used to resolve artifacts, or {@link ProjectBuildingRequest} + * instances, used to build maven projects from their corresponding POM files or artifact coordinates. * * @author John Casey */ @@ -47,13 +47,34 @@ public interface MAEServiceManager throws MAEEmbeddingException; /** - * Create a new {@link ProjectBuildingRequest} to be used in building project instances from - * POM files or artifact coordinates. + * Create a new {@link ProjectBuildingRequest} to be used in building project instances from POM files or artifact + * coordinates. */ DefaultProjectBuildingRequest createProjectBuildingRequest() throws MAEEmbeddingException; /** + * Create a new {@link ProjectBuildingRequest} to be used in building project instances from POM files or artifact + * coordinates. + */ + DefaultProjectBuildingRequest createProjectBuildingRequest( ProjectBuildingRequest templateProjectBuildingRequest ) + throws MAEEmbeddingException; + + /** + * Create a new {@link ProjectBuildingRequest} to be used in building project instances from POM files or artifact + * coordinates. + */ + DefaultProjectBuildingRequest createProjectBuildingRequest( MAEExecutionRequest executionRequest ) + throws MAEEmbeddingException; + + /** + * Create a new {@link ProjectBuildingRequest} to be used in building project instances from POM files or artifact + * coordinates. + */ + DefaultProjectBuildingRequest createProjectBuildingRequest( MavenExecutionRequest executionRequest ) + throws MAEEmbeddingException; + + /** * Retrieve the Maven {@link RepositorySystem} component. */ RepositorySystem mavenRepositorySystem() @@ -72,34 +93,31 @@ public interface MAEServiceManager throws MAEEmbeddingException; /** - * Create a new {@link RepositorySystemSession} for resolving artifacts, based on the configuration - * of a {@link MavenExecutionRequest}. + * Create a new {@link RepositorySystemSession} for resolving artifacts, based on the configuration of a + * {@link MavenExecutionRequest}. */ RepositorySystemSession createAetherRepositorySystemSession( MavenExecutionRequest request ) throws MAEEmbeddingException; /** - * Retrieve a component from the Maven component environment, based on its class. - * <br/> - * <b>NOTE:</b> This method requires that some {@link MAELibrary} present in the current environment - * has granted permission to lookup the component in question. + * Retrieve a component from the Maven component environment, based on its class. <br/> + * <b>NOTE:</b> This method requires that some {@link MAELibrary} present in the current environment has granted + * permission to lookup the component in question. */ <T> T service( Class<T> type ) throws MAEEmbeddingException; /** - * Retrieve a component from the Maven component environment, based on its class and an implementation - * hint. - * <br/> - * <b>NOTE:</b> This method requires that some {@link MAELibrary} present in the current environment - * has granted permission to lookup the component in question. + * Retrieve a component from the Maven component environment, based on its class and an implementation hint. <br/> + * <b>NOTE:</b> This method requires that some {@link MAELibrary} present in the current environment has granted + * permission to lookup the component in question. */ <T> T service( Class<T> type, String hint ) throws MAEEmbeddingException; /** - * Retrieve an {@link ArtifactRepository} instance configured for the default location of the - * Maven local repository. + * Retrieve an {@link ArtifactRepository} instance configured for the default location of the Maven local + * repository. */ ArtifactRepository defaultLocalRepository() throws MAEEmbeddingException; Modified: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/DefaultSessionInjector.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/DefaultSessionInjector.java?rev=1149642&r1=1149641&r2=1149642&view=diff ============================================================================== --- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/DefaultSessionInjector.java (original) +++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/DefaultSessionInjector.java Fri Jul 22 15:50:39 2011 @@ -62,7 +62,9 @@ public class DefaultSessionInjector { if ( pbr == null ) { - pbr = embedder.serviceManager().createProjectBuildingRequest(); + pbr = + embedder.serviceManager() + .createProjectBuildingRequest( session.getTemplateProjectBuildingRequest() ); pbr.setValidationLevel( session.getPomValidationLevel() ); pbr.setProcessPlugins( session.isProcessPomPlugins() ); Modified: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/ProjectToolsSession.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/ProjectToolsSession.java?rev=1149642&r1=1149641&r2=1149642&view=diff ============================================================================== --- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/ProjectToolsSession.java (original) +++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/ProjectToolsSession.java Fri Jul 22 15:50:39 2011 @@ -107,4 +107,6 @@ public interface ProjectToolsSession ProjectToolsSession setPomValidationLevel( int pomValidationLevel ); + ProjectBuildingRequest getTemplateProjectBuildingRequest(); + } Modified: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SimpleProjectToolsSession.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SimpleProjectToolsSession.java?rev=1149642&r1=1149641&r2=1149642&view=diff ============================================================================== --- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SimpleProjectToolsSession.java (original) +++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SimpleProjectToolsSession.java Fri Jul 22 15:50:39 2011 @@ -70,6 +70,8 @@ public class SimpleProjectToolsSession private int pomValidationLevel = ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0; + private ProjectBuildingRequest templateProjectBuildingRequest; + private transient Map<Class<?>, Object> states = new HashMap<Class<?>, Object>(); public SimpleProjectToolsSession() @@ -492,4 +494,21 @@ public class SimpleProjectToolsSession return this; } + /** + * {@inheritDoc} + * + * @see org.apache.maven.mae.project.session.ProjectToolsSession#getTemplateProjectBuildingRequest() + */ + @Override + public ProjectBuildingRequest getTemplateProjectBuildingRequest() + { + return templateProjectBuildingRequest; + } + + public ProjectToolsSession setTemplProjectBuildingRequest( final ProjectBuildingRequest templateProjectBuildingRequest ) + { + this.templateProjectBuildingRequest = templateProjectBuildingRequest; + return this; + } + }