package org.jboss.shrinkwrap.resolver.impl.maven;
import java.io.File;
import org.jboss.shrinkwrap.resolver.api.InvalidConfigurationFileException;
import org.jboss.shrinkwrap.resolver.api.maven.ConfigurableMavenResolverSystem;
import org.jboss.shrinkwrap.resolver.api.maven.ConfigurableMavenResolverSystemBase;
import org.jboss.shrinkwrap.resolver.api.maven.InvalidEnvironmentException;
import org.jboss.shrinkwrap.resolver.api.maven.MavenFormatStage;
import org.jboss.shrinkwrap.resolver.api.maven.MavenResolverSystemBase;
import org.jboss.shrinkwrap.resolver.api.maven.MavenStrategyStageBase;
import org.jboss.shrinkwrap.resolver.api.maven.MavenWorkingSession;
import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStageBase;
import org.jboss.shrinkwrap.resolver.api.maven.PomlessResolveStageBase;
import org.jboss.shrinkwrap.resolver.impl.maven.task.ConfigureSettingsFromFileTask;
import org.jboss.shrinkwrap.resolver.impl.maven.task.ConfigureSettingsFromPluginTask;
import org.jboss.shrinkwrap.resolver.impl.maven.util.FileUtil;
import org.jboss.shrinkwrap.resolver.impl.maven.util.Validate;
public abstract class ConfigurableMavenResolverSystemBaseImpl<UNCONFIGURABLERESOLVERSYSTEMTYPE extends MavenResolverSystemBase<EQUIPPEDRESOLVESTAGETYPE, UNEQUIPPEDRESOLVESTAGETYPE, STRATEGYSTAGETYPE, FORMATSTAGETYPE>, CONFIGURABLEBERESOLVERSYSTEMTYPE extends ConfigurableMavenResolverSystemBase<UNCONFIGURABLERESOLVERSYSTEMTYPE, CONFIGURABLEBERESOLVERSYSTEMTYPE, EQUIPPEDRESOLVESTAGETYPE, UNEQUIPPEDRESOLVESTAGETYPE, STRATEGYSTAGETYPE, FORMATSTAGETYPE, CONFIGURABLEBERESOLVERSYSTEMTYPE>, EQUIPPEDRESOLVESTAGETYPE extends PomEquippedResolveStageBase<EQUIPPEDRESOLVESTAGETYPE, STRATEGYSTAGETYPE, FORMATSTAGETYPE>, UNEQUIPPEDRESOLVESTAGETYPE extends PomlessResolveStageBase<EQUIPPEDRESOLVESTAGETYPE, UNEQUIPPEDRESOLVESTAGETYPE, STRATEGYSTAGETYPE, FORMATSTAGETYPE>, STRATEGYSTAGETYPE extends MavenStrategyStageBase<STRATEGYSTAGETYPE, FORMATSTAGETYPE>, FORMATSTAGETYPE extends MavenFormatStage>
extends
MavenResolverSystemBaseImpl<UNCONFIGURABLERESOLVERSYSTEMTYPE, CONFIGURABLEBERESOLVERSYSTEMTYPE, EQUIPPEDRESOLVESTAGETYPE, UNEQUIPPEDRESOLVESTAGETYPE, STRATEGYSTAGETYPE, FORMATSTAGETYPE>
implements
ConfigurableMavenResolverSystemBase<UNCONFIGURABLERESOLVERSYSTEMTYPE, CONFIGURABLEBERESOLVERSYSTEMTYPE, EQUIPPEDRESOLVESTAGETYPE, UNEQUIPPEDRESOLVESTAGETYPE, STRATEGYSTAGETYPE, FORMATSTAGETYPE, CONFIGURABLEBERESOLVERSYSTEMTYPE> {
public ConfigurableMavenResolverSystemBaseImpl(final UNEQUIPPEDRESOLVESTAGETYPE delegate)
throws IllegalArgumentException {
super(delegate);
}
@Override
public final EQUIPPEDRESOLVESTAGETYPE configureViaPlugin() throws InvalidEnvironmentException {
final MavenWorkingSession session = this.getSession();
ConfigureSettingsFromPluginTask.INSTANCE.execute(session);
return this.createPomEquippedResolveStage();
}
@Override
public UNCONFIGURABLERESOLVERSYSTEMTYPE fromClassloaderResource(String path) throws IllegalArgumentException,
InvalidConfigurationFileException {
return this.configureFromClassloaderResource(path, SecurityActions.getThreadContextClassLoader());
}
@Override
public UNCONFIGURABLERESOLVERSYSTEMTYPE fromClassloaderResource(String path, ClassLoader loader)
throws IllegalArgumentException, InvalidConfigurationFileException {
return configureFromClassloaderResource(path, loader);
}
@Override
public UNCONFIGURABLERESOLVERSYSTEMTYPE fromFile(File file) throws IllegalArgumentException,
InvalidConfigurationFileException {
Validate.notNull(file, "settings file must be specified");
Validate.readable(file, "settings file is not readable: " + file.getAbsolutePath());
new ConfigureSettingsFromFileTask(file).execute(this.getSession());
return this.getUnconfigurableView();
}
@Override
public UNCONFIGURABLERESOLVERSYSTEMTYPE fromFile(String pathToFile) throws IllegalArgumentException,
InvalidConfigurationFileException {
Validate.isNullOrEmpty(pathToFile);
return fromFile(new File(pathToFile));
}
private UNCONFIGURABLERESOLVERSYSTEMTYPE configureFromClassloaderResource(final String path,
final ClassLoader loader) throws IllegalArgumentException, UnsupportedOperationException,
InvalidConfigurationFileException {
Validate.isNullOrEmpty(path);
Validate.notNull(loader, "ClassLoader is required");
final File file = FileUtil.INSTANCE.fileFromClassLoaderResource(path, loader);
return this.fromFile(file);
}
protected abstract UNCONFIGURABLERESOLVERSYSTEMTYPE getUnconfigurableView();
protected abstract EQUIPPEDRESOLVESTAGETYPE createPomEquippedResolveStage();
}