Skip to content

Commit

Permalink
SHRINKWRAP-491 Add Filters.include|ExcludePaths(String...)
Browse files Browse the repository at this point in the history
Filter to match against a list of paths.
  • Loading branch information
aslakknutsen authored and ALRubinger committed Sep 13, 2015
1 parent ae0a43f commit 47c48b7
Show file tree
Hide file tree
Showing 4 changed files with 253 additions and 0 deletions.
53 changes: 53 additions & 0 deletions api/src/main/java/org/jboss/shrinkwrap/api/Filters.java
Expand Up @@ -16,6 +16,7 @@
*/
package org.jboss.shrinkwrap.api;

import java.util.Collection;
import java.util.regex.Pattern;

import javax.annotation.processing.Filer;
Expand All @@ -39,6 +40,10 @@ public final class Filters {

private static final String IMPL_CLASS_NAME_EXCLUDE_REGEXP_PATHS = "org.jboss.shrinkwrap.impl.base.filter.ExcludeRegExpPaths";

private static final String IMPL_CLASS_NAME_INCLUDE_PATHS = "org.jboss.shrinkwrap.impl.base.filter.IncludePaths";

private static final String IMPL_CLASS_NAME_EXCLUDE_PATHS = "org.jboss.shrinkwrap.impl.base.filter.ExcludePaths";

/**
* {@link Filter} that includes all {@link ArchivePath}s.
*
Expand Down Expand Up @@ -74,6 +79,54 @@ public static Filter<ArchivePath> exclude(final String regexp) {
new Object[] { regexp });
}

/**
* {@link Filer} that include all {@link ArchivePath}s that match the given List of paths..
*
* @param paths
* The paths to included
* @return A Path list based include {@link Filter}
*/
public static Filter<ArchivePath> includePaths(final String... paths) {
return getFilterInstance(IMPL_CLASS_NAME_INCLUDE_PATHS, new Class<?>[] { String[].class },
new Object[] { paths });
}

/**
* {@link Filer} that include all {@link ArchivePath}s that match the given List of paths..
*
* @param paths
* The paths to included
* @return A Path list based include {@link Filter}
*/
public static Filter<ArchivePath> includePaths(final Collection<String> paths) {
return getFilterInstance(IMPL_CLASS_NAME_INCLUDE_PATHS, new Class<?>[] { Collection.class },
new Object[] { paths });
}

/**
* {@link Filter} that exclude all {@link ArchivePath}s that match the given List of paths.
*
* @param paths
* The paths to exclude
* @return A Path list based exclude {@link Filter}
*/
public static Filter<ArchivePath> excludePaths(final String... paths) {
return getFilterInstance(IMPL_CLASS_NAME_EXCLUDE_PATHS, new Class<?>[] { String[].class },
new Object[] { paths });
}

/**
* {@link Filter} that exclude all {@link ArchivePath}s that match the given List of paths.
*
* @param paths
* The paths to exclude
* @return A Path list based exclude {@link Filter}
*/
public static Filter<ArchivePath> excludePaths(final Collection<String> paths) {
return getFilterInstance(IMPL_CLASS_NAME_EXCLUDE_PATHS, new Class<?>[] { Collection.class },
new Object[] { paths });
}

/**
* {@link Filter} that includes listed {@link Package}.
*
Expand Down
@@ -0,0 +1,81 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2009, 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.impl.base.filter;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.jboss.shrinkwrap.api.ArchivePath;
import org.jboss.shrinkwrap.api.Filter;
import org.jboss.shrinkwrap.impl.base.Validate;
import org.jboss.shrinkwrap.impl.base.path.PathUtil;

/**
* IncludePaths
*
* Filter to exclude all {@link ArchivePath}s that match the given List of paths.
*
* @author <a href="mailto:aslak@conduct.no">Aslak Knutsen</a>
* @version $Revision: $
*/
public class ExcludePaths implements Filter<ArchivePath> {
// -------------------------------------------------------------------------------------||
// Instance Members -------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||

private Set<String> paths;

// -------------------------------------------------------------------------------------||
// Constructor ------------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||

public ExcludePaths(String... paths) {
Validate.notNull(paths, "Paths must be specified");
this.paths = adjust(paths);
}

public ExcludePaths(Collection<String> paths) {
Validate.notNull(paths, "Paths must be specified");
this.paths = adjust(paths.toArray(new String[0]));
}

private Set<String> adjust(String... paths) {
Set<String> adjusted = new HashSet<String>();
for(String path : paths) {
adjusted.add(PathUtil.optionallyPrependSlash(path));
}
return adjusted;
}

// -------------------------------------------------------------------------------------||
// Required Implementations -----------------------------------------------------------||
// -------------------------------------------------------------------------------------||

/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.Filter#includePaths(String[])
*/
@Override
public boolean include(ArchivePath path) {
if (paths.contains(path.get())) {
return false;
}
return true;
}
}
@@ -0,0 +1,81 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2009, 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.impl.base.filter;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.jboss.shrinkwrap.api.ArchivePath;
import org.jboss.shrinkwrap.api.Filter;
import org.jboss.shrinkwrap.impl.base.Validate;
import org.jboss.shrinkwrap.impl.base.path.PathUtil;

/**
* IncludePaths
*
* Filter to include all {@link ArchivePath}s that match the given List of paths.
*
* @author <a href="mailto:aslak@conduct.no">Aslak Knutsen</a>
* @version $Revision: $
*/
public class IncludePaths implements Filter<ArchivePath> {
// -------------------------------------------------------------------------------------||
// Instance Members -------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||

private Set<String> paths;

// -------------------------------------------------------------------------------------||
// Constructor ------------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||

public IncludePaths(String... paths) {
Validate.notNull(paths, "Paths must be specified");
this.paths = adjust(paths);
}

public IncludePaths(Collection<String> paths) {
Validate.notNull(paths, "Paths must be specified");
this.paths = adjust(paths.toArray(new String[0]));
}

private Set<String> adjust(String... paths) {
Set<String> adjusted = new HashSet<String>();
for(String path : paths) {
adjusted.add(PathUtil.optionallyPrependSlash(path));
}
return adjusted;
}

// -------------------------------------------------------------------------------------||
// Required Implementations -----------------------------------------------------------||
// -------------------------------------------------------------------------------------||

/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.Filter#includePaths(String[])
*/
@Override
public boolean include(ArchivePath path) {
if (paths.contains(path.get())) {
return true;
}
return false;
}
}
Expand Up @@ -63,6 +63,44 @@ public void shouldExcludePathRegExp() throws Exception {
Assert.assertEquals("Should only contain webinf", ArchivePaths.create("/WEB-INF/"), filteredPaths.get(0));
}

@Test
public void shouldIncludePathsStringArray() throws Exception {
List<ArchivePath> paths = Arrays.asList(ArchivePaths.create("/A"), ArchivePaths.create("/B/"), ArchivePaths.create("/C/"));
List<ArchivePath> filteredPaths = executeFilter(ArchivePath.class, paths, Filters.includePaths("A", "B/"));

Assert.assertEquals("Should contain two", 2, filteredPaths.size());
Assert.assertEquals("Should contain A", ArchivePaths.create("/A"), filteredPaths.get(0));
Assert.assertEquals("Should contain B", ArchivePaths.create("/B"), filteredPaths.get(1));
}

@Test
public void shouldIncludePathsCollection() throws Exception {
List<ArchivePath> paths = Arrays.asList(ArchivePaths.create("/A"), ArchivePaths.create("/B/"), ArchivePaths.create("/C/"));
List<ArchivePath> filteredPaths = executeFilter(ArchivePath.class, paths, Filters.includePaths(Arrays.asList("A", "B/")));

Assert.assertEquals("Should contain two", 2, filteredPaths.size());
Assert.assertEquals("Should contain A", ArchivePaths.create("/A"), filteredPaths.get(0));
Assert.assertEquals("Should contain B", ArchivePaths.create("/B"), filteredPaths.get(1));
}

@Test
public void shouldExcludePathsStringArray() throws Exception {
List<ArchivePath> paths = Arrays.asList(ArchivePaths.create("/A"), ArchivePaths.create("/B/"), ArchivePaths.create("/C/"));
List<ArchivePath> filteredPaths = executeFilter(ArchivePath.class, paths, Filters.excludePaths("/A", "/B/"));

Assert.assertEquals("Should only contain one", 1, filteredPaths.size());
Assert.assertEquals("Should only contain C", ArchivePaths.create("/C"), filteredPaths.get(0));
}

@Test
public void shouldExcludePathsCollection() throws Exception {
List<ArchivePath> paths = Arrays.asList(ArchivePaths.create("/A"), ArchivePaths.create("/B/"), ArchivePaths.create("/C/"));
List<ArchivePath> filteredPaths = executeFilter(ArchivePath.class, paths, Filters.excludePaths(Arrays.asList("/A", "/B/")));

Assert.assertEquals("Should only contain one", 1, filteredPaths.size());
Assert.assertEquals("Should only contain C", ArchivePaths.create("/C"), filteredPaths.get(0));
}

private <T> List<T> executeFilter(Class<T> clazz, List<T> items, Filter<T> filter) {
List<T> result = new ArrayList<T>();
for (T item : items) {
Expand Down

0 comments on commit 47c48b7

Please sign in to comment.