{
checksumSha1 = checksummedFile.calculateChecksum( ChecksumAlgorithm.SHA1 );
}
catch ( IOException e )
{
throw new ConsumerException( e.getMessage(), e );
}
MetadataRepository metadataRepository = repositorySession.getRepository();
List<ArtifactMetadata> results;
try
{
results = metadataRepository.getArtifactsByChecksum( repoId, checksumSha1 );
}
catch ( MetadataRepositoryException e )
{
throw new ConsumerException( e.getMessage(), e );
}
if ( CollectionUtils.isNotEmpty( results ) )
{
ArtifactMetadata originalArtifact;
try
{
originalArtifact = pathTranslator.getArtifactForPath( repoId, path );
}
catch ( Exception e )
{
log.warn( "Not reporting problem for invalid artifact in checksum check: " + e.getMessage() );
return;
}
for ( ArtifactMetadata dupArtifact : results )
{
String id = path.substring( path.lastIndexOf( "/" ) + 1 );
if ( dupArtifact.getId().equals( id )
&& dupArtifact.getNamespace().equals( originalArtifact.getNamespace() )
&& dupArtifact.getProject().equals( originalArtifact.getProject() )
&& dupArtifact.getVersion().equals( originalArtifact.getVersion() ) )
{
// Skip reference to itself.
if ( log.isDebugEnabled() )
{
log.debug( "Not counting duplicate for artifact " + dupArtifact + " for path " + path );
}
continue;
}
RepositoryProblemFacet problem = new RepositoryProblemFacet();
problem.setRepositoryId( repoId );
problem.setNamespace( originalArtifact.getNamespace() );
problem.setProject( originalArtifact.getProject() );
problem.setVersion( originalArtifact.getVersion() );
problem.setId( id );
// FIXME: need to get the right storage resolver for the repository the dupe artifact is in, it might be
// a different type
// FIXME: we need the project version here, not the artifact version
problem.setMessage( "Duplicate Artifact Detected: " + path + " <--> " + pathTranslator.toPath(
dupArtifact.getNamespace(), dupArtifact.getProject(), dupArtifact.getVersion(),
dupArtifact.getId() ) );
problem.setProblem( "duplicate-artifact" );
try
{
metadataRepository.addMetadataFacet( repoId, problem );
}
catch ( MetadataRepositoryException e )
{
throw new ConsumerException( e.getMessage(), e );
}
}
}
}