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 &lt; 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