throws TaskExecutionException
{
ArtifactIndexingTask indexingTask = (ArtifactIndexingTask) task;
ManagedRepository repository = indexingTask.getRepository();
IndexingContext context = indexingTask.getContext();
if ( ArtifactIndexingTask.Action.FINISH.equals( indexingTask.getAction() )
&& indexingTask.isExecuteOnEntireRepo() )
{
try
{
long start = System.currentTimeMillis();
nexusIndexer.scan( context, null, indexingTask.isOnlyUpdate() );
long end = System.currentTimeMillis();
log.info( "indexed maven repository: {}, onlyUpdate: {}, time {} ms", repository.getId(),
indexingTask.isOnlyUpdate(), ( end - start ) );
}
catch ( IOException e )
{
throw new TaskExecutionException( "Error scan repository " + repository, e );
}
log.debug( "Finishing indexing task on repo: {}", repository.getId() );
finishIndexingTask( indexingTask, repository, context );
}
else
{
// create context if not a repo scan request
if ( !indexingTask.isExecuteOnEntireRepo() )
{
try
{
log.debug( "Creating indexing context on resource: {}", ( indexingTask.getResourceFile() == null
? "none"
: indexingTask.getResourceFile().getPath() ) );
context = managedRepositoryAdmin.createIndexContext( repository );
}
catch ( RepositoryAdminException e )
{
log.error( "Error occurred while creating context: " + e.getMessage() );
throw new TaskExecutionException( "Error occurred while creating context: " + e.getMessage(), e );
}
}
if ( context == null || context.getIndexDirectory() == null )
{
throw new TaskExecutionException( "Trying to index an artifact but the context is already closed" );
}
try
{
File artifactFile = indexingTask.getResourceFile();
if ( artifactFile == null )
{
log.debug( "no artifact pass in indexing task so skip it" );
}
else
{
ArtifactContext ac = artifactContextProducer.getArtifactContext( context, artifactFile );
if ( ac != null )
{
// MRM-1779 pom must be indexed too
// TODO make that configurable?
if ( artifactFile.getPath().endsWith( ".pom" ) )
{
ac.getArtifactInfo().fextension = "pom";
ac.getArtifactInfo().packaging = "pom";
ac.getArtifactInfo().classifier = "pom";
}
if ( indexingTask.getAction().equals( ArtifactIndexingTask.Action.ADD ) )
{
//IndexSearcher s = context.getIndexSearcher();
//String uinfo = ac.getArtifactInfo().getUinfo();
//TopDocs d = s.search( new TermQuery( new Term( ArtifactInfo.UINFO, uinfo ) ), 1 );
BooleanQuery q = new BooleanQuery();
q.add( nexusIndexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression(
ac.getArtifactInfo().groupId ) ), BooleanClause.Occur.MUST );
q.add( nexusIndexer.constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression(
ac.getArtifactInfo().artifactId ) ), BooleanClause.Occur.MUST );
q.add( nexusIndexer.constructQuery( MAVEN.VERSION, new SourcedSearchExpression(
ac.getArtifactInfo().version ) ), BooleanClause.Occur.MUST );
if ( ac.getArtifactInfo().classifier != null )
{
q.add( nexusIndexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression(
ac.getArtifactInfo().classifier ) ), BooleanClause.Occur.MUST );
}
if ( ac.getArtifactInfo().packaging != null )
{
q.add( nexusIndexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression(
ac.getArtifactInfo().packaging ) ), BooleanClause.Occur.MUST );
}
FlatSearchRequest flatSearchRequest = new FlatSearchRequest( q, context );
FlatSearchResponse flatSearchResponse = nexusIndexer.searchFlat( flatSearchRequest );
if ( flatSearchResponse.getResults().isEmpty() )
{
log.debug( "Adding artifact '{}' to index..", ac.getArtifactInfo() );
nexusIndexer.addArtifactToIndex( ac, context );
}
else
{
log.debug( "Updating artifact '{}' in index..", ac.getArtifactInfo() );
// TODO check if update exists !!
nexusIndexer.deleteArtifactFromIndex( ac, context );
nexusIndexer.addArtifactToIndex( ac, context );
}
context.updateTimestamp();
context.commit();
}
else
{