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.FileFilter;
2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.io.FilenameFilter;
2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport java.util.Date;
2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/**
2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Useful utilities for working with file filters. It provides access to all
2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * file filter implementations in this package so you don't have to import
2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * every class you use.
2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @since Commons IO 1.0
3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @version $Id: FileFilterUtils.java 609286 2008-01-06 10:01:26Z scolebourne $
3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Stephen Colebourne
3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Jeremias Maerki
3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Masato Tezuka
3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * @author Rahul Akolkar
3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class FileFilterUtils {
3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * FileFilterUtils is not normally instantiated.
4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public FileFilterUtils() {
4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that returns true if the filename starts with the specified text.
4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param prefix  the filename prefix
5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a prefix checking filter
5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter prefixFileFilter(String prefix) {
5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new PrefixFileFilter(prefix);
5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that returns true if the filename ends with the specified text.
5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param suffix  the filename suffix
6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a suffix checking filter
6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter suffixFileFilter(String suffix) {
6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new SuffixFileFilter(suffix);
6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that returns true if the filename matches the specified text.
6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param name  the filename
7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a name checking filter
7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter nameFileFilter(String name) {
7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new NameFileFilter(name);
7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that checks if the file is a directory.
7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return file filter that accepts only directories and not files
8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter directoryFileFilter() {
8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return DirectoryFileFilter.DIRECTORY;
8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that checks if the file is a file (and not a directory).
8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return file filter that accepts only files and not directories
8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter fileFileFilter() {
9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return FileFileFilter.FILE;
9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that ANDs the two specified filters.
9796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter1  the first filter
9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter2  the second filter
10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a filter that ANDs the two specified filters
10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter andFileFilter(IOFileFilter filter1, IOFileFilter filter2) {
10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new AndFileFilter(filter1, filter2);
10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that ORs the two specified filters.
10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter1  the first filter
11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter2  the second filter
11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a filter that ORs the two specified filters
11296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter orFileFilter(IOFileFilter filter1, IOFileFilter filter2) {
11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new OrFileFilter(filter1, filter2);
11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that NOTs the specified filter.
11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter  the filter to invert
12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a filter that NOTs the specified filter
12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter notFileFilter(IOFileFilter filter) {
12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new NotFileFilter(filter);
12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that always returns true.
13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a true filter
13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
13396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter trueFileFilter() {
13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return TrueFileFilter.TRUE;
13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that always returns false.
13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
14096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a false filter
14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter falseFileFilter() {
14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return FalseFileFilter.FALSE;
14496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
14596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
14696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns an <code>IOFileFilter</code> that wraps the
14996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>FileFilter</code> instance.
15096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
15196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter  the filter to be wrapped
15296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a new filter that implements IOFileFilter
15396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
15496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter asFileFilter(FileFilter filter) {
15596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new DelegateFileFilter(filter);
15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
15796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
15896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
15996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns an <code>IOFileFilter</code> that wraps the
16096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * <code>FilenameFilter</code> instance.
16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
16296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter  the filter to be wrapped
16396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return a new filter that implements IOFileFilter
16496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
16596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter asFileFilter(FilenameFilter filter) {
16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new DelegateFileFilter(filter);
16796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
16896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
16996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
17096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
17196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that returns true if the file was last modified after
17296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * the specified cutoff time.
17396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
17496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param cutoff  the time threshold
17596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an appropriately configured age file filter
17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.2
17796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
17896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter ageFileFilter(long cutoff) {
17996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new AgeFileFilter(cutoff);
18096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
18196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
18296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
18396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that filters files based on a cutoff time.
18496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
18596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param cutoff  the time threshold
18696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param acceptOlder  if true, older files get accepted, if false, newer
18796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an appropriately configured age file filter
18896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.2
18996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
19096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter ageFileFilter(long cutoff, boolean acceptOlder) {
19196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new AgeFileFilter(cutoff, acceptOlder);
19296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
19396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
19496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
19596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that returns true if the file was last modified after
19696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * the specified cutoff date.
19796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
19896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param cutoffDate  the time threshold
19996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an appropriately configured age file filter
20096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.2
20196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
20296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter ageFileFilter(Date cutoffDate) {
20396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new AgeFileFilter(cutoffDate);
20496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
20596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
20696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
20796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that filters files based on a cutoff date.
20896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
20996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param cutoffDate  the time threshold
21096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param acceptOlder  if true, older files get accepted, if false, newer
21196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an appropriately configured age file filter
21296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.2
21396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
21496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter ageFileFilter(Date cutoffDate, boolean acceptOlder) {
21596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new AgeFileFilter(cutoffDate, acceptOlder);
21696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
21796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
21896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
21996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that returns true if the file was last modified after
22096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * the specified reference file.
22196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
22296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param cutoffReference  the file whose last modification
22396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *        time is usesd as the threshold age of the files
22496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an appropriately configured age file filter
22596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.2
22696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
22796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter ageFileFilter(File cutoffReference) {
22896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new AgeFileFilter(cutoffReference);
22996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
23096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
23196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
23296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that filters files based on a cutoff reference file.
23396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
23496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param cutoffReference  the file whose last modification
23596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *        time is usesd as the threshold age of the files
23696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param acceptOlder  if true, older files get accepted, if false, newer
23796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an appropriately configured age file filter
23896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.2
23996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
24096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter ageFileFilter(File cutoffReference, boolean acceptOlder) {
24196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new AgeFileFilter(cutoffReference, acceptOlder);
24296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
24396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
24496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
24596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
24696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that returns true if the file is bigger than a certain size.
24796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
24896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param threshold  the file size threshold
24996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an appropriately configured SizeFileFilter
25096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.2
25196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
25296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter sizeFileFilter(long threshold) {
25396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new SizeFileFilter(threshold);
25496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
25596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
25696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
25796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that filters based on file size.
25896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
25996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param threshold  the file size threshold
26096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param acceptLarger  if true, larger files get accepted, if false, smaller
26196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an appropriately configured SizeFileFilter
26296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.2
26396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
26496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter sizeFileFilter(long threshold, boolean acceptLarger) {
26596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new SizeFileFilter(threshold, acceptLarger);
26696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
26796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
26896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
26996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Returns a filter that accepts files whose size is &gt;= minimum size
27096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * and &lt;= maximum size.
27196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
27296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param minSizeInclusive the minimum file size (inclusive)
27396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param maxSizeInclusive the maximum file size (inclusive)
27496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return an appropriately configured IOFileFilter
27596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.3
27696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
27796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter sizeRangeFileFilter(long minSizeInclusive, long maxSizeInclusive ) {
27896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        IOFileFilter minimumFilter = new SizeFileFilter(minSizeInclusive, true);
27996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        IOFileFilter maximumFilter = new SizeFileFilter(maxSizeInclusive + 1L, false);
28096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new AndFileFilter(minimumFilter, maximumFilter);
28196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
28296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
28396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
28496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /* Constructed on demand and then cached */
28596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private static IOFileFilter cvsFilter;
28696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
28796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /* Constructed on demand and then cached */
28896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private static IOFileFilter svnFilter;
28996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
29096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
29196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Decorates a filter to make it ignore CVS directories.
29296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Passing in <code>null</code> will return a filter that accepts everything
29396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * except CVS directories.
29496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
29596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter  the filter to decorate, null means an unrestricted filter
29696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the decorated filter, never null
29796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1 (method existed but had bug in 1.0)
29896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
29996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter makeCVSAware(IOFileFilter filter) {
30096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (cvsFilter == null) {
30196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            cvsFilter = notFileFilter(
30296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                andFileFilter(directoryFileFilter(), nameFileFilter("CVS")));
30396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
30496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (filter == null) {
30596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return cvsFilter;
30696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } else {
30796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return andFileFilter(filter, cvsFilter);
30896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
30996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
31096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
31196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
31296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Decorates a filter to make it ignore SVN directories.
31396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Passing in <code>null</code> will return a filter that accepts everything
31496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * except SVN directories.
31596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
31696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter  the filter to decorate, null means an unrestricted filter
31796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the decorated filter, never null
31896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.1
31996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
32096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter makeSVNAware(IOFileFilter filter) {
32196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (svnFilter == null) {
32296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            svnFilter = notFileFilter(
32396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                andFileFilter(directoryFileFilter(), nameFileFilter(".svn")));
32496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
32596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (filter == null) {
32696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return svnFilter;
32796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        } else {
32896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return andFileFilter(filter, svnFilter);
32996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
33096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
33196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
33296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    //-----------------------------------------------------------------------
33396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
33496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Decorates a filter so that it only applies to directories and not to files.
33596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
33696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter  the filter to decorate, null means an unrestricted filter
33796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the decorated filter, never null
33896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.3
33996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
34096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter makeDirectoryOnly(IOFileFilter filter) {
34196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (filter == null) {
34296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return DirectoryFileFilter.DIRECTORY;
34396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
34496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new AndFileFilter(DirectoryFileFilter.DIRECTORY, filter);
34596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
34696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
34796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
34896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Decorates a filter so that it only applies to files and not to directories.
34996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     *
35096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @param filter  the filter to decorate, null means an unrestricted filter
35196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @return the decorated filter, never null
35296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * @since Commons IO 1.3
35396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
35496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public static IOFileFilter makeFileOnly(IOFileFilter filter) {
35596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (filter == null) {
35696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            return FileFileFilter.FILE;
35796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
35896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new AndFileFilter(FileFileFilter.FILE, filter);
35996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
36096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
36196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project}
362