package com.redhat.rcm.version.maven;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.maven.mae.project.key.FullProjectKey;
import org.apache.maven.mae.project.key.VersionlessProjectKey;
import org.apache.maven.project.MavenProject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonatype.aether.artifact.Artifact;
import org.sonatype.aether.repository.WorkspaceReader;
import org.sonatype.aether.repository.WorkspaceRepository;
import com.redhat.rcm.version.mgr.session.VersionManagerSession;
import com.redhat.rcm.version.model.Project;
public class VManWorkspaceReader
implements WorkspaceReader
{
private final Logger logger = LoggerFactory.getLogger( getClass() );
private final WorkspaceRepository repo = new WorkspaceRepository( "vman", "vman" );
private final VersionManagerSession session;
private final Map<FullProjectKey, File> projectFiles = new HashMap<FullProjectKey, File>();
public VManWorkspaceReader( final VersionManagerSession session )
{
this.session = session;
}
@Override
public WorkspaceRepository getRepository()
{
return repo;
}
@Override
public synchronized File findArtifact( final Artifact artifact )
{
if ( !"pom".equals( artifact.getExtension() ) )
{
return null;
}
final FullProjectKey key =
new FullProjectKey( artifact.getArtifactId(), artifact.getGroupId(), artifact.getVersion() );
File f = projectFiles.get( key );
if ( f == null )
{
f = getSessionPOM( key );
if ( f != null )
{
projectFiles.put( key, f );
}
}
return f;
}
public File getSessionPOM( final FullProjectKey key )
{
File pom = session.getPeekedPom( key );
logger.info( "Peeked file for key: '{}' is: {}", key, pom );
if ( pom == null && key.equals( session.getToolchainKey() ) )
{
final MavenProject p = session.getToolchainProject();
pom = p.getFile();
}
if ( pom == null && session.isBom( key ) )
{
final MavenProject p = session.getBOMProject( key );
pom = p.getFile();
}
return pom;
}
@Override
public List<String> findVersions( final Artifact artifact )
{
final List<String> versions = new ArrayList<String>( 1 );
final VersionlessProjectKey vpk = new VersionlessProjectKey( artifact.getGroupId(), artifact.getArtifactId() );
final Project project = session.getCurrentProject( vpk );
if ( project != null )
{
versions.add( project.getVersion() );
}
else if ( vpk.equals( session.getToolchainKey() ) )
{
versions.add( session.getToolchainKey()
.getVersion() );
}
else
{
final List<FullProjectKey> bomCoords = session.getBomCoords();
for ( final FullProjectKey bomCoord : bomCoords )
{
if ( vpk.equals( bomCoord ) )
{
versions.add( bomCoord.getVersion() );
break;
}
}
}
return versions;
}
}