1bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/*
2bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Licensed to the Apache Software Foundation (ASF) under one or more
3bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * contributor license agreements.  See the NOTICE file distributed with
4bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * this work for additional information regarding copyright ownership.
5bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * The ASF licenses this file to You under the Apache License, Version 2.0
6bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * (the "License"); you may not use this file except in compliance with
7bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * the License.  You may obtain a copy of the License at
8bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
9bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *      http://www.apache.org/licenses/LICENSE-2.0
10bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
11bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Unless required by applicable law or agreed to in writing, software
12bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * distributed under the License is distributed on an "AS IS" BASIS,
13bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * See the License for the specific language governing permissions and
15bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * limitations under the License.
16bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */
17bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpackage org.apache.commons.io.filefilter;
18bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
19bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.File;
20bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport java.io.Serializable;
21bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
22bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/**
23bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This filter produces a logical NOT of the filters specified.
24bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
25bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @since Commons IO 1.0
26bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @version $Revision: 591058 $ $Date: 2007-11-01 15:47:05 +0000 (Thu, 01 Nov 2007) $
27bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
28bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @author Stephen Colebourne
29bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */
30bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpublic class NotFileFilter extends AbstractFileFilter implements Serializable {
31bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
32bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /** The filter */
33bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    private final IOFileFilter filter;
34bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
35bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /**
36bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * Constructs a new file filter that NOTs the result of another filters.
37bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     *
38bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @param filter  the filter, must not be null
39bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @throws IllegalArgumentException if the filter is null
40bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     */
41bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public NotFileFilter(IOFileFilter filter) {
42bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (filter == null) {
43bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            throw new IllegalArgumentException("The filter must not be null");
44bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
45bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        this.filter = filter;
46bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
47bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
48bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /**
49bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * Checks to see if both filters are true.
50bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     *
51bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @param file  the File to check
52bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @return true if the filter returns false
53bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     */
54bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public boolean accept(File file) {
55bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        return ! filter.accept(file);
56bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
57bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
58bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /**
59bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * Checks to see if both filters are true.
60bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     *
61bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @param file  the File directory
62bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @param name  the filename
63bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @return true if the filter returns false
64bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     */
65bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public boolean accept(File file, String name) {
66bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        return ! filter.accept(file, name);
67bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
68bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
69bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /**
70bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * Provide a String representaion of this file filter.
71bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     *
72bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @return a String representaion
73bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     */
74bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public String toString() {
75bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        return super.toString() + "(" + filter.toString()  + ")";
76bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
77bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
78bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook}
79