From c529d95b9869feafcd519209b01275eda25fd604 Mon Sep 17 00:00:00 2001 From: Andrew Lee Rubinger Date: Mon, 17 Sep 2012 11:29:33 -0700 Subject: [PATCH] [SHRINKRES-65] Move Strategies up to api-maven, add docs as necessary, reduce instance creation --- .../api/maven/MavenResolveStageBase.java | 1 + .../api/maven/MavenStrategyStageBase.java | 4 +- .../maven/PomEquippedResolveStageBase.java | 1 + .../filter/RejectDependenciesFilter.java | 4 +- .../maven/strategy/AcceptAllStrategy.java | 19 +++-- .../maven/strategy/AcceptScopesStrategy.java | 80 +++++++++++++++++++ .../api}/maven/strategy/CombinedStrategy.java | 19 ++--- .../MavenResolutionStrategy.java | 24 ++---- .../maven/strategy/NonTransitiveStrategy.java | 24 +++--- .../strategy/RejectDependenciesStrategy.java | 40 +++++----- .../maven/strategy/TransitiveStrategy.java | 30 ++++--- .../api/TransitiveResolutionStrategy.java | 28 ------- .../resolver/api/TransitiveStrategyStage.java | 2 +- .../maven/MavenStrategyStageBaseImpl.java | 10 +-- .../PomEquippedResolveStageBaseImpl.java | 8 +- .../maven/strategy/AcceptScopesStrategy.java | 70 ---------------- .../integration/ExclusionsUnitTestCase.java | 2 +- .../MavenResolutionFilterUnitTestCase.java | 28 ++----- .../PluginIntegrationTestCase.java | 11 ++- .../integration/PomFilteringUnitTestCase.java | 2 +- 20 files changed, 188 insertions(+), 219 deletions(-) rename {impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl => api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api}/maven/strategy/AcceptAllStrategy.java (71%) create mode 100644 api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/AcceptScopesStrategy.java rename {impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl => api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api}/maven/strategy/CombinedStrategy.java (77%) rename api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/{ => strategy}/MavenResolutionStrategy.java (61%) rename {impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl => api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api}/maven/strategy/NonTransitiveStrategy.java (66%) rename {impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl => api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api}/maven/strategy/RejectDependenciesStrategy.java (62%) rename {impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl => api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api}/maven/strategy/TransitiveStrategy.java (61%) delete mode 100644 api/src/main/java/org/jboss/shrinkwrap/resolver/api/TransitiveResolutionStrategy.java delete mode 100644 impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/AcceptScopesStrategy.java diff --git a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolveStageBase.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolveStageBase.java index 645c4680..18355726 100644 --- a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolveStageBase.java +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolveStageBase.java @@ -19,6 +19,7 @@ import org.jboss.shrinkwrap.resolver.api.ResolveStage; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy; /** * @author Andrew Lee Rubinger diff --git a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStageBase.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStageBase.java index a8f9f336..18e96e9e 100644 --- a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStageBase.java +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenStrategyStageBase.java @@ -20,6 +20,7 @@ import org.jboss.shrinkwrap.resolver.api.TransitiveStrategyStage; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy; /** * Provides support for Maven-based {@link ResolutionStrategy}s in artifact resolution @@ -29,8 +30,7 @@ * @author Karel Piwko */ public interface MavenStrategyStageBase, FORMATSTAGETYPE extends MavenFormatStage> - extends - TransitiveStrategyStage { + extends TransitiveStrategyStage { /** * Sets whether resolution should be done in "offline" (ie. not connected to internet) mode. diff --git a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/PomEquippedResolveStageBase.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/PomEquippedResolveStageBase.java index 9d87a82a..0971d310 100644 --- a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/PomEquippedResolveStageBase.java +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/PomEquippedResolveStageBase.java @@ -18,6 +18,7 @@ import org.jboss.shrinkwrap.resolver.api.FormatStage; import org.jboss.shrinkwrap.resolver.api.ResolutionStrategy; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy; /** * Defines the contract for operations denoting a {@link ResolverStage} has been configured via POM (Project Object diff --git a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/filter/RejectDependenciesFilter.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/filter/RejectDependenciesFilter.java index 8ecc94f5..5e9ef9e8 100644 --- a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/filter/RejectDependenciesFilter.java +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/filter/RejectDependenciesFilter.java @@ -16,6 +16,7 @@ */ package org.jboss.shrinkwrap.resolver.api.maven.filter; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -43,12 +44,13 @@ public RejectDependenciesFilter(final String... coordinates) throws IllegalArgum throw new IllegalArgumentException("There must be at least one coordinate specified to be rejected."); } - bannedDependencies = new HashSet(coordinates.length); + final Set bannedDependencies = new HashSet(coordinates.length); for (final String coords : coordinates) { final MavenCoordinate coordinate = MavenCoordinates.createCoordinate(coords); final MavenDependency dependency = MavenDependencies.createDependency(coordinate, ScopeType.COMPILE, false); bannedDependencies.add(dependency); } + this.bannedDependencies = Collections.unmodifiableSet(bannedDependencies); } diff --git a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/AcceptAllStrategy.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/AcceptAllStrategy.java similarity index 71% rename from impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/AcceptAllStrategy.java rename to api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/AcceptAllStrategy.java index 63c0aa7d..b35c6dce 100644 --- a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/AcceptAllStrategy.java +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/AcceptAllStrategy.java @@ -14,9 +14,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jboss.shrinkwrap.resolver.impl.maven.strategy; +package org.jboss.shrinkwrap.resolver.api.maven.strategy; -import org.jboss.shrinkwrap.resolver.api.maven.MavenResolutionStrategy; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.filter.AcceptAllFilter; import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; @@ -25,22 +24,28 @@ * {@link MavenResolutionStrategy} implementation where all {@link MavenDependency}s are accepted. * * @author Karel Piwko + * @author Andrew Lee Rubinger */ public enum AcceptAllStrategy implements MavenResolutionStrategy { INSTANCE; + /** + * Returns a {@link MavenResolutionFilter} chain allowing all {@link MavenDependency}s to pass-through. + * + * @see org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy#getPreResolutionFilter() + */ @Override public MavenResolutionFilter getPreResolutionFilter() { return AcceptAllFilter.INSTANCE; } + /** + * Returns a {@link MavenResolutionFilter} chain allowing all {@link MavenDependency}s to pass-through. + * + * @see org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy#getResolutionFilter() + */ @Override public MavenResolutionFilter getResolutionFilter() { return AcceptAllFilter.INSTANCE; } - - @Override - public MavenResolutionFilter getPostResolutionFilter() { - return AcceptAllFilter.INSTANCE; - } } \ No newline at end of file diff --git a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/AcceptScopesStrategy.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/AcceptScopesStrategy.java new file mode 100644 index 00000000..d5060687 --- /dev/null +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/AcceptScopesStrategy.java @@ -0,0 +1,80 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2012, Red Hat Middleware LLC, and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.shrinkwrap.resolver.api.maven.strategy; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import org.jboss.shrinkwrap.resolver.api.maven.ScopeType; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; +import org.jboss.shrinkwrap.resolver.api.maven.filter.AcceptAllFilter; +import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; +import org.jboss.shrinkwrap.resolver.api.maven.filter.ScopeFilter; + +/** + * {@link MavenResolutionStrategy} implementation where only {@link MavenDependency}s in acceptable {@link ScopeType}s + * are accepted. + * + * @author Karel Piwko + * @author Andrew Lee Rubinger + */ +public final class AcceptScopesStrategy implements MavenResolutionStrategy { + + private final Set allowedScopes; + + /** + * Creates a new instance allowing only the specified {@link ScopeType}s to pass through the + * {@link AcceptScopesStrategy#getResolutionFilter()} + * + * @param scopes + * + * llowed scopes, required + * @throws IllegalArgumentException + * If no scopes are specified + */ + public AcceptScopesStrategy(final ScopeType... scopes) throws IllegalArgumentException { + if (scopes == null || scopes.length == 0) { + throw new IllegalArgumentException("at least one scope must be specified"); + } + final Set allowedScopes = new HashSet(scopes.length); + allowedScopes.addAll(Arrays.asList(scopes)); + this.allowedScopes = Collections.unmodifiableSet(allowedScopes); + } + + /** + * Returns a {@link MavenResolutionFilter} chain allowing all {@link MavenDependency}s to pass-through. + * + * @see org.jboss.shrinkwrap.r .api.maven.strategy.MavenResolutionStrategy#getPreResolutionFilter() + */ + @Override + public MavenResolutionFilter getPreResolutionFilter() { + return AcceptAllFilter.INSTANCE; + } + + /** + * Returns a {@link MavenResolutionFilter} chain allowing only dependencies in the scopes specified during + * construction of this instance to pass through + * + * @see org.jboss.shrinkwrap.re api.maven.strategy.MavenResolutionStrategy#getResolutionFilter() + */ + @Override + public MavenResolutionFilter getResolutionFilter() { + return new ScopeFilter(allowedScopes.toArray(new ScopeType[0])); + } +} \ No newline at end of file diff --git a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/CombinedStrategy.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/CombinedStrategy.java similarity index 77% rename from impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/CombinedStrategy.java rename to api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/CombinedStrategy.java index 9752a792..d73d34de 100644 --- a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/CombinedStrategy.java +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/CombinedStrategy.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jboss.shrinkwrap.resolver.impl.maven.strategy; +package org.jboss.shrinkwrap.resolver.api.maven.strategy; import java.util.ArrayList; import java.util.Arrays; @@ -22,7 +22,6 @@ import java.util.List; import java.util.Set; -import org.jboss.shrinkwrap.resolver.api.maven.MavenResolutionStrategy; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.filter.CombinedFilter; import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; @@ -33,6 +32,8 @@ * * @author Karel Piwko */ +@Deprecated +// SHRINKRES-52 public class CombinedStrategy implements MavenResolutionStrategy { private final Set strategies; @@ -48,7 +49,7 @@ public CombinedStrategy(MavenResolutionStrategy... strategies) { @Override public MavenResolutionFilter getPreResolutionFilter() { - List filters = new ArrayList(strategies.size()); + final List filters = new ArrayList(strategies.size()); for (MavenResolutionStrategy s : strategies) { filters.add(s.getPreResolutionFilter()); } @@ -58,7 +59,7 @@ public MavenResolutionFilter getPreResolutionFilter() { @Override public MavenResolutionFilter getResolutionFilter() { - List filters = new ArrayList(strategies.size()); + final List filters = new ArrayList(strategies.size()); for (MavenResolutionStrategy s : strategies) { filters.add(s.getResolutionFilter()); } @@ -66,14 +67,4 @@ public MavenResolutionFilter getResolutionFilter() { return new CombinedFilter(filters.toArray(EMPTY_ARRAY)); } - @Override - public MavenResolutionFilter getPostResolutionFilter() { - List filters = new ArrayList(strategies.size()); - for (MavenResolutionStrategy s : strategies) { - filters.add(s.getPostResolutionFilter()); - } - - return new CombinedFilter(filters.toArray(EMPTY_ARRAY)); - } - } diff --git a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolutionStrategy.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/MavenResolutionStrategy.java similarity index 61% rename from api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolutionStrategy.java rename to api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/MavenResolutionStrategy.java index 8eeb34c1..5f3847f7 100644 --- a/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/MavenResolutionStrategy.java +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/MavenResolutionStrategy.java @@ -13,28 +13,26 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and */ -package org.jboss.shrinkwrap.resolver.api.maven; +package org.jboss.shrinkwrap.resolver.api.maven.strategy; import java.util.List; -import org.jboss.shrinkwrap.resolver.api.ResolutionFilter; import org.jboss.shrinkwrap.resolver.api.ResolutionStrategy; -import org.jboss.shrinkwrap.resolver.api.TransitiveResolutionStrategy; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; /** - * Defines the contract for developing a Maven-based {@link ResolutionStrategy}; this is composed by assembling - * {@link List}s of type RESOLUTIONFILTERTYPE for filtering {@link MavenDependency}s before, during - * and after the resolution request is executed. + * Defines the contract for developing a Maven-based {@link ResolutionStrategy}; this is accomplished by assembling + * chains of {@link MavenResolutionFilter}s for filtering {@link MavenDependency}s before and during resolution request + * execution. * * @author Karel Piwko * @author Andrew Lee Rubinger */ public interface MavenResolutionStrategy extends - TransitiveResolutionStrategy { + ResolutionStrategy { /** - * Obtains the {@link ResolutionFilter} to be used in filtering the {@link MavenDependency} {@link List} + * Obtains the {@link MavenResolutionFilter} chain to be used in filtering a {@link MavenDependency} {@link List} * before the request is executed. * * @return @@ -42,18 +40,10 @@ public interface MavenResolutionStrategy extends MavenResolutionFilter getPreResolutionFilter(); /** - * Obtains the {@link ResolutionFilter} to be used in filtering the {@link MavenDependency} {@link List} + * Obtains the {@link MavenResolutionFilter} chain to be used in filtering a {@link MavenDependency} {@link List} * during request processing (filtering is done by the backend). * * @return */ MavenResolutionFilter getResolutionFilter(); - - /** - * Obtains the {@link ResolutionFilter} to be used in filtering the {@link MavenDependency} {@link List} - * returned from the backend response. - * - * @return - */ - MavenResolutionFilter getPostResolutionFilter(); } diff --git a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/NonTransitiveStrategy.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/NonTransitiveStrategy.java similarity index 66% rename from impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/NonTransitiveStrategy.java rename to api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/NonTransitiveStrategy.java index 1885c0ac..b257fa93 100644 --- a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/NonTransitiveStrategy.java +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/NonTransitiveStrategy.java @@ -14,9 +14,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jboss.shrinkwrap.resolver.impl.maven.strategy; +package org.jboss.shrinkwrap.resolver.api.maven.strategy; -import org.jboss.shrinkwrap.resolver.api.maven.MavenResolutionStrategy; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.filter.AcceptAllFilter; import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; @@ -26,21 +25,28 @@ * {@link MavenResolutionStrategy} implementation where only explicitly-defined {@link MavenDependency}s are accepted * * @author Karel Piwko + * @author Andrew Lee Rubinger */ -public class NonTransitiveStrategy implements MavenResolutionStrategy { - +public enum NonTransitiveStrategy implements MavenResolutionStrategy { + INSTANCE; + /** + * Returns a {@link MavenResolutionFilter} chain allowing all {@link MavenDependency}s to pass-through. + * + * @see org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy#getPreResolutionFilter() + */ @Override public MavenResolutionFilter getPreResolutionFilter() { return AcceptAllFilter.INSTANCE; } + /** + * Returns a {@link MavenResolutionFilter} chain allowing only explicitly-defined {@link MavenDependency}s to + * pass-through; dependencies brought in transitively will be excluded. + * + * @see org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy#getResolutionFilter() + */ @Override public MavenResolutionFilter getResolutionFilter() { return NonTransitiveFilter.INSTANCE; } - - @Override - public MavenResolutionFilter getPostResolutionFilter() { - return NonTransitiveFilter.INSTANCE; - } } diff --git a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/RejectDependenciesStrategy.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/RejectDependenciesStrategy.java similarity index 62% rename from impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/RejectDependenciesStrategy.java rename to api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/RejectDependenciesStrategy.java index 9b079023..45568d89 100644 --- a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/RejectDependenciesStrategy.java +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/RejectDependenciesStrategy.java @@ -14,51 +14,53 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jboss.shrinkwrap.resolver.impl.maven.strategy; +package org.jboss.shrinkwrap.resolver.api.maven.strategy; import org.jboss.shrinkwrap.resolver.api.CoordinateParseException; -import org.jboss.shrinkwrap.resolver.api.maven.MavenResolutionStrategy; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; import org.jboss.shrinkwrap.resolver.api.maven.filter.RejectDependenciesFilter; /** - * {@link MavenResolutionStrategy} implementation where specified {@link MavenDependency}s may be selectively - * rejected + * {@link MavenResolutionStrategy} implementation where specified {@link MavenDependency}s may be selectively rejected * * @author Karel Piwko + * @author Andrew Lee Rubinger */ public class RejectDependenciesStrategy implements MavenResolutionStrategy { - private final String[] coordinates; + private final MavenResolutionFilter filter; public RejectDependenciesStrategy(final String... coordinates) throws IllegalArgumentException, CoordinateParseException { - if (coordinates.length == 0) { + if (coordinates == null || coordinates.length == 0) { throw new IllegalArgumentException("There must be at least one coordinate specified to be rejected."); } - this.coordinates = coordinates; - - // here we try to create a filter to raise an exception in an early stage - // TODO No, we should check some "isParseable" method instead; don't count on an exception for flow control; - // this is a weak API to rely upon - new RejectDependenciesFilter(coordinates); + // CoordinateParseException handled by RejectDependenciesFilter + this.filter = new RejectDependenciesFilter(coordinates); } + /** + * Returns a {@link MavenResolutionFilter} chain blocking {@link MavenDependency}s with coordinates supplied at + * instance construction + * + * @see org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy#getPreResolutionFilter() + */ @Override public MavenResolutionFilter getPreResolutionFilter() { - return new RejectDependenciesFilter(coordinates); + return this.filter; } + /** + * Returns a {@link MavenResolutionFilter} chain blocking {@link MavenDependency}s with coordinates supplied at + * instance construction + * + * @see org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy#getPreResolutionFilter() + */ @Override public MavenResolutionFilter getResolutionFilter() { - return new RejectDependenciesFilter(coordinates); - } - - @Override - public MavenResolutionFilter getPostResolutionFilter() { - return new RejectDependenciesFilter(coordinates); + return this.filter; } } diff --git a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/TransitiveStrategy.java b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/TransitiveStrategy.java similarity index 61% rename from impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/TransitiveStrategy.java rename to api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/TransitiveStrategy.java index 2cf101c0..21ceee9a 100644 --- a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/TransitiveStrategy.java +++ b/api-maven/src/main/java/org/jboss/shrinkwrap/resolver/api/maven/strategy/TransitiveStrategy.java @@ -14,35 +14,41 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jboss.shrinkwrap.resolver.impl.maven.strategy; +package org.jboss.shrinkwrap.resolver.api.maven.strategy; -import org.jboss.shrinkwrap.resolver.api.maven.MavenResolutionStrategy; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.filter.AcceptAllFilter; import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; /** - * {@link MavenResolutionStrategy} implementation where {@link MavenDependency}s are accepted based on - * transitivity. This is implemented as a pass-through filter, as the backend will be supplying the transitive - * dependencies; we'll just allow them. + * {@link MavenResolutionStrategy} implementation where {@link MavenDependency}s are accepted based on transitivity. + * This is implemented as a pass-through filter, as the backend will be supplying the transitive dependencies; we'll + * just allow them. * * @author Karel Piwko + * @author Andrew Lee Rubinger */ -public class TransitiveStrategy implements MavenResolutionStrategy { +public enum TransitiveStrategy implements MavenResolutionStrategy { + INSTANCE; + + /** + * Returns a {@link MavenResolutionFilter} chain allowing all {@link MavenDependency}s to pass-through. + * + * @see org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy#getPreResolutionFilter() + */ @Override public MavenResolutionFilter getPreResolutionFilter() { return AcceptAllFilter.INSTANCE; } + /** + * Returns a {@link MavenResolutionFilter} chain allowing all {@link MavenDependency}s to pass-through. + * + * @see org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy#getPreResolutionFilter() + */ @Override public MavenResolutionFilter getResolutionFilter() { return AcceptAllFilter.INSTANCE; } - - @Override - public MavenResolutionFilter getPostResolutionFilter() { - return AcceptAllFilter.INSTANCE; - } - } diff --git a/api/src/main/java/org/jboss/shrinkwrap/resolver/api/TransitiveResolutionStrategy.java b/api/src/main/java/org/jboss/shrinkwrap/resolver/api/TransitiveResolutionStrategy.java deleted file mode 100644 index 3048e559..00000000 --- a/api/src/main/java/org/jboss/shrinkwrap/resolver/api/TransitiveResolutionStrategy.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * JBoss, Home of Professional Open Source - * Copyright 2012, Red Hat Middleware LLC, and individual contributors - * by the @authors tag. See the copyright.txt in the distribution for a - * full listing of individual contributors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jboss.shrinkwrap.resolver.api; - -/** - * Encapsulates rules backing a transitive {@link ResolutionStrategy} - * - * @author Andrew Lee Rubinger - * @author Karel Piwko - */ -public interface TransitiveResolutionStrategy> - extends ResolutionStrategy { - // TODO Really define which form this will take -} diff --git a/api/src/main/java/org/jboss/shrinkwrap/resolver/api/TransitiveStrategyStage.java b/api/src/main/java/org/jboss/shrinkwrap/resolver/api/TransitiveStrategyStage.java index 4fb38255..80c6b47e 100644 --- a/api/src/main/java/org/jboss/shrinkwrap/resolver/api/TransitiveStrategyStage.java +++ b/api/src/main/java/org/jboss/shrinkwrap/resolver/api/TransitiveStrategyStage.java @@ -26,7 +26,7 @@ * @author Andrew Lee Rubinger * @author Karel Piwko */ -public interface TransitiveStrategyStage> +public interface TransitiveStrategyStage> extends StrategyStage { /** diff --git a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenStrategyStageBaseImpl.java b/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenStrategyStageBaseImpl.java index f64917cd..40b09815 100644 --- a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenStrategyStageBaseImpl.java +++ b/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/MavenStrategyStageBaseImpl.java @@ -25,7 +25,6 @@ import org.jboss.shrinkwrap.resolver.api.NoResolvedResultException; import org.jboss.shrinkwrap.resolver.api.maven.MavenFormatStage; -import org.jboss.shrinkwrap.resolver.api.maven.MavenResolutionStrategy; import org.jboss.shrinkwrap.resolver.api.maven.MavenStrategyStage; import org.jboss.shrinkwrap.resolver.api.maven.MavenStrategyStageBase; import org.jboss.shrinkwrap.resolver.api.maven.PackagingType; @@ -36,9 +35,10 @@ import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.filter.AcceptAllFilter; import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; +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.convert.MavenConverter; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.NonTransitiveStrategy; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.TransitiveStrategy; import org.jboss.shrinkwrap.resolver.impl.maven.util.Validate; import org.sonatype.aether.artifact.Artifact; import org.sonatype.aether.collection.CollectRequest; @@ -69,12 +69,12 @@ public MavenStrategyStageBaseImpl(final MavenWorkingSession session) { @Override public FORMATSTAGETYPE withTransitivity() { - return using(new TransitiveStrategy()); + return using(TransitiveStrategy.INSTANCE); } @Override public FORMATSTAGETYPE withoutTransitivity() { - return using(new NonTransitiveStrategy()); + return using(NonTransitiveStrategy.INSTANCE); } @Override diff --git a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/PomEquippedResolveStageBaseImpl.java b/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/PomEquippedResolveStageBaseImpl.java index 583a9683..b8176969 100644 --- a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/PomEquippedResolveStageBaseImpl.java +++ b/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/PomEquippedResolveStageBaseImpl.java @@ -26,7 +26,6 @@ import org.jboss.shrinkwrap.resolver.api.ResolutionException; import org.jboss.shrinkwrap.resolver.api.maven.MavenFormatStage; -import org.jboss.shrinkwrap.resolver.api.maven.MavenResolutionStrategy; import org.jboss.shrinkwrap.resolver.api.maven.MavenStrategyStageBase; import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStageBase; @@ -34,10 +33,11 @@ import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; import org.jboss.shrinkwrap.resolver.api.maven.filter.ScopeFilter; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.AcceptAllStrategy; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.AcceptScopesStrategy; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.CombinedStrategy; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy; import org.jboss.shrinkwrap.resolver.impl.maven.convert.MavenConverter; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.AcceptAllStrategy; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.AcceptScopesStrategy; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.CombinedStrategy; import org.jboss.shrinkwrap.resolver.impl.maven.util.Validate; import org.sonatype.aether.artifact.ArtifactTypeRegistry; diff --git a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/AcceptScopesStrategy.java b/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/AcceptScopesStrategy.java deleted file mode 100644 index 5aa1e427..00000000 --- a/impl-maven/src/main/java/org/jboss/shrinkwrap/resolver/impl/maven/strategy/AcceptScopesStrategy.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * JBoss, Home of Professional Open Source - * Copyright 2012, Red Hat Middleware LLC, and individual contributors - * by the @authors tag. See the copyright.txt in the distribution for a - * full listing of individual contributors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jboss.shrinkwrap.resolver.impl.maven.strategy; - -import java.util.Arrays; -import java.util.EnumSet; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.jboss.shrinkwrap.resolver.api.maven.MavenResolutionStrategy; -import org.jboss.shrinkwrap.resolver.api.maven.ScopeType; -import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; -import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter; -import org.jboss.shrinkwrap.resolver.api.maven.filter.ScopeFilter; - -/** - * {@link MavenResolutionStrategy} implementation where only {@link MavenDependency}s in acceptable - * {@link ScopeType}s are accepted. - * - * @author Karel Piwko - */ -public class AcceptScopesStrategy implements MavenResolutionStrategy { - - private static final Logger log = Logger.getLogger(AcceptScopesStrategy.class.getName()); - - private final Set allowedScopes = EnumSet.noneOf(ScopeType.class); - - public AcceptScopesStrategy(final ScopeType... scopes) { - if (scopes.length == 0) { - final ScopeType defaultScope = ScopeType.COMPILE; - if (log.isLoggable(Level.FINER)) { - log.finer("No scopes specified; defaulting to " + defaultScope); - } - allowedScopes.add(defaultScope); - } else { - allowedScopes.addAll(Arrays.asList(scopes)); - } - } - - @Override - public MavenResolutionFilter getPreResolutionFilter() { - // We cannot prefilter based on scope, because we need transitive information available, so allow all scopes - return new ScopeFilter(ScopeType.values()); - } - - @Override - public MavenResolutionFilter getResolutionFilter() { - return new ScopeFilter(allowedScopes.toArray(new ScopeType[0])); - } - - @Override - public MavenResolutionFilter getPostResolutionFilter() { - return new ScopeFilter(allowedScopes.toArray(new ScopeType[0])); - } -} \ No newline at end of file diff --git a/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/ExclusionsUnitTestCase.java b/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/ExclusionsUnitTestCase.java index 725f9056..acf2f0dc 100644 --- a/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/ExclusionsUnitTestCase.java +++ b/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/ExclusionsUnitTestCase.java @@ -26,8 +26,8 @@ import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependencies; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependencyExclusion; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.AcceptScopesStrategy; import org.jboss.shrinkwrap.resolver.impl.maven.bootstrap.MavenSettingsBuilder; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.AcceptScopesStrategy; import org.jboss.shrinkwrap.resolver.impl.maven.util.ValidationUtil; import org.junit.AfterClass; import org.junit.BeforeClass; diff --git a/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/MavenResolutionFilterUnitTestCase.java b/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/MavenResolutionFilterUnitTestCase.java index e45e3a74..2fcc2987 100644 --- a/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/MavenResolutionFilterUnitTestCase.java +++ b/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/MavenResolutionFilterUnitTestCase.java @@ -22,10 +22,10 @@ import org.jboss.shrinkwrap.resolver.api.maven.ScopeType; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependencies; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.AcceptScopesStrategy; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.CombinedStrategy; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.NonTransitiveStrategy; import org.jboss.shrinkwrap.resolver.impl.maven.bootstrap.MavenSettingsBuilder; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.AcceptScopesStrategy; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.CombinedStrategy; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.NonTransitiveStrategy; import org.jboss.shrinkwrap.resolver.impl.maven.util.ValidationUtil; import org.junit.BeforeClass; import org.junit.Test; @@ -69,22 +69,6 @@ public void nonTransitiveFilterInferredVersion() { new ValidationUtil("test-deps-c-1.0.0.jar").validate(file); } - /** - * Ensures that the default {@link AcceptScopesStrategy} when no scopes are specified is to "compile" with - * transitivity - */ - @Test - public void defaultAcceptScopesStrategy() { - - // Default of AcceptScopesStrategy should be "compile" scope, which includes transitives - File[] files = Maven.resolver().loadPomFromFile("target/poms/test-remote-child.xml") - .resolve("org.jboss.shrinkwrap.test:test-remote-child:1.0.0").using(new AcceptScopesStrategy()) - .as(File.class); - - new ValidationUtil("test-remote-child-1.0.0.jar", "test-deps-a-1.0.0.jar", "test-deps-c-1.0.0.jar", - "test-deps-b-1.0.0.jar").validate(files); - } - /** * Tests limiting of the scope */ @@ -115,7 +99,7 @@ public void combinedScopeNonTransitiveFilter() { .addDependency("org.jboss.shrinkwrap.test:test-dependency:1.0.0") .resolve() .using( - new CombinedStrategy(new NonTransitiveStrategy(), new AcceptScopesStrategy(ScopeType.COMPILE, + new CombinedStrategy(NonTransitiveStrategy.INSTANCE, new AcceptScopesStrategy(ScopeType.COMPILE, ScopeType.TEST))).as(File.class); new ValidationUtil("test-dependency-test-1.0.0.jar", "test-dependency-1.0.0.jar").validate(files); @@ -134,7 +118,7 @@ public void combinedScopeNonTransitiveFilter2() { "org.jboss.shrinkwrap.test:test-dependency:1.0.0", ScopeType.TEST, false); File[] files = Maven.resolver().loadPomFromFile("target/poms/test-parent.xml").addDependency(dependency) .addDependency(dependency2).resolve() - .using(new CombinedStrategy(new NonTransitiveStrategy(), new AcceptScopesStrategy(ScopeType.TEST))) + .using(new CombinedStrategy(NonTransitiveStrategy.INSTANCE, new AcceptScopesStrategy(ScopeType.TEST))) .as(File.class); new ValidationUtil("test-dependency-test-1.0.0.jar", "test-dependency-1.0.0.jar").validate(files); @@ -154,7 +138,7 @@ public void combinedScopeNonTransitiveFilter3() { "org.jboss.shrinkwrap.test:test-dependency:1.0.0", ScopeType.PROVIDED, false); File file = Maven.resolver().loadPomFromFile("target/poms/test-parent.xml") .addDependencies(dependency, dependency2).resolve() - .using(new CombinedStrategy(new NonTransitiveStrategy(), new AcceptScopesStrategy(ScopeType.PROVIDED))) + .using(new CombinedStrategy(NonTransitiveStrategy.INSTANCE, new AcceptScopesStrategy(ScopeType.PROVIDED))) .asSingle(File.class); new ValidationUtil("test-dependency-1.0.0.jar").validate(file); diff --git a/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PluginIntegrationTestCase.java b/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PluginIntegrationTestCase.java index 377a59a5..fcd2be8f 100644 --- a/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PluginIntegrationTestCase.java +++ b/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PluginIntegrationTestCase.java @@ -4,7 +4,7 @@ import org.jboss.shrinkwrap.resolver.api.maven.Maven; import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.NonTransitiveStrategy; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.NonTransitiveStrategy; import org.jboss.shrinkwrap.resolver.impl.maven.util.ValidationUtil; import org.junit.Assert; import org.junit.Ignore; @@ -44,13 +44,12 @@ public void loadCurrentVersion() { public void strictlyLoadTestDependencies() { PomEquippedResolveStage resolver = Maven.configureResolverViaPlugin(); - final File[] files = resolver.importRuntimeDependencies(new NonTransitiveStrategy()).as(File.class); + final File[] files = resolver.importRuntimeDependencies(NonTransitiveStrategy.INSTANCE).as(File.class); new ValidationUtil("maven-settings-builder", "plexus-interpolation", "maven-settings", "aether-util", "aether-spi", "maven-model-builder", "wagon-provider-api", "plexus-cipher", "maven-repository-metadata", - "shrinkwrap-resolver-api-maven", "maven-model", "jsoup", "sisu-inject-plexus", - "maven-aether-provider", "plexus-utils", "wagon-file", "aether-api", "aether-connector-wagon", - "plexus-classworlds", "wagon-http-lightweight", "plexus-component-annotations", "aether-impl") - .validate(files); + "shrinkwrap-resolver-api-maven", "maven-model", "jsoup", "sisu-inject-plexus", "maven-aether-provider", + "plexus-utils", "wagon-file", "aether-api", "aether-connector-wagon", "plexus-classworlds", + "wagon-http-lightweight", "plexus-component-annotations", "aether-impl").validate(files); } } diff --git a/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PomFilteringUnitTestCase.java b/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PomFilteringUnitTestCase.java index 5458ae9c..bb073ef8 100644 --- a/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PomFilteringUnitTestCase.java +++ b/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/PomFilteringUnitTestCase.java @@ -19,8 +19,8 @@ import java.io.File; import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.jboss.shrinkwrap.resolver.api.maven.strategy.RejectDependenciesStrategy; import org.jboss.shrinkwrap.resolver.impl.maven.bootstrap.MavenSettingsBuilder; -import org.jboss.shrinkwrap.resolver.impl.maven.strategy.RejectDependenciesStrategy; import org.jboss.shrinkwrap.resolver.impl.maven.util.ValidationUtil; import org.junit.AfterClass; import org.junit.BeforeClass;