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 2011/06/21 23:48:37 UTC
svn commit: r1138204 [1/2] - in /maven/sandbox/trunk/mae: ./ mae-components/
mae-components/mae-project-tools/ mae-components/mae-project-tools/src/
mae-components/mae-project-tools/src/main/
mae-components/mae-project-tools/src/main/java/ mae-componen...
Author: jdcasey
Date: Tue Jun 21 21:48:35 2011
New Revision: 1138204
URL: http://svn.apache.org/viewvc?rev=1138204&view=rev
Log:
Adding project-tools from EMB, which provides some convenience wrappers around the ProjectBuilder and related components.
Added:
maven/sandbox/trunk/mae/mae-components/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/pom.xml (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/DefaultProjectLoader.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectLoader.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectToolsException.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/lib/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/lib/ProjectToolsLibrary.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/DefaultSessionInjector.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/ProjectToolsSession.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SessionInjector.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SessionWorkspaceReader.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SimpleProjectToolsSession.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/repository/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/repository/internal/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/repository/internal/ConfigurableArtifactDescriptorReader.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/java/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/java/org/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/java/org/apache/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/java/org/apache/maven/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/java/org/apache/maven/mae/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/java/org/apache/maven/mae/project/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/java/org/apache/maven/mae/project/ProjectLoaderTest.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/java/org/apache/maven/mae/project/testutil/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/java/org/apache/maven/mae/project/testutil/TestFixture.java (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/projects/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/projects/multi-module/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/projects/multi-module/child1/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/projects/multi-module/child1/pom.xml (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/projects/multi-module/child2/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/projects/multi-module/child2/pom.xml (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/projects/multi-module/pom.xml (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/projects/simple.pom.xml (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/test-repo/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/test-repo/test/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/test-repo/test/found-dep/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/test-repo/test/found-dep/1/
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/test-repo/test/found-dep/1/found-dep-1.pom (with props)
maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/test/resources/test-repo/test/found-dep/maven-metadata.xml (with props)
maven/sandbox/trunk/mae/mae-components/pom.xml (with props)
Modified:
maven/sandbox/trunk/mae/pom.xml
Added: maven/sandbox/trunk/mae/mae-components/mae-project-tools/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-components/mae-project-tools/pom.xml?rev=1138204&view=auto
==============================================================================
--- maven/sandbox/trunk/mae/mae-components/mae-project-tools/pom.xml (added)
+++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/pom.xml Tue Jun 21 21:48:35 2011
@@ -0,0 +1,75 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.maven.mae.components</groupId>
+ <artifactId>mae-components</artifactId>
+ <version>1.0-alpha-1-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>mae-project-tools</artifactId>
+ <name>Maven App Engine: Project Tools</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mae</groupId>
+ <artifactId>mae-booter</artifactId>
+ <version>${maeVersion}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.mae</groupId>
+ <artifactId>mae-app</artifactId>
+ <version>${maeVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-http-lightweight</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-file</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.aether</groupId>
+ <artifactId>aether-connector-wagon</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-aether-provider</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.5</version>
+ </dependency>
+ </dependencies>
+</project>
Propchange: maven/sandbox/trunk/mae/mae-components/mae-project-tools/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/DefaultProjectLoader.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/DefaultProjectLoader.java?rev=1138204&view=auto
==============================================================================
--- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/DefaultProjectLoader.java (added)
+++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/DefaultProjectLoader.java Tue Jun 21 21:48:35 2011
@@ -0,0 +1,540 @@
+/*
+ * Copyright 2011 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.maven.mae.project;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.log4j.Logger;
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.mae.project.session.ProjectToolsSession;
+import org.apache.maven.mae.project.session.SessionInjector;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.building.ModelProblem;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.project.ProjectBuildingResult;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.Os;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.sonatype.aether.RepositorySystem;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.resolution.ArtifactRequest;
+import org.sonatype.aether.resolution.ArtifactResolutionException;
+import org.sonatype.aether.resolution.ArtifactResult;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+@Component( role = ProjectLoader.class )
+public class DefaultProjectLoader
+ implements ProjectLoader
+{
+
+ private static final Logger LOGGER = Logger.getLogger( DefaultProjectLoader.class );
+
+ @Requirement
+ private RepositorySystem aetherRepositorySystem;
+
+ @Requirement
+ private org.apache.maven.repository.RepositorySystem mavenRepositorySystem;
+
+ @Requirement
+ private ProjectBuilder projectBuilder;
+
+ @Requirement
+ private SessionInjector sessionInjector;
+
+ @Override
+ public List<MavenProject> buildReactorProjectInstances( final ProjectToolsSession session, final File... rootPoms )
+ throws ProjectToolsException
+ {
+ final ProjectBuildingRequest pbr = sessionInjector.getProjectBuildingRequest( session );
+
+ try
+ {
+ final List<File> pomFiles = Arrays.asList( rootPoms );
+ final List<ProjectBuildingResult> results = projectBuilder.build( pomFiles, true, pbr );
+
+ final List<MavenProject> projects = new ArrayList<MavenProject>( results.size() );
+ for ( final ProjectBuildingResult result : results )
+ {
+ final MavenProject project = result.getProject();
+ project.setRemoteArtifactRepositories( session.getRemoteArtifactRepositories() );
+
+ projects.add( project );
+ }
+
+ session.setReactorProjects( projects );
+
+ if ( LOGGER.isDebugEnabled() )
+ {
+ LOGGER.debug( "Adding projects to dependency graph:\n\t"
+ + StringUtils.join( projects.iterator(), "\n\t" ) );
+ }
+ addProjects( session, projects );
+
+ return projects;
+ }
+ catch ( final ProjectBuildingException e )
+ {
+ // logger.error( "Failed to build MavenProject instances from POM files for sorting: " + e.getMessage(), e
+ // );
+ final List<ProjectBuildingResult> results = e.getResults();
+
+ final StringBuilder sb = new StringBuilder();
+
+ if ( results == null )
+ {
+ sb.append( "Cannot build reactor project instances for root-POM: " ).append( rootPoms );
+
+ final StringWriter sWriter = new StringWriter();
+ final PrintWriter pWriter = new PrintWriter( sWriter );
+
+ e.printStackTrace( pWriter );
+ sb.append( "\n" ).append( sWriter );
+ }
+ else
+ {
+ int i = 0;
+ for ( final ProjectBuildingResult result : results )
+ {
+ final List<ModelProblem> problems = result.getProblems();
+ if ( problems != null && !problems.isEmpty() )
+ {
+ sb.append( "\n" ).append( result.getProjectId() );
+ for ( final ModelProblem problem : problems )
+ {
+ sb.append( "\n\t" )
+ .append( problem.getMessage() )
+ .append( "\n\t\t" )
+ .append( problem.getSource() )
+ .append( "@" )
+ .append( problem.getLineNumber() )
+ .append( ":" + problem.getColumnNumber() );
+
+ if ( problem.getException() != null )
+ {
+ final StringWriter sWriter = new StringWriter();
+ final PrintWriter pWriter = new PrintWriter( sWriter );
+
+ problem.getException().printStackTrace( pWriter );
+ sb.append( "\n" ).append( sWriter );
+ }
+
+ sb.append( ( ++i ) ).append( " " ).append( sb );
+ }
+ }
+ }
+ }
+
+ throw new ProjectToolsException( "Failed to build project instance. \n\n%s", e, sb );
+ }
+ }
+
+ private void addProjects( final ProjectToolsSession session, final MavenProject... projects )
+ {
+ if ( projects == null || projects.length == 0 )
+ {
+ return;
+ }
+
+ addProjects( session, Arrays.asList( projects ) );
+ }
+
+ private void addProjects( final ProjectToolsSession session, final List<MavenProject> projects )
+ {
+ for ( final MavenProject project : projects )
+ {
+ final LinkedList<Artifact> parentage = new LinkedList<Artifact>();
+ MavenProject parent = project;
+ while ( parent != null )
+ {
+ final org.apache.maven.artifact.Artifact pomArtifact =
+ mavenRepositorySystem.createArtifact( project.getGroupId(),
+ project.getArtifactId(),
+ project.getVersion(),
+ "pom" );
+
+ final Artifact aetherPomArtifact = RepositoryUtils.toArtifact( pomArtifact );
+
+ parentage.addFirst( aetherPomArtifact );
+
+ parent = parent.getParent();
+ }
+
+ Artifact current = parentage.removeFirst();
+ while ( !parentage.isEmpty() )
+ {
+ final Artifact next = parentage.getFirst();
+
+ // This is WEIRD, but the parent POM is actually a dependency of the current one,
+ // since it's required in order to build the current project...
+ if ( LOGGER.isDebugEnabled() )
+ {
+ LOGGER.debug( "Marking parent POM: " + current + " as dependency of POM: " + next );
+ }
+
+ session.connectProjectHierarchy( next, true, current, true );
+
+ if ( !parentage.isEmpty() )
+ {
+ current = parentage.removeFirst();
+ }
+ }
+ }
+ }
+
+ @Override
+ public MavenProject buildProjectInstance( final File pomFile, final ProjectToolsSession session )
+ throws ProjectToolsException
+ {
+ final ProjectBuildingRequest pbr = sessionInjector.getProjectBuildingRequest( session );
+
+ try
+ {
+ final ProjectBuildingResult result = projectBuilder.build( pomFile, pbr );
+
+ final MavenProject project = result.getProject();
+ project.setRemoteArtifactRepositories( session.getRemoteArtifactRepositories() );
+
+ addProjects( session, project );
+
+ return project;
+ }
+ catch ( final ProjectBuildingException e )
+ {
+ // logger.error( "Failed to build MavenProject instances from POM files for sorting: " + e.getMessage(), e
+ // );
+ final List<ProjectBuildingResult> results = e.getResults();
+
+ final StringBuilder sb = new StringBuilder();
+
+ if ( results == null )
+ {
+ sb.append( "Cannot build project instance for: " ).append( pomFile );
+
+ final StringWriter sWriter = new StringWriter();
+ final PrintWriter pWriter = new PrintWriter( sWriter );
+
+ e.printStackTrace( pWriter );
+ sb.append( "\n" ).append( sWriter );
+ }
+ else
+ {
+ int i = 0;
+ for ( final ProjectBuildingResult result : results )
+ {
+ final List<ModelProblem> problems = result.getProblems();
+ for ( final ModelProblem problem : problems )
+ {
+ sb.append( problem.getMessage() )
+ .append( "\n\t" )
+ .append( problem.getSource() )
+ .append( "@" )
+ .append( problem.getLineNumber() )
+ .append( ":" + problem.getColumnNumber() );
+
+ if ( problem.getException() != null )
+ {
+ final StringWriter sWriter = new StringWriter();
+ final PrintWriter pWriter = new PrintWriter( sWriter );
+
+ problem.getException().printStackTrace( pWriter );
+ sb.append( "\n" ).append( sWriter );
+ }
+
+ sb.append( ( ++i ) ).append( " " ).append( sb );
+ }
+ }
+ }
+
+ throw new ProjectToolsException( "Failed to build project instance. \n\n%s", e, sb );
+ }
+ }
+
+ @Override
+ public MavenProject buildProjectInstance( final String groupId, final String artifactId, final String version,
+ final ProjectToolsSession session )
+ throws ProjectToolsException
+ {
+ final ProjectBuildingRequest req = sessionInjector.getProjectBuildingRequest( session );
+
+ try
+ {
+ final org.apache.maven.artifact.Artifact pomArtifact =
+ mavenRepositorySystem.createArtifact( groupId, artifactId, version, "pom" );
+
+ final Artifact aetherPomArtifact = RepositoryUtils.toArtifact( pomArtifact );
+
+ final ArtifactRequest artifactRequest =
+ new ArtifactRequest( aetherPomArtifact, sessionInjector.getRemoteRepositories( session ), "project" );
+
+ final ArtifactResult artifactResult =
+ aetherRepositorySystem.resolveArtifact( req.getRepositorySession(), artifactRequest );
+
+ final File pomFile = artifactResult.getArtifact().getFile();
+ final ProjectBuildingResult result = projectBuilder.build( pomFile, req );
+
+ final MavenProject project = result.getProject();
+ project.setRemoteArtifactRepositories( session.getRemoteArtifactRepositories() );
+
+ project.setFile( pomFile );
+
+ addProjects( session, project );
+
+ return project;
+ }
+ catch ( final ProjectBuildingException e )
+ {
+ // logger.error( "Failed to build MavenProject instances from POM files for sorting: " + e.getMessage(), e
+ // );
+ final List<ProjectBuildingResult> results = e.getResults();
+
+ final StringBuilder sb = new StringBuilder();
+
+ int i = 0;
+ if ( results == null )
+ {
+ sb.append( "Cannot build project instance for: " )
+ .append( groupId )
+ .append( ':' )
+ .append( artifactId )
+ .append( ':' )
+ .append( version );
+
+ final StringWriter sWriter = new StringWriter();
+ final PrintWriter pWriter = new PrintWriter( sWriter );
+
+ e.printStackTrace( pWriter );
+ sb.append( "\n" ).append( sWriter );
+ }
+ else
+ {
+ for ( final ProjectBuildingResult result : results )
+ {
+ final List<ModelProblem> problems = result.getProblems();
+ for ( final ModelProblem problem : problems )
+ {
+ sb.append( problem.getMessage() )
+ .append( "\n\t" )
+ .append( problem.getSource() )
+ .append( "@" )
+ .append( problem.getLineNumber() )
+ .append( ":" + problem.getColumnNumber() );
+
+ if ( problem.getException() != null )
+ {
+ final StringWriter sWriter = new StringWriter();
+ final PrintWriter pWriter = new PrintWriter( sWriter );
+
+ problem.getException().printStackTrace( pWriter );
+ sb.append( "\n" ).append( sWriter );
+ }
+
+ sb.append( ( ++i ) ).append( " " ).append( sb );
+ }
+ }
+ }
+
+ throw new ProjectToolsException( "Failed to build project instance. \n\n%s", e, sb );
+ }
+ catch ( final ArtifactResolutionException e )
+ {
+ throw new ProjectToolsException( "Failed to resolve POM: %s:%s:%s\nReason: %s",
+ e,
+ groupId,
+ artifactId,
+ version,
+ e.getMessage() );
+ }
+ }
+
+ @Override
+ public Set<String> retrieveReactorProjectIds( final File rootPom )
+ throws ProjectToolsException
+ {
+ if ( LOGGER.isInfoEnabled() )
+ {
+ if ( LOGGER.isDebugEnabled() )
+ {
+ LOGGER.debug( "Finding projectIds contained within reactor for: " + rootPom );
+ }
+ }
+
+ final Map<File, Model> models = new LinkedHashMap<File, Model>();
+ readReactorModels( rootPom, rootPom, models );
+
+ final Set<String> projectIds = new HashSet<String>( models.size() );
+ for ( final Model model : models.values() )
+ {
+ String groupId = model.getGroupId();
+ final String artifactId = model.getArtifactId();
+ String version = model.getVersion();
+ String packaging = model.getPackaging();
+
+ if ( packaging == null )
+ {
+ packaging = "jar";
+ }
+
+ if ( groupId == null || version == null )
+ {
+ final Parent parent = model.getParent();
+ if ( parent != null )
+ {
+ if ( groupId == null )
+ {
+ groupId = parent.getGroupId();
+ }
+ if ( version == null )
+ {
+ version = parent.getVersion();
+ }
+ }
+ else
+ {
+ LOGGER.warn( String.format( "Invalid POM: %s", model.getId() ) );
+ continue;
+ }
+ }
+
+ final String key = ArtifactUtils.key( groupId, artifactId, version );
+ if ( LOGGER.isInfoEnabled() )
+ {
+ if ( LOGGER.isDebugEnabled() )
+ {
+ LOGGER.debug( "Found: " + key );
+ }
+ }
+
+ projectIds.add( key );
+ }
+
+ return projectIds;
+ }
+
+ private void readReactorModels( final File topPom, final File pom, final Map<File, Model> models )
+ throws ProjectToolsException
+ {
+ final Model model = readModel( pom );
+ models.put( pom, model );
+
+ if ( model.getModules() != null && !model.getModules().isEmpty() )
+ {
+ final File basedir = pom.getParentFile();
+
+ final List<File> moduleFiles = new ArrayList<File>();
+
+ for ( String module : model.getModules() )
+ {
+ if ( StringUtils.isEmpty( module ) )
+ {
+ continue;
+ }
+
+ module = module.replace( '\\', File.separatorChar ).replace( '/', File.separatorChar );
+
+ File moduleFile = new File( basedir, module );
+
+ if ( moduleFile.isDirectory() )
+ {
+ moduleFile = new File( moduleFile, "pom.xml" );
+ }
+
+ if ( !moduleFile.isFile() )
+ {
+ LOGGER.warn( String.format( "In reactor of: %s: Child module %s of %s does not exist.",
+ topPom,
+ moduleFile,
+ pom ) );
+ continue;
+ }
+
+ if ( Os.isFamily( Os.FAMILY_WINDOWS ) )
+ {
+ // we don't canonicalize on unix to avoid interfering with symlinks
+ try
+ {
+ moduleFile = moduleFile.getCanonicalFile();
+ }
+ catch ( final IOException e )
+ {
+ moduleFile = moduleFile.getAbsoluteFile();
+ }
+ }
+ else
+ {
+ moduleFile = new File( moduleFile.toURI().normalize() );
+ }
+
+ moduleFiles.add( moduleFile );
+ readReactorModels( topPom, moduleFile, models );
+ }
+ }
+ }
+
+ private Model readModel( final File pom )
+ throws ProjectToolsException
+ {
+ Reader reader = null;
+ try
+ {
+ reader = ReaderFactory.newPlatformReader( pom );
+
+ return new MavenXpp3Reader().read( reader, false );
+ }
+ catch ( final IOException e )
+ {
+ LOGGER.error( String.format( "Failed to read POM: %s.\nReason: %s", pom, e.getMessage() ), e );
+ throw new ProjectToolsException( "Failed to read POM: %s. Reason: %s",
+ e,
+ pom.getAbsolutePath(),
+ e.getMessage() );
+ }
+ catch ( final XmlPullParserException e )
+ {
+ LOGGER.error( String.format( "Failed to read POM: %s.\nReason: %s", pom, e.getMessage() ), e );
+ throw new ProjectToolsException( "Failed to read POM: %s. Reason: %s",
+ e,
+ pom.getAbsolutePath(),
+ e.getMessage() );
+ }
+ finally
+ {
+ IOUtils.closeQuietly( reader );
+ }
+ }
+
+}
Propchange: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/DefaultProjectLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectLoader.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectLoader.java?rev=1138204&view=auto
==============================================================================
--- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectLoader.java (added)
+++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectLoader.java Tue Jun 21 21:48:35 2011
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2011 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.maven.mae.project;
+
+import org.apache.maven.mae.project.session.ProjectToolsSession;
+import org.apache.maven.project.MavenProject;
+
+import java.io.File;
+import java.util.List;
+import java.util.Set;
+
+public interface ProjectLoader
+{
+
+ List<MavenProject> buildReactorProjectInstances( final ProjectToolsSession session, final File... rootPoms )
+ throws ProjectToolsException;
+
+ MavenProject buildProjectInstance( final File pomFile, final ProjectToolsSession session )
+ throws ProjectToolsException;
+
+ MavenProject buildProjectInstance( final String groupId, final String artifactId, final String version,
+ final ProjectToolsSession session )
+ throws ProjectToolsException;
+
+ Set<String> retrieveReactorProjectIds( final File rootPom )
+ throws ProjectToolsException;
+
+}
Propchange: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectToolsException.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectToolsException.java?rev=1138204&view=auto
==============================================================================
--- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectToolsException.java (added)
+++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectToolsException.java Tue Jun 21 21:48:35 2011
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2011 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.maven.mae.project;
+
+import org.apache.maven.mae.MAEException;
+
+public class ProjectToolsException
+ extends MAEException
+{
+
+ private static final long serialVersionUID = 1L;
+
+ public ProjectToolsException( final String message, final Object... params )
+ {
+ super( message, params );
+ }
+
+ public ProjectToolsException( final String message, final Throwable cause, final Object... params )
+ {
+ super( message, cause, params );
+ }
+
+ public ProjectToolsException( final String message, final Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public ProjectToolsException( final String message )
+ {
+ super( message );
+ }
+
+}
Propchange: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/ProjectToolsException.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/lib/ProjectToolsLibrary.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/lib/ProjectToolsLibrary.java?rev=1138204&view=auto
==============================================================================
--- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/lib/ProjectToolsLibrary.java (added)
+++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/lib/ProjectToolsLibrary.java Tue Jun 21 21:48:35 2011
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2011 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.maven.mae.project.lib;
+
+import org.apache.maven.mae.conf.AbstractMAELibrary;
+import org.apache.maven.mae.conf.MAELibrary;
+import org.apache.maven.mae.conf.MavenPomVersionProvider;
+import org.commonjava.atservice.annotation.Service;
+
+@Service( MAELibrary.class )
+public class ProjectToolsLibrary
+ extends AbstractMAELibrary
+{
+
+ public ProjectToolsLibrary()
+ {
+ super( "project", "Project-Tools", new MavenPomVersionProvider( "org.commonjava.emb.components",
+ "emb-project-tools" ) );
+ }
+
+}
Propchange: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/lib/ProjectToolsLibrary.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: 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=1138204&view=auto
==============================================================================
--- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/DefaultSessionInjector.java (added)
+++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/DefaultSessionInjector.java Tue Jun 21 21:48:35 2011
@@ -0,0 +1,231 @@
+/*
+ * Copyright 2011 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.maven.mae.project.session;
+
+import org.apache.log4j.Logger;
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.MavenArtifactRepository;
+import org.apache.maven.mae.MAEException;
+import org.apache.maven.mae.boot.embed.MAEEmbedder;
+import org.apache.maven.mae.project.ProjectToolsException;
+import org.apache.maven.model.Repository;
+import org.apache.maven.project.DefaultProjectBuildingRequest;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.repository.RepositorySystem;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.impl.internal.EnhancedLocalRepositoryManager;
+import org.sonatype.aether.repository.AuthenticationSelector;
+import org.sonatype.aether.repository.ProxySelector;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.util.DefaultRepositorySystemSession;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component( role = SessionInjector.class )
+public class DefaultSessionInjector
+ implements SessionInjector
+{
+
+ private static final Logger LOGGER = Logger.getLogger( DefaultSessionInjector.class );
+
+ @Requirement
+ private MAEEmbedder embedder;
+
+ @Requirement
+ private RepositorySystem mavenRepositorySystem;
+
+ @Override
+ public synchronized ProjectBuildingRequest getProjectBuildingRequest( final ProjectToolsSession session )
+ throws ProjectToolsException
+ {
+ ProjectBuildingRequest pbr = session.getProjectBuildingRequest();
+ try
+ {
+ if ( pbr == null )
+ {
+ pbr = embedder.serviceManager().createProjectBuildingRequest();
+
+ pbr.setProcessPlugins( session.isProcessPomPlugins() );
+ pbr.setResolveDependencies( false );
+ pbr.setSystemProperties( System.getProperties() );
+ pbr.setInactiveProfileIds( new ArrayList<String>() );
+ pbr.setRepositoryMerging( ProjectBuildingRequest.RepositoryMerging.REQUEST_DOMINANT );
+
+ final RepositorySystemSession rss = getRepositorySystemSession( session );
+ pbr.setRepositorySession( rss );
+ pbr.setLocalRepository( mavenRepositorySystem.createLocalRepository( rss.getLocalRepository()
+ .getBasedir() ) );
+ pbr.setRemoteRepositories( getArtifactRepositories( session ) );
+
+ session.setProjectBuildingRequest( pbr );
+ }
+ else
+ {
+ pbr = new DefaultProjectBuildingRequest( pbr );
+ pbr.setRepositorySession( getRepositorySystemSession( session ) );
+ }
+ }
+ catch ( final MAEException e )
+ {
+ throw new ProjectToolsException( "Failed to create project-building request: %s", e, e.getMessage() );
+ }
+ catch ( final InvalidRepositoryException e )
+ {
+ throw new ProjectToolsException( "Failed to create local-repository instance. Reason: %s",
+ e,
+ e.getMessage() );
+ }
+
+ return pbr;
+ }
+
+ @Override
+ public RepositorySystemSession getRepositorySystemSession( final ProjectToolsSession session )
+ throws MAEException
+ {
+ final File localRepo = session.getLocalRepositoryDirectory();
+ localRepo.mkdirs();
+
+ RepositorySystemSession sess = session.getRepositorySystemSession();
+ if ( sess == null )
+ {
+ final DefaultRepositorySystemSession rss =
+ new DefaultRepositorySystemSession( embedder.serviceManager()
+ .createAetherRepositorySystemSession( session.getExecutionRequest() ) );
+
+ // session.setWorkspaceReader( new ImportWorkspaceReader( workspace ) );
+ rss.setConfigProperty( ProjectToolsSession.SESSION_KEY, session );
+ rss.setLocalRepositoryManager( new EnhancedLocalRepositoryManager( localRepo ) );
+ rss.setWorkspaceReader( new SessionWorkspaceReader( session ) );
+
+ sess = rss;
+
+ session.setRepositorySystemSession( sess );
+ }
+
+ sess.getData().set( ProjectToolsSession.SESSION_KEY, session );
+
+ return sess;
+ }
+
+ @Override
+ public synchronized List<RemoteRepository> getRemoteRepositories( final ProjectToolsSession session )
+ throws ProjectToolsException
+ {
+ List<RemoteRepository> result = session.getRemoteRepositories();
+
+ if ( result == null )
+ {
+ result = new ArrayList<RemoteRepository>();
+
+ boolean selectorsEnabled = false;
+ AuthenticationSelector authSelector = null;
+ ProxySelector proxySelector = null;
+ if ( session.getRepositorySystemSession() != null )
+ {
+ selectorsEnabled = true;
+ authSelector = session.getRepositorySystemSession().getAuthenticationSelector();
+ proxySelector = session.getRepositorySystemSession().getProxySelector();
+ }
+ else
+ {
+ LOGGER.warn( "Cannot set proxy or authentication information on new RemoteRepositories; "
+ + "RepositorySystemSession is not available in ProjectToolsSession instance." );
+ }
+
+ for ( final ArtifactRepository repo : getArtifactRepositories( session ) )
+ {
+ RemoteRepository r = null;
+ if ( repo instanceof RemoteRepository )
+ {
+ r = (RemoteRepository) repo;
+ }
+ else if ( repo instanceof MavenArtifactRepository )
+ {
+ r = new RemoteRepository( repo.getId(), "default", repo.getUrl() );
+ }
+
+ if ( r != null )
+ {
+ if ( selectorsEnabled )
+ {
+ r.setAuthentication( authSelector.getAuthentication( r ) );
+ r.setProxy( proxySelector.getProxy( r ) );
+ }
+
+ result.add( r );
+ }
+ }
+
+ session.setRemoteRepositories( result );
+ }
+
+ return result;
+ }
+
+ @Override
+ public synchronized List<ArtifactRepository> getArtifactRepositories( final ProjectToolsSession session )
+ throws ProjectToolsException
+ {
+ List<ArtifactRepository> repos = session.getRemoteArtifactRepositories();
+ if ( repos == null )
+ {
+ final Repository[] remoteRepositories = session.getResolveRepositories();
+
+ repos = new ArrayList<ArtifactRepository>( remoteRepositories == null ? 0 : remoteRepositories.length );
+
+ if ( remoteRepositories != null )
+ {
+ for ( final Repository repo : remoteRepositories )
+ {
+ try
+ {
+ repos.add( mavenRepositorySystem.buildArtifactRepository( repo ) );
+ }
+ catch ( final InvalidRepositoryException e )
+ {
+ throw new ProjectToolsException( "Failed to create remote artifact repository instance from: %s\nReason: %s",
+ e,
+ repo,
+ e.getMessage() );
+ }
+ }
+ }
+
+ try
+ {
+ repos.add( mavenRepositorySystem.createDefaultRemoteRepository() );
+ }
+ catch ( final InvalidRepositoryException e )
+ {
+ throw new ProjectToolsException( "Failed to create default (central) repository instance: %s",
+ e,
+ e.getMessage() );
+ }
+
+ session.setRemoteArtifactRepositories( repos );
+ }
+
+ return repos;
+ }
+
+}
Propchange: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/DefaultSessionInjector.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: 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=1138204&view=auto
==============================================================================
--- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/ProjectToolsSession.java (added)
+++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/ProjectToolsSession.java Tue Jun 21 21:48:35 2011
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2011 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.maven.mae.project.session;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.model.Repository;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.collection.DependencySelector;
+import org.sonatype.aether.graph.DependencyFilter;
+import org.sonatype.aether.repository.RemoteRepository;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+
+public interface ProjectToolsSession
+{
+
+ public static final String SESSION_KEY = "dependency-resolver-session";
+
+ List<ArtifactRepository> getRemoteArtifactRepositories();
+
+ ProjectToolsSession setRemoteArtifactRepositories( final List<ArtifactRepository> remoteArtifactRepositories );
+
+ Repository[] getResolveRepositories();
+
+ File getLocalRepositoryDirectory();
+
+ List<RemoteRepository> getRemoteRepositories();
+
+ ProjectToolsSession setRemoteRepositories( final List<RemoteRepository> remoteRepositories );
+
+ ProjectBuildingRequest getProjectBuildingRequest();
+
+ ProjectToolsSession setProjectBuildingRequest( final ProjectBuildingRequest projectBuildingRequest );
+
+ File getWorkdir();
+
+ RepositorySystemSession getRepositorySystemSession();
+
+ ProjectToolsSession setRepositorySystemSession( final RepositorySystemSession repositorySystemSession );
+
+ ProjectToolsSession addReactorProject( final MavenProject project );
+
+ ProjectToolsSession setReactorProjects( final MavenProject... projects );
+
+ ProjectToolsSession setReactorProjects( final Iterable<MavenProject> projects );
+
+ Collection<MavenProject> getReactorProjects();
+
+ File getReactorPom( final Artifact artifact );
+
+ MavenProject getReactorProject( final Artifact artifact );
+
+ ProjectToolsSession copy();
+
+ RemoteRepository[] getRemoteRepositoriesArray();
+
+ ProjectToolsSession setExecutionRequest( MavenExecutionRequest request );
+
+ MavenExecutionRequest getExecutionRequest();
+
+ ProjectToolsSession setResolveThreads( int threads );
+
+ int getResolveThreads();
+
+ boolean isProcessPomPlugins();
+
+ ProjectToolsSession setProcessPomPlugins( boolean resolvePlugins );
+
+ DependencySelector getDependencySelector();
+
+ ProjectToolsSession setDependencySelector( DependencySelector selector );
+
+ DependencyFilter getDependencyFilter();
+
+ ProjectToolsSession setDependencyFilter( DependencyFilter filter );
+
+ void connectProjectHierarchy( Artifact parent, boolean parentPreResolved, Artifact child, boolean childPreResolved );
+
+ <T> T setState( T state );
+
+ <T> T getState( Class<T> stateType );
+
+ <T> T clearState( Class<T> stateType );
+
+ void clearStates();
+
+}
Propchange: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/ProjectToolsSession.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SessionInjector.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/SessionInjector.java?rev=1138204&view=auto
==============================================================================
--- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SessionInjector.java (added)
+++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SessionInjector.java Tue Jun 21 21:48:35 2011
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2011 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.maven.mae.project.session;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.mae.MAEException;
+import org.apache.maven.mae.project.ProjectToolsException;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.repository.RemoteRepository;
+
+import java.util.List;
+
+/**
+ *
+ */
+public interface SessionInjector
+{
+
+ ProjectBuildingRequest getProjectBuildingRequest( final ProjectToolsSession session )
+ throws ProjectToolsException;
+
+ RepositorySystemSession getRepositorySystemSession( final ProjectToolsSession session )
+ throws MAEException;
+
+ List<RemoteRepository> getRemoteRepositories( final ProjectToolsSession session )
+ throws ProjectToolsException;
+
+ List<ArtifactRepository> getArtifactRepositories( final ProjectToolsSession session )
+ throws ProjectToolsException;
+
+}
Propchange: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SessionInjector.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SessionWorkspaceReader.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/SessionWorkspaceReader.java?rev=1138204&view=auto
==============================================================================
--- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SessionWorkspaceReader.java (added)
+++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SessionWorkspaceReader.java Tue Jun 21 21:48:35 2011
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2011 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.maven.mae.project.session;
+
+import org.apache.maven.project.MavenProject;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.repository.WorkspaceReader;
+import org.sonatype.aether.repository.WorkspaceRepository;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SessionWorkspaceReader
+ implements WorkspaceReader
+{
+
+ private static final WorkspaceRepository REPO = new WorkspaceRepository();
+
+ private final ProjectToolsSession session;
+
+ public SessionWorkspaceReader( final ProjectToolsSession session )
+ {
+ this.session = session;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.sonatype.aether.repository.WorkspaceReader#getRepository()
+ */
+ @Override
+ public WorkspaceRepository getRepository()
+ {
+ return REPO;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.sonatype.aether.repository.WorkspaceReader#findArtifact(org.sonatype.aether.artifact.Artifact)
+ */
+ @Override
+ public File findArtifact( final Artifact artifact )
+ {
+ return session.getReactorPom( artifact );
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.sonatype.aether.repository.WorkspaceReader#findVersions(org.sonatype.aether.artifact.Artifact)
+ */
+ @Override
+ public List<String> findVersions( final Artifact artifact )
+ {
+ final List<String> versions = new ArrayList<String>( 1 );
+
+ final MavenProject project = session.getReactorProject( artifact );
+ if ( project != null )
+ {
+ versions.add( project.getVersion() );
+ }
+
+ return versions;
+ }
+
+}
Propchange: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SessionWorkspaceReader.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: 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=1138204&view=auto
==============================================================================
--- maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SimpleProjectToolsSession.java (added)
+++ maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SimpleProjectToolsSession.java Tue Jun 21 21:48:35 2011
@@ -0,0 +1,486 @@
+/*
+ * Copyright 2011 Red Hat, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.maven.mae.project.session;
+
+import static org.apache.maven.artifact.ArtifactUtils.key;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.model.Repository;
+import org.apache.maven.project.DefaultProjectBuildingRequest;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.collection.DependencySelector;
+import org.sonatype.aether.graph.DependencyFilter;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.util.DefaultRepositorySystemSession;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+public class SimpleProjectToolsSession
+ implements ProjectToolsSession
+{
+
+ private final File workdir;
+
+ private final Repository[] resolveRepositories;
+
+ private transient List<ArtifactRepository> remoteArtifactRepositories;
+
+ private transient List<RemoteRepository> remoteRepositories;
+
+ private transient ProjectBuildingRequest projectBuildingRequest;
+
+ private transient RepositorySystemSession repositorySystemSession;
+
+ private transient LinkedHashMap<String, MavenProject> reactorProjects = new LinkedHashMap<String, MavenProject>();
+
+ private final File localRepositoryDirectory;
+
+ private MavenExecutionRequest executionRequest;
+
+ private int resolveThreads = 4;
+
+ private boolean resolvePlugins;
+
+ private DependencySelector dependencySelector;
+
+ private DependencyFilter filter;
+
+ private transient Map<Class<?>, Object> states = new HashMap<Class<?>, Object>();
+
+ public SimpleProjectToolsSession( final File workdir, final Repository... resolveRepositories )
+ {
+ this( workdir, new File( workdir, "local-repository" ), resolveRepositories );
+ }
+
+ public SimpleProjectToolsSession( final File workdir, final File localRepositoryDirectory,
+ final Repository... resolveRepositories )
+ {
+ this.workdir = workdir;
+ this.localRepositoryDirectory = localRepositoryDirectory;
+ this.resolveRepositories = resolveRepositories;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getRemoteArtifactRepositories()
+ */
+ @Override
+ public List<ArtifactRepository> getRemoteArtifactRepositories()
+ {
+ return remoteArtifactRepositories;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#setRemoteArtifactRepositories(java.util.List)
+ */
+ @Override
+ public ProjectToolsSession setRemoteArtifactRepositories( final List<ArtifactRepository> remoteArtifactRepositories )
+ {
+ this.remoteArtifactRepositories = remoteArtifactRepositories;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getResolveRepositories()
+ */
+ @Override
+ public Repository[] getResolveRepositories()
+ {
+ return resolveRepositories;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getRemoteRepositories()
+ */
+ @Override
+ public List<RemoteRepository> getRemoteRepositories()
+ {
+ return remoteRepositories;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getRemoteRepositoriesArray()
+ */
+ @Override
+ public RemoteRepository[] getRemoteRepositoriesArray()
+ {
+ return remoteRepositories == null ? new RemoteRepository[] {}
+ : remoteRepositories.toArray( new RemoteRepository[] {} );
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#setRemoteRepositories(java.util.List)
+ */
+ @Override
+ public ProjectToolsSession setRemoteRepositories( final List<RemoteRepository> remoteRepositories )
+ {
+ this.remoteRepositories = remoteRepositories;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getProjectBuildingRequest()
+ */
+ @Override
+ public ProjectBuildingRequest getProjectBuildingRequest()
+ {
+ return projectBuildingRequest;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#setProjectBuildingRequest(org.apache.maven.project.ProjectBuildingRequest)
+ */
+ @Override
+ public ProjectToolsSession setProjectBuildingRequest( final ProjectBuildingRequest projectBuildingRequest )
+ {
+ this.projectBuildingRequest = projectBuildingRequest;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getWorkdir()
+ */
+ @Override
+ public File getWorkdir()
+ {
+ return workdir;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getRepositorySystemSession()
+ */
+ @Override
+ public RepositorySystemSession getRepositorySystemSession()
+ {
+ return repositorySystemSession;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#setRepositorySystemSession(org.sonatype.aether.RepositorySystemSession)
+ */
+ @Override
+ public ProjectToolsSession setRepositorySystemSession( final RepositorySystemSession repositorySystemSession )
+ {
+ this.repositorySystemSession = repositorySystemSession;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#addReactorProject(org.apache.maven.project.MavenProject)
+ */
+ @Override
+ public synchronized ProjectToolsSession addReactorProject( final MavenProject project )
+ {
+ final String id = key( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+ if ( !reactorProjects.containsKey( id ) )
+ {
+ reactorProjects.put( id, project );
+ }
+
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#setReactorProjects(org.apache.maven.project.MavenProject)
+ */
+ @Override
+ public synchronized ProjectToolsSession setReactorProjects( final MavenProject... projects )
+ {
+ reactorProjects.clear();
+ for ( final MavenProject project : projects )
+ {
+ addReactorProject( project );
+ }
+
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#setReactorProjects(java.lang.Iterable)
+ */
+ @Override
+ public synchronized ProjectToolsSession setReactorProjects( final Iterable<MavenProject> projects )
+ {
+ reactorProjects.clear();
+ for ( final MavenProject project : projects )
+ {
+ addReactorProject( project );
+ }
+
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getReactorProjects()
+ */
+ @Override
+ public Collection<MavenProject> getReactorProjects()
+ {
+ return new ArrayList<MavenProject>( reactorProjects.values() );
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getReactorPom(org.sonatype.aether.artifact.Artifact)
+ */
+ @Override
+ public File getReactorPom( final Artifact artifact )
+ {
+ final MavenProject project = getReactorProject( artifact );
+ return project == null ? null : project.getFile();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getReactorProject(org.sonatype.aether.artifact.Artifact)
+ */
+ @Override
+ public MavenProject getReactorProject( final Artifact artifact )
+ {
+ final String id = key( artifact.getGroupId(), artifact.getArtifactId(), artifact.getBaseVersion() );
+ return reactorProjects.get( id );
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#copyOf(org.apache.maven.mae.project.session.ProjectToolsSession)
+ */
+ @Override
+ public ProjectToolsSession copy()
+ {
+ final SimpleProjectToolsSession copy = new SimpleProjectToolsSession( workdir, resolveRepositories );
+
+ copy.projectBuildingRequest =
+ projectBuildingRequest == null ? null : new DefaultProjectBuildingRequest( projectBuildingRequest );
+
+ copy.reactorProjects = new LinkedHashMap<String, MavenProject>( reactorProjects );
+
+ copy.remoteArtifactRepositories =
+ remoteArtifactRepositories == null ? null : new ArrayList<ArtifactRepository>( remoteArtifactRepositories );
+
+ copy.remoteRepositories =
+ remoteRepositories == null ? null : new ArrayList<RemoteRepository>( remoteRepositories );
+
+ copy.repositorySystemSession =
+ repositorySystemSession == null ? null : new DefaultRepositorySystemSession( repositorySystemSession );
+
+ return copy;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getLocalRepositoryDirectory()
+ */
+ @Override
+ public File getLocalRepositoryDirectory()
+ {
+ return localRepositoryDirectory;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#setExecutionRequest(org.apache.maven.execution.MavenExecutionRequest)
+ */
+ @Override
+ public ProjectToolsSession setExecutionRequest( final MavenExecutionRequest request )
+ {
+ executionRequest = request;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getExecutionRequest()
+ */
+ @Override
+ public MavenExecutionRequest getExecutionRequest()
+ {
+ return executionRequest;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#setResolveThreads(int)
+ */
+ @Override
+ public ProjectToolsSession setResolveThreads( final int threads )
+ {
+ resolveThreads = threads;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getResolveThreads()
+ */
+ @Override
+ public int getResolveThreads()
+ {
+ return resolveThreads;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#isProcessPomPlugins()
+ */
+ @Override
+ public boolean isProcessPomPlugins()
+ {
+ return resolvePlugins;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#setProcessPomPlugins(boolean)
+ */
+ @Override
+ public ProjectToolsSession setProcessPomPlugins( final boolean resolvePlugins )
+ {
+ this.resolvePlugins = resolvePlugins;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getDependencySelector()
+ */
+ @Override
+ public DependencySelector getDependencySelector()
+ {
+ return dependencySelector;
+ }
+
+ @Override
+ public ProjectToolsSession setDependencySelector( final DependencySelector dependencySelector )
+ {
+ this.dependencySelector = dependencySelector;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#getDependencyFilter()
+ */
+ @Override
+ public DependencyFilter getDependencyFilter()
+ {
+ return filter;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#setDependencyFilter(org.sonatype.aether.graph.DependencyFilter)
+ */
+ @Override
+ public ProjectToolsSession setDependencyFilter( final DependencyFilter filter )
+ {
+ this.filter = filter;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.apache.maven.mae.project.session.ProjectToolsSession#connectProjectHierarchy(org.sonatype.aether.artifact.Artifact, boolean, org.sonatype.aether.artifact.Artifact, boolean)
+ */
+ @Override
+ public void connectProjectHierarchy( Artifact parent, boolean parentPreResolved, Artifact child,
+ boolean childPreResolved )
+ {
+ // NOP.
+ }
+
+ @SuppressWarnings( "unchecked" )
+ public <T> T setState( final T state )
+ {
+ if ( state != null )
+ {
+ return (T) states.put( state.getClass(), state );
+ }
+
+ return null;
+ }
+
+ public void clearStates()
+ {
+ states.clear();
+ }
+
+ @SuppressWarnings( "unchecked" )
+ public <T> T clearState( final Class<T> type )
+ {
+ return (T) states.remove( type );
+ }
+
+ public <T> T getState( final Class<T> type )
+ {
+ final Object state = states.get( type );
+ return state == null ? null : type.cast( state );
+ }
+
+}
Propchange: maven/sandbox/trunk/mae/mae-components/mae-project-tools/src/main/java/org/apache/maven/mae/project/session/SimpleProjectToolsSession.java
------------------------------------------------------------------------------
svn:eol-style = native