14ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/* 24ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Licensed to the Apache Software Foundation (ASF) under one or more 34ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * contributor license agreements. See the NOTICE file distributed with 44ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * this work for additional information regarding copyright ownership. 54ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The ASF licenses this file to You under the Apache License, Version 2.0 64ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * (the "License"); you may not use this file except in compliance with 74ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * the License. You may obtain a copy of the License at 84ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 94ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * http://www.apache.org/licenses/LICENSE-2.0 104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Unless required by applicable law or agreed to in writing, software 124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS, 134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * See the License for the specific language governing permissions and 154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * limitations under the License. 164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapackage org.apache.commons.io.filefilter; 184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.File; 204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.Serializable; 214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.util.List; 224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport org.apache.commons.io.IOCase; 244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/** 264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Filters filenames for a certain name. 274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <p> 284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * For example, to print all files and directories in the 294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * current directory whose name is <code>Test</code>: 304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <pre> 324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * File dir = new File("."); 334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * String[] files = dir.list( new NameFileFilter("Test") ); 344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * for ( int i = 0; i < files.length; i++ ) { 354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * System.out.println(files[i]); 364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * } 374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * </pre> 384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @since Commons IO 1.0 404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @version $Revision: 606381 $ $Date: 2007-12-22 02:03:16 +0000 (Sat, 22 Dec 2007) $ 414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @author Stephen Colebourne 434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @author Federico Barbieri 444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @author Serge Knystautas 454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @author Peter Donald 464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic class NameFileFilter extends AbstractFileFilter implements Serializable { 484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** The filenames to search for */ 504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira private final String[] names; 514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** Whether the comparison is case sensitive. */ 524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira private final IOCase caseSensitivity; 534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs a new case-sensitive name file filter for a single name. 564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param name the name to allow, must not be null 584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws IllegalArgumentException if the name is null 594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public NameFileFilter(String name) { 614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this(name, null); 624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Construct a new name file filter specifying case-sensitivity. 664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param name the name to allow, must not be null 684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param caseSensitivity how to handle case sensitivity, null means case-sensitive 694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws IllegalArgumentException if the name is null 704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public NameFileFilter(String name, IOCase caseSensitivity) { 724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (name == null) { 734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira throw new IllegalArgumentException("The wildcard must not be null"); 744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.names = new String[] {name}; 764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity); 774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs a new case-sensitive name file filter for an array of names. 814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <p> 824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The array is not cloned, so could be changed after constructing the 834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * instance. This would be inadvisable however. 844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param names the names to allow, must not be null 864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws IllegalArgumentException if the names array is null 874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public NameFileFilter(String[] names) { 894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this(names, null); 904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs a new name file filter for an array of names specifying case-sensitivity. 944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <p> 954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The array is not cloned, so could be changed after constructing the 964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * instance. This would be inadvisable however. 974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param names the names to allow, must not be null 994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param caseSensitivity how to handle case sensitivity, null means case-sensitive 1004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws IllegalArgumentException if the names array is null 1014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public NameFileFilter(String[] names, IOCase caseSensitivity) { 1034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (names == null) { 1044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira throw new IllegalArgumentException("The array of names must not be null"); 1054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.names = names; 1074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity); 1084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs a new case-sensitive name file filter for a list of names. 1124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param names the names to allow, must not be null 1144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws IllegalArgumentException if the name list is null 1154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws ClassCastException if the list does not contain Strings 1164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public NameFileFilter(List<String> names) { 1184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this(names, null); 1194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs a new name file filter for a list of names specifying case-sensitivity. 1234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param names the names to allow, must not be null 1254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param caseSensitivity how to handle case sensitivity, null means case-sensitive 1264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws IllegalArgumentException if the name list is null 1274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws ClassCastException if the list does not contain Strings 1284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public NameFileFilter(List<String> names, IOCase caseSensitivity) { 1304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (names == null) { 1314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira throw new IllegalArgumentException("The list of names must not be null"); 1324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.names = names.toArray(new String[names.size()]); 1344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity); 1354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira //----------------------------------------------------------------------- 1384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Checks to see if the filename matches. 1404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param file the File to check 1424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @return true if the filename matches 1434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira @Override 1454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public boolean accept(File file) { 1464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira String name = file.getName(); 1474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira for (int i = 0; i < this.names.length; i++) { 1484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (caseSensitivity.checkEquals(name, names[i])) { 1494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return true; 1504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return false; 1534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Checks to see if the filename matches. 1574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param file the File directory 1594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param name the filename 1604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @return true if the filename matches 1614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira @Override 1634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public boolean accept(File file, String name) { 1644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira for (int i = 0; i < names.length; i++) { 1654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (caseSensitivity.checkEquals(name, names[i])) { 1664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return true; 1674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return false; 1704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Provide a String representaion of this file filter. 1744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @return a String representaion 1764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira @Override 1784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public String toString() { 1794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira StringBuffer buffer = new StringBuffer(); 1804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira buffer.append(super.toString()); 1814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira buffer.append("("); 1824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (names != null) { 1834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira for (int i = 0; i < names.length; i++) { 1844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (i > 0) { 1854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira buffer.append(","); 1864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira buffer.append(names[i]); 1884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira buffer.append(")"); 1914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return buffer.toString(); 1924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira} 195