196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/*
296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * this work for additional information regarding copyright ownership.
596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * (the "License"); you may not use this file except in compliance with
796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * the License.  You may obtain a copy of the License at
844de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy *
996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
1044de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy *
1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * See the License for the specific language governing permissions and
1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * limitations under the License.
1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage org.apache.commons.io.filefilter;
1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.File;
2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.Serializable;
2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.util.List;
2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport org.apache.commons.io.IOCase;
2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/**
2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Filters filenames for a certain name.
2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <p>
2844de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy * For example, to print all files and directories in the
2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * current directory whose name is <code>Test</code>:
3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * <pre>
3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * File dir = new File(".");
3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * String[] files = dir.list( new NameFileFilter("Test") );
3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * for ( int i = 0; i &lt; files.length; i++ ) {
3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *     System.out.println(files[i]);
3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * }
3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * </pre>
3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @since Commons IO 1.0
4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @version $Revision: 606381 $ $Date: 2007-12-22 02:03:16 +0000 (Sat, 22 Dec 2007) $
4144de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy *
4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Stephen Colebourne
4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Federico Barbieri
4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Serge Knystautas
4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Peter Donald
4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class NameFileFilter extends AbstractFileFilter implements Serializable {
4844de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy
4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /** The filenames to search for */
5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private final String[] names;
5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /** Whether the comparison is case sensitive. */
5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private final IOCase caseSensitivity;
5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Constructs a new case-sensitive name file filter for a single name.
5644de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param name  the name to allow, must not be null
5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IllegalArgumentException if the name is null
5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public NameFileFilter(String name) {
6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        this(name, null);
6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Construct a new name file filter specifying case-sensitivity.
6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param name  the name to allow, must not be null
6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param caseSensitivity  how to handle case sensitivity, null means case-sensitive
6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IllegalArgumentException if the name is null
7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public NameFileFilter(String name, IOCase caseSensitivity) {
7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (name == null) {
7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throw new IllegalArgumentException("The wildcard must not be null");
7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        this.names = new String[] {name};
7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Constructs a new case-sensitive name file filter for an array of names.
8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The array is not cloned, so could be changed after constructing the
8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * instance. This would be inadvisable however.
8444de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param names  the names to allow, must not be null
8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IllegalArgumentException if the names array is null
8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public NameFileFilter(String[] names) {
8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        this(names, null);
9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Constructs a new name file filter for an array of names specifying case-sensitivity.
9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <p>
9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * The array is not cloned, so could be changed after constructing the
9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * instance. This would be inadvisable however.
9744de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param names  the names to allow, must not be null
9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param caseSensitivity  how to handle case sensitivity, null means case-sensitive
10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IllegalArgumentException if the names array is null
10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public NameFileFilter(String[] names, IOCase caseSensitivity) {
10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (names == null) {
10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throw new IllegalArgumentException("The array of names must not be null");
10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        this.names = names;
10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Constructs a new case-sensitive name file filter for a list of names.
11244de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param names  the names to allow, must not be null
11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IllegalArgumentException if the name list is null
11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws ClassCastException if the list does not contain Strings
11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
11744de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    public NameFileFilter(List<String> names) {
11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        this(names, null);
11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Constructs a new name file filter for a list of names specifying case-sensitivity.
12344de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param names  the names to allow, must not be null
12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param caseSensitivity  how to handle case sensitivity, null means case-sensitive
12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IllegalArgumentException if the name list is null
12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws ClassCastException if the list does not contain Strings
12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
12944de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    public NameFileFilter(List<String> names, IOCase caseSensitivity) {
13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (names == null) {
13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throw new IllegalArgumentException("The list of names must not be null");
13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
13344de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy        this.names = names.toArray(new String[names.size()]);
13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Checks to see if the filename matches.
14044de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param file  the File to check
14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return true if the filename matches
14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
14444de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    @Override
14596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public boolean accept(File file) {
14696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        String name = file.getName();
14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        for (int i = 0; i < this.names.length; i++) {
14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (caseSensitivity.checkEquals(name, names[i])) {
14996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                return true;
15096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
15196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
15296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return false;
15396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
15496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
15596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Checks to see if the filename matches.
15744de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy     *
15896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param file  the File directory
15996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param name  the filename
16096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return true if the filename matches
16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
16244de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    @Override
16396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public boolean accept(File file, String name) {
16496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        for (int i = 0; i < names.length; i++) {
16596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            if (caseSensitivity.checkEquals(name, names[i])) {
16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                return true;
16796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
16896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
16996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return false;
17096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
17196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
17296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
17396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Provide a String representaion of this file filter.
17496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
17596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a String representaion
17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
17744de127691c5e0d1479f1976c1d69d03ee21d94eTodd Kennedy    @Override
17896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public String toString() {
17996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        StringBuffer buffer = new StringBuffer();
18096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        buffer.append(super.toString());
18196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        buffer.append("(");
18296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (names != null) {
18396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            for (int i = 0; i < names.length; i++) {
18496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                if (i > 0) {
18596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                    buffer.append(",");
18696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                }
18796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                buffer.append(names[i]);
18896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            }
18996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
19096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        buffer.append(")");
19196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return buffer.toString();
19296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
19396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
19496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project}
195