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
896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
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 Project
2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/**
2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * This filter produces a logical NOT of the filters specified.
2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @since Commons IO 1.0
2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @version $Revision: 591058 $ $Date: 2007-11-01 15:47:05 +0000 (Thu, 01 Nov 2007) $
2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Stephen Colebourne
2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class NotFileFilter extends AbstractFileFilter implements Serializable {
3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /** The filter */
3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private final IOFileFilter filter;
3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Constructs a new file filter that NOTs the result of another filters.
3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter  the filter, must not be null
3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @throws IllegalArgumentException if the filter is null
4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public NotFileFilter(IOFileFilter filter) {
4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (filter == null) {
4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            throw new IllegalArgumentException("The filter must not be null");
4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        this.filter = filter;
4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Checks to see if both filters are true.
5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param file  the File to check
5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return true if the filter returns false
5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public boolean accept(File file) {
5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return ! filter.accept(file);
5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Checks to see if both filters are true.
6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param file  the File directory
6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param name  the filename
6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return true if the filter returns false
6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public boolean accept(File file, String name) {
6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return ! filter.accept(file, name);
6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Provide a String representaion of this file filter.
7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a String representaion
7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public String toString() {
7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return super.toString() + "(" + filter.toString()  + ")";
7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project}
79