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