package org.jboss.shrinkwrap.resolver.impl.maven;
import java.util.Collection;
import java.util.logging.Logger;
import org.jboss.shrinkwrap.resolver.api.maven.MavenFormatStage;
import org.jboss.shrinkwrap.resolver.api.maven.MavenResolvedArtifact;
import org.jboss.shrinkwrap.resolver.api.maven.MavenStrategyStage;
import org.jboss.shrinkwrap.resolver.api.maven.MavenStrategyStageBase;
import org.jboss.shrinkwrap.resolver.api.maven.MavenWorkingSession;
import org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy;
import org.jboss.shrinkwrap.resolver.api.maven.strategy.NonTransitiveStrategy;
import org.jboss.shrinkwrap.resolver.api.maven.strategy.TransitiveStrategy;
import org.jboss.shrinkwrap.resolver.impl.maven.util.Validate;
public abstract class MavenStrategyStageBaseImpl<STRATEGYSTAGETYPE extends MavenStrategyStageBase<STRATEGYSTAGETYPE, FORMATSTAGETYPE>, FORMATSTAGETYPE extends MavenFormatStage>
implements MavenStrategyStageBase<STRATEGYSTAGETYPE, FORMATSTAGETYPE>, MavenWorkingSessionContainer {
private static final Logger log = Logger.getLogger(MavenStrategyStageBaseImpl.class.getName());
private final MavenWorkingSession session;
public MavenStrategyStageBaseImpl(final MavenWorkingSession session) {
this.session = session;
}
@Override
public FORMATSTAGETYPE withTransitivity() {
return using(TransitiveStrategy.INSTANCE);
}
@Override
public FORMATSTAGETYPE withoutTransitivity() {
return using(NonTransitiveStrategy.INSTANCE);
}
@Override
public MavenWorkingSession getMavenWorkingSession() {
return session;
}
@Override
public FORMATSTAGETYPE using(final MavenResolutionStrategy strategy) throws IllegalArgumentException {
Validate.notEmpty(session.getDependenciesForResolution(), "No dependencies were set for resolution");
final Collection<MavenResolvedArtifact> resolvedArtifacts = session.resolveDependencies(strategy);
return this.createFormatStage(resolvedArtifacts);
}
protected abstract Class<STRATEGYSTAGETYPE> getActualClass();
protected abstract FORMATSTAGETYPE createFormatStage(Collection<MavenResolvedArtifact> filteredArtifacts);
}