package org.jboss.windup.rules.apps.java.archives.identify;
import java.util.LinkedHashSet;
import java.util.Set;
import javax.inject.Singleton;
import org.jboss.forge.addon.dependencies.Coordinate;
/**
* A {@link ArchiveIdentificationService} that delegates to one or more provided {@link ArchiveIdentificationService} instances.
*
* @author <a href="mailto:ozizka@redhat.com">Ondrej Zizka</a>
*/
@Singleton
public class CompositeArchiveIdentificationService implements ArchiveIdentificationService
{
private Set<ArchiveIdentificationService> identifiers = new LinkedHashSet<>();
/**
* Create a new {@link CompositeArchiveIdentificationService} instance.
*/
public CompositeArchiveIdentificationService()
{
}
/**
* Create a new {@link CompositeArchiveIdentificationService} that delegates to the initial set of provided
* {@link ArchiveIdentificationService} instances.
*/
public CompositeArchiveIdentificationService(ArchiveIdentificationService... identifiers)
{
for (ArchiveIdentificationService identifier : identifiers)
{
addIdentifier(identifier);
}
}
@Override
public Coordinate getCoordinate(String checksum)
{
for (ArchiveIdentificationService identifier : identifiers)
{
Coordinate coordinate = identifier.getCoordinate(checksum);
if (coordinate != null)
return coordinate;
}
return null;
}
/**
* Add a {@link ArchiveIdentificationService} instance to this {@link CompositeArchiveIdentificationService}.
*/
public CompositeArchiveIdentificationService addIdentifier(ArchiveIdentificationService identifier)
{
this.identifiers.add(identifier);
return this;
}
}