archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
/**
     * A convienence method to execute all of the active selected consumers for a
     * particular arbitrary file.
     * NOTE: Make sure that there is no repository scanning task executing before invoking this so as to prevent
     * the index writer/reader of the current index-content consumer executing from getting closed. For an example,
     * see ArchivaDavResource#executeConsumers( File ).
     *  @param repository             the repository configuration to use.
     * @param localFile              the local file to execute the consumers against.
     * @param updateRelatedArtifacts TODO
     */
A convienence method to execute all of the active selected consumers for a
particular arbitrary file.
NOTE: Make sure that there is no repository scanning task executing before invoking this so as to prevent
the index writer/reader of the current index-content consumer executing from getting closed. For an example,
see ArchivaDavResource#executeConsumers( File ).
@param repository             the repository configuration to use.
@param localFile              the local file to execute the consumers against.
A convienence method to execute all of the active selected consumers for a particular arbitrary file . NOTE : Make sure that there is no repository scanning task executing before invoking this so as to prevent the index writer / reader of the current index - content consumer executing from getting closed . For an example see ArchivaDavResource#executeConsumers ( File ) . @param repository the repository configuration to use . @param localFile the local file to execute the consumers against .
public void executeConsumers( ManagedRepository repository, Path localFile, boolean updateRelatedArtifacts )
        throws ConsumerException
    {
        List<KnownRepositoryContentConsumer> selectedKnownConsumers = null;
        try
        {
            Closure<RepositoryContentConsumer> triggerBeginScan = new TriggerBeginScanClosure( repository, getStartTime(), false );
            selectedKnownConsumers = getSelectedKnownConsumers();
            if ( !updateRelatedArtifacts )
            {
                List<KnownRepositoryContentConsumer> clone = new ArrayList<>();
                clone.addAll( selectedKnownConsumers );
                for ( KnownRepositoryContentConsumer consumer : clone )
                {
                    if ( consumer.getId().equals( "create-missing-checksums" ) || consumer.getId().equals(
                        "metadata-updater" ) )
                    {
                        selectedKnownConsumers.remove( consumer );
                    }
                }
            }
            List<InvalidRepositoryContentConsumer> selectedInvalidConsumers = getSelectedInvalidConsumers();
            IterableUtils.forEach( selectedKnownConsumers, triggerBeginScan );
            IterableUtils.forEach( selectedInvalidConsumers, triggerBeginScan );
            Path repoPath = PathUtil.getPathFromUri( repository.getLocation() );
            BaseFile baseFile = new BaseFile( repoPath.toString(), localFile.toFile() );
            ConsumerWantsFilePredicate predicate = new ConsumerWantsFilePredicate( repository );
            predicate.setBasefile( baseFile );
            predicate.setCaseSensitive( false );
            ConsumerProcessFileClosure closure = new ConsumerProcessFileClosure();
            closure.setBasefile( baseFile );
            closure.setExecuteOnEntireRepo( false );
            Closure<RepositoryContentConsumer> processIfWanted = IfClosure.ifClosure( predicate, closure );
            IterableUtils.forEach( selectedKnownConsumers, processIfWanted );
            if ( predicate.getWantedFileCount() <= 0 )
            {
                IterableUtils.forEach( selectedInvalidConsumers, closure );
            }
            TriggerScanCompletedClosure scanCompletedClosure = new TriggerScanCompletedClosure( repository, false );
            IterableUtils.forEach( selectedKnownConsumers, scanCompletedClosure );
        }
        finally
        {
            /* TODO: This is never called by the repository scanner instance, so not calling here either - but it probably should be?
                        IterableUtils.forEach( availableKnownConsumers, triggerCompleteScan );
                        IterableUtils.forEach( availableInvalidConsumers, triggerCompleteScan );
            */
            releaseSelectedKnownConsumers( selectedKnownConsumers );
        }
    }
public void executeConsumers ( ManagedRepository repository , Path localFile , boolean updateRelatedArtifacts ) throws ConsumerException { List < KnownRepositoryContentConsumer > selectedKnownConsumers = null ; try { Closure < RepositoryContentConsumer > triggerBeginScan = new TriggerBeginScanClosure ( repository , getStartTime ( ) , false ) ; selectedKnownConsumers = getSelectedKnownConsumers ( ) ; if ( ! updateRelatedArtifacts ) { List < KnownRepositoryContentConsumer > clone = new ArrayList < > ( ) ; clone . addAll ( selectedKnownConsumers ) ; for ( KnownRepositoryContentConsumer consumer : clone ) { if ( consumer . getId ( ) . equals ( "create-missing-checksums" ) || consumer . getId ( ) . equals ( "metadata-updater" ) ) { selectedKnownConsumers . remove ( consumer ) ; } } } List < InvalidRepositoryContentConsumer > selectedInvalidConsumers = getSelectedInvalidConsumers ( ) ; IterableUtils . forEach ( selectedKnownConsumers , triggerBeginScan ) ; IterableUtils . forEach ( selectedInvalidConsumers , triggerBeginScan ) ; Path repoPath = PathUtil . getPathFromUri ( repository . getLocation ( ) ) ; BaseFile baseFile = new BaseFile ( repoPath . toString ( ) , localFile . toFile ( ) ) ; ConsumerWantsFilePredicate predicate = new ConsumerWantsFilePredicate ( repository ) ; predicate . setBasefile ( baseFile ) ; predicate . setCaseSensitive ( false ) ; ConsumerProcessFileClosure closure = new ConsumerProcessFileClosure ( ) ; closure . setBasefile ( baseFile ) ; closure . setExecuteOnEntireRepo ( false ) ; Closure < RepositoryContentConsumer > processIfWanted = IfClosure . ifClosure ( predicate , closure ) ; IterableUtils . forEach ( selectedKnownConsumers , processIfWanted ) ; if ( predicate . getWantedFileCount ( ) <= 0 ) { IterableUtils . forEach ( selectedInvalidConsumers , closure ) ; } TriggerScanCompletedClosure scanCompletedClosure = new TriggerScanCompletedClosure ( repository , false ) ; IterableUtils . forEach ( selectedKnownConsumers , scanCompletedClosure ) ; } finally { /* TODO: This is never called by the repository scanner instance, so not calling here either - but it probably should be?
                        IterableUtils.forEach( availableKnownConsumers, triggerCompleteScan );
                        IterableUtils.forEach( availableInvalidConsumers, triggerCompleteScan );
            */ releaseSelectedKnownConsumers ( selectedKnownConsumers ) ; } }
A convienence method to execute all of the active selected consumers for a
 particular arbitrary file.
A convienence method to execute all of the active selected consumers for a particular arbitrary file .
// Run the repository consumers // MRM-1212/MRM-1197  // - do not create missing/fix invalid checksums and update metadata when deploying from webdav since these are uploaded by maven // yuck. In case you can't read this, it says // "process the file if the consumer has it in the includes list, and not in the excludes list" // Nothing known processed this file.  It is invalid!