package com.redhat.rcm.version.maven;
import java.io.File;
import java.util.List;
import org.apache.maven.mae.project.internal.SimpleModelResolver;
import org.apache.maven.mae.project.key.FullProjectKey;
import org.apache.maven.model.Repository;
import org.apache.maven.model.building.FileModelSource;
import org.apache.maven.model.building.ModelSource;
import org.apache.maven.model.resolution.InvalidRepositoryException;
import org.apache.maven.model.resolution.ModelResolver;
import org.apache.maven.model.resolution.UnresolvableModelException;
import org.slf4j.LoggerFactory;
import org.sonatype.aether.RepositorySystemSession;
import org.sonatype.aether.impl.ArtifactResolver;
import org.sonatype.aether.impl.RemoteRepositoryManager;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.util.DefaultRequestTrace;
import com.redhat.rcm.version.mgr.session.VersionManagerSession;
public class VManModelResolver
implements ModelResolver
{
private final SimpleModelResolver delegate;
private VManWorkspaceReader workspaceReader;
public VManModelResolver( final VersionManagerSession session, final File pom,
final ArtifactResolver artifactResolver,
final RemoteRepositoryManager remoteRepositoryManager )
{
final RepositorySystemSession rss = session.getRepositorySystemSession();
final List<RemoteRepository> repos = session.getRemoteRepositoriesForResolution();
delegate =
new SimpleModelResolver( rss, repos, new DefaultRequestTrace( pom.getPath() ), artifactResolver,
remoteRepositoryManager );
if ( session.getWorkspaceReader() != null )
{
this.workspaceReader = session.getWorkspaceReader();
}
else
{
LoggerFactory.getLogger( getClass() ).warn( "No workspace reader found in session! Initializing one now..." );
this.workspaceReader = new VManWorkspaceReader( session );
session.setWorkspaceReader( workspaceReader );
}
}
@Override
public ModelSource resolveModel( final String groupId, final String artifactId, final String version )
throws UnresolvableModelException
{
final FullProjectKey key = new FullProjectKey( groupId, artifactId, version );
final File pom = workspaceReader.getSessionPOM( key );
if ( pom != null )
{
return new FileModelSource( pom );
}
return delegate.resolveModel( groupId, artifactId, version );
}
@Override
public void addRepository( final Repository repository )
throws InvalidRepositoryException
{
// delegate.addRepository( repository );
}
@Override
public ModelResolver newCopy()
{
return this;
}
}