FileFilter.java revision 051ed37b54dbc163dcfd67bf63f5ee749963ca20
1738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber/*******************************************************************************
237115f4ba4f6126b8c3352ac890c653e428a7dd8Marc R. Hoffmann * Copyright (c) 2009, 2013 Mountainminds GmbH & Co. KG and Contributors
3738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber * All rights reserved. This program and the accompanying materials
4738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber * are made available under the terms of the Eclipse Public License v1.0
5738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber * which accompanies this distribution, and is available at
6738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber * http://www.eclipse.org/legal/epl-v10.html
7738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber *
8738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber * Contributors:
9738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber *    Evgeny Mandrikov - initial API and implementation
1022f5498ca7eb64071f788a166f3054ec7bee658dKyle Lieber *    Kyle Lieber - implementation of CheckMojo
11051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov *
12738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber *******************************************************************************/
13738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieberpackage org.jacoco.maven;
14738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber
15738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieberimport org.apache.commons.collections.CollectionUtils;
16051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikovimport org.codehaus.plexus.util.FileUtils;
17738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieberimport org.codehaus.plexus.util.StringUtils;
18738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber
19051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikovimport java.io.File;
20051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikovimport java.io.IOException;
21051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikovimport java.util.List;
22051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov
23738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber/**
24738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber * A file filter using includes/excludes patterns.
25738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber */
26738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieberpublic class FileFilter {
27738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber
28738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	private static final String DEFAULT_INCLUDES = "**";
29738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	private static final String DEFAULT_EXCLUDES = "";
30738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber
31738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	private final List<String> includes;
32738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	private final List<String> excludes;
33738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber
34738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	/**
35738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * Construct a new FileFilter
36738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 *
37738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * @param includes
38738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 *            list of includes patterns
39738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * @param excludes
40738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 *            list of excludes patterns
41738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 */
42738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	public FileFilter(final List<String> includes, final List<String> excludes) {
43738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		this.includes = includes;
44738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		this.excludes = excludes;
45738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	}
46738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber
47738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	/**
48051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 * Returns a list of files.
49051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 *
50051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 * @param directory
51051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 *            the directory to scan
52051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 * @return a list of files
53051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 * @throws IOException
54051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 */
55051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	@SuppressWarnings("unchecked")
56051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	public List<String> getFileNames(final File directory) throws IOException {
57051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov		return FileUtils.getFileNames(directory, getIncludes(), getExcludes(),
58051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov				false);
59051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	}
60051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov
61051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	/**
62738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * Get the includes pattern
63738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 *
64738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * @return the pattern
65738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 */
66738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	public String getIncludes() {
67738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		return this.buildPattern(this.includes, DEFAULT_INCLUDES);
68738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	}
69738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber
70738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	/**
71738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * Get the excludes pattern
72738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 *
73738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * @return the pattern
74738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 */
75738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	public String getExcludes() {
76738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		return this.buildPattern(this.excludes, DEFAULT_EXCLUDES);
77738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	}
78738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber
79738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	private String buildPattern(final List<String> patterns,
80738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber			final String defaultPattern) {
81738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		String pattern = defaultPattern;
82738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		if (CollectionUtils.isNotEmpty(patterns)) {
83738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber			pattern = StringUtils.join(patterns.iterator(), ",");
84738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		}
85738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		return pattern;
86738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	}
87738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber}
88