From 27f2896526c2cbe215dca12268410dd1f5c068c2 Mon Sep 17 00:00:00 2001 From: Andrew Lee Rubinger Date: Fri, 24 Aug 2012 21:22:19 -0400 Subject: [PATCH] [SHRINKRES-45][SHRINKRES-39] Put "offline" feature in new API --- .../archive/MavenArchiveStrategyStage.java | 2 +- .../maven/ConfigurableResolveStageBase.java | 2 +- .../api/maven/MavenResolveStageBase.java | 2 +- .../api/maven/MavenStrategyStage.java | 5 +++-- .../api/maven/MavenStrategyStageBase.java | 19 ++++++++++++++++++- .../DependencyDeclarationBuilderBase.java | 2 +- ...ependencyDeclarationBuilderBridgeBase.java | 2 +- .../maven/prototyping/UseCasesTestCase.java | 10 ++++++++++ .../impl/maven/MavenStrategyStageImpl.java | 15 ++++++++++++++- .../impl/maven/MavenWorkingSession.java | 7 +++++++ .../impl/maven/MavenWorkingSessionImpl.java | 19 ++++++++++++++----- ...tractDependencyDeclarationBuilderBase.java | 2 +- ...ependencyDeclarationBuilderBridgeBase.java | 2 +- 13 files changed, 73 insertions(+), 16 deletions(-) diff --git a/api-maven-archive-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/archive/MavenArchiveStrategyStage.java b/api-maven-archive-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/archive/MavenArchiveStrategyStage.java index 966cacde3..640202754 100644 --- a/api-maven-archive-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/archive/MavenArchiveStrategyStage.java +++ b/api-maven-archive-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/archive/MavenArchiveStrategyStage.java @@ -32,6 +32,6 @@ */ public interface MavenArchiveStrategyStage extends - MavenStrategyStageBase { + MavenStrategyStageBase { } diff --git a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/ConfigurableResolveStageBase.java b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/ConfigurableResolveStageBase.java index 72b52b148..7460d6cbc 100644 --- a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/ConfigurableResolveStageBase.java +++ b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/ConfigurableResolveStageBase.java @@ -30,7 +30,7 @@ * @author Andrew Lee Rubinger * @author Karel Piwko */ -public interface ConfigurableResolveStageBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> { +public interface ConfigurableResolveStageBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> { /** * Configures the Maven Resolver System Project Object Model from metadata contained in the specified POM * {@link File}. diff --git a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolveStageBase.java b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolveStageBase.java index b9c1d370d..3e8c1cfa8 100644 --- a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolveStageBase.java +++ b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolveStageBase.java @@ -36,7 +36,7 @@ * @author Andrew Lee Rubinger * @author Karel Piwko, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> +public interface MavenResolveStageBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> extends ResolveStage { diff --git a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStage.java b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStage.java index baa4bcf77..0800a081d 100644 --- a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStage.java +++ b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStage.java @@ -25,7 +25,8 @@ * @author Andrew Lee Rubinger * @author Karel Piwko */ -public interface MavenStrategyStage extends - MavenStrategyStageBase { +public interface MavenStrategyStage + extends + MavenStrategyStageBase { } diff --git a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStageBase.java b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStageBase.java index 2721e352a..7753b5ff2 100644 --- a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStageBase.java +++ b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStageBase.java @@ -27,7 +27,24 @@ * @author Andrew Lee Rubinger * @author Karel Piwko */ -public interface MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> +public interface MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> extends TransitiveStrategyStage { + /** + * Sets whether resolution should be done in "offline" (ie. not connected to internet) mode. + * + * @param offline + * @return + */ + STRATEGYSTAGETYPE offline(boolean offline); + + /** + * Sets that resolution should be done in "offline" (ie. not connected to internet) mode. Alias to + * {@link MavenStrategyStageBase#offline(boolean)}, passing true as a parameter. + * + * @param offline + * @return + */ + STRATEGYSTAGETYPE offline(); + } diff --git a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/dependency/DependencyDeclarationBuilderBase.java b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/dependency/DependencyDeclarationBuilderBase.java index 0e03d97e5..1f806ac23 100644 --- a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/dependency/DependencyDeclarationBuilderBase.java +++ b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/dependency/DependencyDeclarationBuilderBase.java @@ -33,7 +33,7 @@ * @author Andrew Lee Rubinger * @author Karel Piwko */ -public interface DependencyDeclarationBuilderBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> +public interface DependencyDeclarationBuilderBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> extends MutableMavenCoordinateBase, CoordinateBuilder { diff --git a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/dependency/exclusion/DependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase.java b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/dependency/exclusion/DependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase.java index 01dc881f4..d5e737da3 100644 --- a/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/dependency/exclusion/DependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase.java +++ b/api-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/dependency/exclusion/DependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase.java @@ -32,7 +32,7 @@ * @author Andrew Lee Rubinger * @author Karel Piwko */ -public interface DependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> +public interface DependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> extends DependencyExclusionBuilderBase { /** diff --git a/impl-maven-archive-prototype/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/prototyping/UseCasesTestCase.java b/impl-maven-archive-prototype/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/prototyping/UseCasesTestCase.java index 1a6739649..9b8d887df 100644 --- a/impl-maven-archive-prototype/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/prototyping/UseCasesTestCase.java +++ b/impl-maven-archive-prototype/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/prototyping/UseCasesTestCase.java @@ -401,4 +401,14 @@ public void dependencyInfo() { final InputStream in2 = shortcut.getArtifact(InputStream.class); final JavaArchive archive = shortcut.getArtifact(new ArchiveFormatProcessor(JavaArchive.class)); } + + /** + * Use case 15: + * + * Resolve offline SHRINKRES-45 + */ + @Test + public void offline() { + Maven.resolver().resolve("groupId:artifactId:version").offline().withoutTransitivity().asSingle(File.class); + } } diff --git a/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenStrategyStageImpl.java b/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenStrategyStageImpl.java index 31905af15..3109b8c94 100644 --- a/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenStrategyStageImpl.java +++ b/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenStrategyStageImpl.java @@ -46,7 +46,7 @@ */ public class MavenStrategyStageImpl implements MavenStrategyStage, MavenWorkingSessionRetrieval { - private MavenWorkingSession session; + private final MavenWorkingSession session; public MavenStrategyStageImpl(MavenWorkingSession session) { this.session = session; @@ -151,4 +151,17 @@ private MavenResolutionFilter configureFilterFromSession(MavenWorkingSession ses return filter; } + + @Override + public MavenStrategyStage offline(final boolean offline) { + // Set session offline flag via the abstraction + this.session.setOffline(offline); + return this; + } + + @Override + public MavenStrategyStage offline() { + // Delegate + return this.offline(true); + } } diff --git a/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSession.java b/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSession.java index 5f3364436..01ea30096 100644 --- a/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSession.java +++ b/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSession.java @@ -119,4 +119,11 @@ Collection execute(CollectRequest request, MavenResolutionFilter */ ArtifactTypeRegistry getArtifactTypeRegistry(); + /** + * Whether or not to set this session in "offline" mode + * + * @param offline + */ + void setOffline(boolean offline); + } diff --git a/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java b/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java index d7a58bfd8..2badf32f8 100644 --- a/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java +++ b/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenWorkingSessionImpl.java @@ -69,8 +69,8 @@ */ class MavenWorkingSessionImpl implements MavenWorkingSession { - private Set dependencyManagement; - private Stack dependencies; + private final Set dependencyManagement; + private final Stack dependencies; private static final Logger log = Logger.getLogger(MavenWorkingSessionImpl.class.getName()); @@ -78,16 +78,16 @@ class MavenWorkingSessionImpl implements MavenWorkingSession { private static final RemoteRepository MAVEN_CENTRAL = new RemoteRepository("central", "default", "http://repo1.maven.org/maven2"); - private MavenRepositorySystem system; + private final MavenRepositorySystem system; private Settings settings; private RepositorySystemSession session; private Model model; - private List remoteRepositories; + private final List remoteRepositories; - private boolean useMavenCentralRepository = true; + private final boolean useMavenCentralRepository = true; public MavenWorkingSessionImpl() { this.system = new MavenRepositorySystem(); @@ -152,6 +152,7 @@ public MavenWorkingSession execute(SettingsBuildingRequest request) throws Inval } // @Override + @Override public Collection execute(CollectRequest request, MavenResolutionFilter filter) throws DependencyResolutionException { return system.resolveDependencies(session, request, filter); @@ -290,4 +291,12 @@ public ArtifactTypeRegistry getArtifactTypeRegistry() { return session.getArtifactTypeRegistry(); } + @Override + public void setOffline(final boolean offline) { + if (log.isLoggable(Level.FINER)) { + log.finer("Set offline mode to: " + offline); + } + this.settings.setOffline(offline); + } + } diff --git a/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/dependency/AbstractDependencyDeclarationBuilderBase.java b/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/dependency/AbstractDependencyDeclarationBuilderBase.java index 337fa9fc8..a4d8185c3 100644 --- a/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/dependency/AbstractDependencyDeclarationBuilderBase.java +++ b/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/dependency/AbstractDependencyDeclarationBuilderBase.java @@ -53,7 +53,7 @@ * @param * @param */ -abstract class AbstractDependencyDeclarationBuilderBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> +abstract class AbstractDependencyDeclarationBuilderBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> implements DependencyDeclarationBuilderBase, MavenWorkingSessionRetrieval { diff --git a/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/exclusion/AbstractDependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase.java b/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/exclusion/AbstractDependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase.java index ebf9b5411..96ca91683 100644 --- a/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/exclusion/AbstractDependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase.java +++ b/impl-maven-prototype/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/exclusion/AbstractDependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase.java @@ -37,7 +37,7 @@ * @param * @param */ -abstract class AbstractDependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> +abstract class AbstractDependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase, RESOLUTIONFILTERTYPE extends MavenResolutionFilterBase, RESOLVESTAGETYPE extends MavenResolveStageBase, STRATEGYSTAGETYPE extends MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage, EXCLUSIONBUILDERTYPE extends DependencyExclusionBuilderBase, RESOLUTIONSTRATEGYTYPE extends MavenResolutionStrategyBase> implements DependencyExclusionBuilderToDependencyDeclarationBuilderBridgeBase {