blob: 83ca8cf2aafdb001d40292e6b6ab8bbaeea6fd51 [file] [log] [blame]
/*
* 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.
*/
package org.apache.maven.mae.project.session;
import static org.apache.maven.artifact.ArtifactUtils.key;
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;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.mae.project.event.EventDispatcher;
import org.apache.maven.model.Repository;
import org.apache.maven.model.building.ModelBuildingRequest;
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;
public class SimpleProjectToolsSession
implements ProjectToolsSession
{
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 Repository[] resolveRepositories;
private File localRepositoryDirectory;
private MavenExecutionRequest executionRequest;
private int resolveThreads = 4;
private boolean resolvePlugins;
private DependencySelector dependencySelector;
private DependencyFilter filter;
private int pomValidationLevel = ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0;
private ProjectBuildingRequest templateProjectBuildingRequest;
private transient Map<Class<?>, Object> states = new HashMap<Class<?>, Object>();
public SimpleProjectToolsSession()
{
}
/**
* {@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#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();
copy.resolveRepositories = resolveRepositories;
copy.localRepositoryDirectory = localRepositoryDirectory;
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 ProjectToolsSession connectProjectHierarchy( final Artifact parent, final boolean parentPreResolved,
final Artifact child, final boolean childPreResolved )
{
// NOP.
return this;
}
@Override
@SuppressWarnings( "unchecked" )
public <T> T setState( final T state )
{
if ( state != null )
{
return (T) states.put( state.getClass(), state );
}
return null;
}
@Override
public void clearStates()
{
states.clear();
}
@Override
@SuppressWarnings( "unchecked" )
public <T> T clearState( final Class<T> type )
{
return (T) states.remove( type );
}
@Override
public <T> T getState( final Class<T> type )
{
final Object state = states.get( type );
return state == null ? null : type.cast( state );
}
public void setResolveRepositories( final Repository... resolveRepositories )
{
this.resolveRepositories = resolveRepositories;
}
public void setLocalRepositoryDirectory( final File localRepositoryDirectory )
{
this.localRepositoryDirectory = localRepositoryDirectory;
}
@Override
public int getPomValidationLevel()
{
return pomValidationLevel;
}
@Override
public ProjectToolsSession setPomValidationLevel( final int pomValidationLevel )
{
this.pomValidationLevel = pomValidationLevel;
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;
}
private final Map<Class<?>, EventDispatcher<?>> eventDispatchers = new HashMap<Class<?>, EventDispatcher<?>>();
@SuppressWarnings( "unchecked" )
@Override
public <E> EventDispatcher<E> getEventDispatcher( final Class<E> eventType )
{
return (EventDispatcher<E>) eventDispatchers.get( eventType );
}
@Override
public <E> ProjectToolsSession setEventDispatcher( final Class<E> eventType, final EventDispatcher<E> dispatcher )
{
eventDispatchers.put( eventType, dispatcher );
return this;
}
}