org.apache.archiva.reports.consumers
Class DuplicateArtifactsConsumer

java.lang.Object
  extended by org.apache.archiva.consumers.AbstractMonitoredConsumer
      extended by org.apache.archiva.reports.consumers.DuplicateArtifactsConsumer
All Implemented Interfaces:
Consumer, KnownRepositoryContentConsumer, RepositoryContentConsumer, org.apache.archiva.redback.components.registry.RegistryListener

@Service(value="knownRepositoryContentConsumer#duplicate-artifacts")
@Scope(value="prototype")
public class DuplicateArtifactsConsumer
extends AbstractMonitoredConsumer
implements KnownRepositoryContentConsumer, org.apache.archiva.redback.components.registry.RegistryListener

Search the artifact repository of known SHA1 Checksums for potential duplicate artifacts.

TODO: no need for this to be a scanner - we can just query the database / content repository to get a full list


Field Summary
private  ArchivaConfiguration configuration
           
private  String description
           
private  FileTypes filetypes
           
private  String id
           
private  List<String> includes
           
private  org.slf4j.Logger log
           
private  RepositoryPathTranslator pathTranslator
          FIXME: needs to be selected based on the repository in question
private  String repoId
           
private  File repositoryDir
           
private  RepositorySession repositorySession
           
private  RepositorySessionFactory repositorySessionFactory
          FIXME: this could be multiple implementations and needs to be configured.
 
Constructor Summary
DuplicateArtifactsConsumer()
           
 
Method Summary
 void afterConfigurationChange(org.apache.archiva.redback.components.registry.Registry registry, String propertyName, Object propertyValue)
           
 void beforeConfigurationChange(org.apache.archiva.redback.components.registry.Registry registry, String propertyName, Object propertyValue)
           
 void beginScan(ManagedRepository repo, Date whenGathered)
           Event that triggers at the beginning of a scan.
 void beginScan(ManagedRepository repo, Date whenGathered, boolean executeOnEntireRepo)
           Event that triggers at the beginning of a scan, where you can also indicate whether the consumers will be executed on an entire repository or on a specific resource.
 void completeScan()
           Event that triggers on the completion of a scan.
 void completeScan(boolean executeOnEntireRepo)
           
 String getDescription()
          The human readable description for this consumer.
 List<String> getExcludes()
          Get the list of excluded file patterns for this consumer.
 String getId()
          This is the id for the consumer.
 List<String> getIncludes()
          Get the list of included file patterns for this consumer.
 void initialize()
           
private  void initIncludes()
           
 boolean isPermanent()
          Flag indicating permanance of consumer.
 void processFile(String path)
           Event indicating a file is to be processed by this consumer.
 void processFile(String path, boolean executeOnEntireRepo)
           
 
Methods inherited from class org.apache.archiva.consumers.AbstractMonitoredConsumer
addConsumerMonitor, getDefaultArtifactExclusions, isProcessUnmodified, removeConsumerMonitor, triggerConsumerError, triggerConsumerInfo, triggerConsumerWarning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.archiva.consumers.RepositoryContentConsumer
isProcessUnmodified
 
Methods inherited from interface org.apache.archiva.consumers.Consumer
addConsumerMonitor, removeConsumerMonitor
 

Field Detail

log

private org.slf4j.Logger log

id

private String id

description

private String description

configuration

@Inject
private ArchivaConfiguration configuration

filetypes

@Inject
private FileTypes filetypes

repositorySessionFactory

@Inject
private RepositorySessionFactory repositorySessionFactory
FIXME: this could be multiple implementations and needs to be configured.


includes

private List<String> includes

repositoryDir

private File repositoryDir

repoId

private String repoId

pathTranslator

@Inject
@Named(value="repositoryPathTranslator#maven2")
private RepositoryPathTranslator pathTranslator
FIXME: needs to be selected based on the repository in question


repositorySession

private RepositorySession repositorySession
Constructor Detail

DuplicateArtifactsConsumer

public DuplicateArtifactsConsumer()
Method Detail

getId

public String getId()
Description copied from interface: Consumer
This is the id for the consumer.

Specified by:
getId in interface Consumer
Returns:
the consumer id.

getDescription

public String getDescription()
Description copied from interface: Consumer
The human readable description for this consumer.

Specified by:
getDescription in interface Consumer
Returns:
the human readable description for this consumer.

isPermanent

public boolean isPermanent()
Description copied from interface: Consumer
Flag indicating permanance of consumer. (if it can be disabled or not)

Specified by:
isPermanent in interface Consumer
Returns:
true indicating that consumer is permanent and cannot be disabled.

getIncludes

public List<String> getIncludes()
Description copied from interface: RepositoryContentConsumer
Get the list of included file patterns for this consumer.

Specified by:
getIncludes in interface RepositoryContentConsumer
Returns:
the list of String patterns. (example: "**/*.pom")

getExcludes

public List<String> getExcludes()
Description copied from interface: RepositoryContentConsumer
Get the list of excluded file patterns for this consumer.

Specified by:
getExcludes in interface RepositoryContentConsumer
Returns:
the list of String patterns. (example: "**/*.pom") - (can be null for no exclusions)

beginScan

public void beginScan(ManagedRepository repo,
                      Date whenGathered)
               throws ConsumerException
Description copied from interface: RepositoryContentConsumer

Event that triggers at the beginning of a scan.

NOTE: This would be a good place to initialize the consumer, to lock any resources, and to generally start tracking the scan as a whole.

Specified by:
beginScan in interface RepositoryContentConsumer
Parameters:
repo - the repository that this consumer is being used for.
whenGathered - the start of the repository scan
Throws:
ConsumerException - if there was a problem with using the provided repository with the consumer.

beginScan

public void beginScan(ManagedRepository repo,
                      Date whenGathered,
                      boolean executeOnEntireRepo)
               throws ConsumerException
Description copied from interface: RepositoryContentConsumer

Event that triggers at the beginning of a scan, where you can also indicate whether the consumers will be executed on an entire repository or on a specific resource.

Specified by:
beginScan in interface RepositoryContentConsumer
Parameters:
repo - the repository that this consumer is being used for.
whenGathered - the start of the repository scan
executeOnEntireRepo - flags whether the consumer will be executed on an entire repository or just on a specific resource
Throws:
ConsumerException - if there was a problem with using the provided repository with the consumer.
See Also:
RepositoryContentConsumer.beginScan(ManagedRepository, java.util.Date)

processFile

public void processFile(String path)
                 throws ConsumerException
Description copied from interface: RepositoryContentConsumer

Event indicating a file is to be processed by this consumer.

NOTE: The consumer does not need to process the file immediately, can can opt to queue and/or track the files to be processed in batch. Just be sure to complete the processing by the RepositoryContentConsumer.completeScan() event.

Specified by:
processFile in interface RepositoryContentConsumer
Parameters:
path - the relative file path (in the repository) to process.
Throws:
ConsumerException - if there was a problem processing this file.

processFile

public void processFile(String path,
                        boolean executeOnEntireRepo)
                 throws ConsumerException
Specified by:
processFile in interface RepositoryContentConsumer
Throws:
ConsumerException

completeScan

public void completeScan()
Description copied from interface: RepositoryContentConsumer

Event that triggers on the completion of a scan.

NOTE: If the consumer opted to batch up processing requests in the RepositoryContentConsumer.processFile(String) event this would be the last opportunity to drain any processing queue's.

Specified by:
completeScan in interface RepositoryContentConsumer

completeScan

public void completeScan(boolean executeOnEntireRepo)
Specified by:
completeScan in interface RepositoryContentConsumer

afterConfigurationChange

public void afterConfigurationChange(org.apache.archiva.redback.components.registry.Registry registry,
                                     String propertyName,
                                     Object propertyValue)
Specified by:
afterConfigurationChange in interface org.apache.archiva.redback.components.registry.RegistryListener

beforeConfigurationChange

public void beforeConfigurationChange(org.apache.archiva.redback.components.registry.Registry registry,
                                      String propertyName,
                                      Object propertyValue)
Specified by:
beforeConfigurationChange in interface org.apache.archiva.redback.components.registry.RegistryListener

initIncludes

private void initIncludes()

initialize

@PostConstruct
public void initialize()


Copyright © 2006-2013 The Apache Software Foundation. All Rights Reserved.