SearchResultLimits limits = new SearchResultLimits( SearchResultLimits.ALL_PAGES );
SearchResults results;
results = search.search( "", observableRepos, queryString, limits, null );
RepositorySession repositorySession = repositorySessionFactory.createSession();
try
{
MetadataResolver metadataResolver = repositorySession.getResolver();
for ( SearchResultHit resultHit : results.getHits() )
{
List<String> resultHitVersions = resultHit.getVersions();
if ( resultHitVersions != null )
{
for ( String version : resultHitVersions )
{
Artifact artifact = null;
for ( String repoId : observableRepos )
{
// slight behaviour change to previous implementation: instead of allocating "jar" when not
// found in the database, we can rely on the metadata repository to create it on the fly. We
// just allocate the default packaging if the Maven facet is not found.
FacetedMetadata model = metadataResolver.resolveProjectVersion( repositorySession, repoId,
resultHit.getGroupId(),
resultHit.getArtifactId(),
version );
if ( model != null )
{
String packaging = "jar";
MavenProjectFacet facet = (MavenProjectFacet) model.getFacet(
MavenProjectFacet.FACET_ID );
if ( facet != null && facet.getPackaging() != null )
{
packaging = facet.getPackaging();
}
artifact = new Artifact( repoId, resultHit.getGroupId(), resultHit.getArtifactId(),
version, packaging );
break;
}
}
if ( artifact != null )
{
artifacts.add( artifact );
}
}
}
}
}
finally
{
repositorySession.close();
}
return artifacts;
}