1738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber/*******************************************************************************
2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 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
15051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikovimport java.io.File;
16051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikovimport java.io.IOException;
17051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikovimport java.util.List;
18051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov
1957f7cf06888f1e34f9ab2e3129c3d433826ecbe1Marc R. Hoffmannimport org.apache.commons.collections.CollectionUtils;
2057f7cf06888f1e34f9ab2e3129c3d433826ecbe1Marc R. Hoffmannimport org.codehaus.plexus.util.FileUtils;
2157f7cf06888f1e34f9ab2e3129c3d433826ecbe1Marc R. Hoffmannimport org.codehaus.plexus.util.StringUtils;
2257f7cf06888f1e34f9ab2e3129c3d433826ecbe1Marc R. Hoffmann
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	/**
48c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	 * Returns a list of file names.
49051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 *
50051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 * @param directory
51051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 *            the directory to scan
52051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 * @return a list of files
53051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 * @throws IOException
5457f7cf06888f1e34f9ab2e3129c3d433826ecbe1Marc R. Hoffmann	 *             if file system access fails
55051ed37b54dbc163dcfd67bf63f5ee749963ca20Evgeny Mandrikov	 */
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	/**
62c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	 * Returns a list of files.
63c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	 *
64c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	 * @param directory
65c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	 *            the directory to scan
66c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	 * @return a list of files
67c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	 * @throws IOException
68c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	 *             if file system access fails
69c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	 */
70c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	public List<File> getFiles(final File directory) throws IOException {
71c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann		return FileUtils.getFiles(directory, getIncludes(), getExcludes());
72c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	}
73c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann
74c181f60ce08ec9b0a6f59a2391c33c41bca8f1c0Marc R. Hoffmann	/**
75738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * Get the includes pattern
76738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 *
77738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * @return the pattern
78738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 */
79738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	public String getIncludes() {
80738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		return this.buildPattern(this.includes, DEFAULT_INCLUDES);
81738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	}
82738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber
83738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	/**
84738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * Get the excludes pattern
85738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 *
86738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 * @return the pattern
87738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	 */
88738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	public String getExcludes() {
89738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		return this.buildPattern(this.excludes, DEFAULT_EXCLUDES);
90738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	}
91738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber
92738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	private String buildPattern(final List<String> patterns,
93738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber			final String defaultPattern) {
94738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		String pattern = defaultPattern;
95738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		if (CollectionUtils.isNotEmpty(patterns)) {
96738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber			pattern = StringUtils.join(patterns.iterator(), ",");
97738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		}
98738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber		return pattern;
99738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber	}
100738bc0db5c9d895b2f984a499f3428cfa5376ae9Kyle Lieber}
101