Skip to content

Commit

Permalink
[SHRINKRES-65] Move Strategies up to api-maven, add docs as necessary…
Browse files Browse the repository at this point in the history
…, reduce instance creation
  • Loading branch information
ALRubinger committed Sep 17, 2012
1 parent 44cee6b commit c529d95
Show file tree
Hide file tree
Showing 20 changed files with 188 additions and 219 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 <a href="mailto:alr@jboss.org">Andrew Lee Rubinger</a>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -29,8 +30,7 @@
* @author <a href="mailto:kpiwko@redhat.com">Karel Piwko</a>
*/
public interface MavenStrategyStageBase<STRATEGYSTAGETYPE extends MavenStrategyStageBase<STRATEGYSTAGETYPE, FORMATSTAGETYPE>, FORMATSTAGETYPE extends MavenFormatStage>
extends
TransitiveStrategyStage<MavenDependency, MavenResolutionFilter, FORMATSTAGETYPE, MavenResolutionStrategy> {
extends TransitiveStrategyStage<MavenDependency, MavenResolutionFilter, FORMATSTAGETYPE, MavenResolutionStrategy> {

/**
* Sets whether resolution should be done in "offline" (ie. not connected to internet) mode.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<MavenDependency>(coordinates.length);
final Set<MavenDependency> bannedDependencies = new HashSet<MavenDependency>(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);

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -25,22 +24,28 @@
* {@link MavenResolutionStrategy} implementation where all {@link MavenDependency}s are accepted.
*
* @author <a href="mailto:kpiwko@redhat.com">Karel Piwko</a>
* @author <a href="mailto:alr@jboss.org">Andrew Lee Rubinger</a>
*/
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;
}
}
Original file line number Diff line number Diff line change
@@ -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 <a href="mailto:kpiwko@redhat.com">Karel Piwko</a>
* @author <a href="mailto:alr@jboss.org">Andrew Lee Rubinger</a>
*/
public final class AcceptScopesStrategy implements MavenResolutionStrategy {

private final Set<ScopeType> 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<ScopeType> allowedScopes = new HashSet<ScopeType>(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]));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,14 @@
* 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;
import java.util.HashSet;
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;
Expand All @@ -33,6 +32,8 @@
*
* @author <a href="mailto:kpiwko@redhat.com">Karel Piwko</a>
*/
@Deprecated
// SHRINKRES-52
public class CombinedStrategy implements MavenResolutionStrategy {

private final Set<MavenResolutionStrategy> strategies;
Expand All @@ -48,7 +49,7 @@ public CombinedStrategy(MavenResolutionStrategy... strategies) {

@Override
public MavenResolutionFilter getPreResolutionFilter() {
List<MavenResolutionFilter> filters = new ArrayList<MavenResolutionFilter>(strategies.size());
final List<MavenResolutionFilter> filters = new ArrayList<MavenResolutionFilter>(strategies.size());
for (MavenResolutionStrategy s : strategies) {
filters.add(s.getPreResolutionFilter());
}
Expand All @@ -58,22 +59,12 @@ public MavenResolutionFilter getPreResolutionFilter() {

@Override
public MavenResolutionFilter getResolutionFilter() {
List<MavenResolutionFilter> filters = new ArrayList<MavenResolutionFilter>(strategies.size());
final List<MavenResolutionFilter> filters = new ArrayList<MavenResolutionFilter>(strategies.size());
for (MavenResolutionStrategy s : strategies) {
filters.add(s.getResolutionFilter());
}

return new CombinedFilter(filters.toArray(EMPTY_ARRAY));
}

@Override
public MavenResolutionFilter getPostResolutionFilter() {
List<MavenResolutionFilter> filters = new ArrayList<MavenResolutionFilter>(strategies.size());
for (MavenResolutionStrategy s : strategies) {
filters.add(s.getPostResolutionFilter());
}

return new CombinedFilter(filters.toArray(EMPTY_ARRAY));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,47 +13,37 @@
* 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 <code>RESOLUTIONFILTERTYPE</code> 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 <a href="mailto:kpiwko@redhat.com">Karel Piwko</a>
* @author <a href="mailto:alr@jboss.org">Andrew Lee Rubinger</a>
*/
public interface MavenResolutionStrategy extends
TransitiveResolutionStrategy<MavenDependency, MavenResolutionFilter, MavenResolutionStrategy> {
ResolutionStrategy<MavenDependency, MavenResolutionFilter, MavenResolutionStrategy> {
/**
* 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
*/
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();
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -26,21 +25,28 @@
* {@link MavenResolutionStrategy} implementation where only explicitly-defined {@link MavenDependency}s are accepted
*
* @author <a href="mailto:kpiwko@redhat.com">Karel Piwko</a>
* @author <a href="mailto:alr@jboss.org">Andrew Lee Rubinger</a>
*/
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;
}
}

0 comments on commit c529d95

Please sign in to comment.