001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     * 
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.commons.io.filefilter;
018    
019    import java.io.File;
020    import java.io.FileFilter;
021    import java.io.FilenameFilter;
022    import java.io.Serializable;
023    
024    /**
025     * This class turns a Java FileFilter or FilenameFilter into an IO FileFilter.
026     * 
027     * @since Commons IO 1.0
028     * @version $Revision: 1005099 $ $Date: 2010-10-06 12:13:01 -0400 (Wed, 06 Oct 2010) $
029     * 
030     * @author Stephen Colebourne
031     * @see FileFilterUtils#asFileFilter(FileFilter)
032     * @see FileFilterUtils#asFileFilter(FilenameFilter)
033     */
034    public class DelegateFileFilter extends AbstractFileFilter implements Serializable {
035    
036        /** The Filename filter */
037        private final FilenameFilter filenameFilter;
038        /** The File filter */
039        private final FileFilter fileFilter;
040    
041        /**
042         * Constructs a delegate file filter around an existing FilenameFilter.
043         * 
044         * @param filter  the filter to decorate
045         */
046        public DelegateFileFilter(FilenameFilter filter) {
047            if (filter == null) {
048                throw new IllegalArgumentException("The FilenameFilter must not be null");
049            }
050            this.filenameFilter = filter;
051            this.fileFilter = null;
052        }
053    
054        /**
055         * Constructs a delegate file filter around an existing FileFilter.
056         * 
057         * @param filter  the filter to decorate
058         */
059        public DelegateFileFilter(FileFilter filter) {
060            if (filter == null) {
061                throw new IllegalArgumentException("The FileFilter must not be null");
062            }
063            this.fileFilter = filter;
064            this.filenameFilter = null;
065        }
066    
067        /**
068         * Checks the filter.
069         * 
070         * @param file  the file to check
071         * @return true if the filter matches
072         */
073        @Override
074        public boolean accept(File file) {
075            if (fileFilter != null) {
076                return fileFilter.accept(file);
077            } else {
078                return super.accept(file);
079            }
080        }
081    
082        /**
083         * Checks the filter.
084         * 
085         * @param dir  the directory
086         * @param name  the filename in the directory
087         * @return true if the filter matches
088         */
089        @Override
090        public boolean accept(File dir, String name) {
091            if (filenameFilter != null) {
092                return filenameFilter.accept(dir, name);
093            } else {
094                return super.accept(dir, name);
095            }
096        }
097    
098        /**
099         * Provide a String representaion of this file filter.
100         *
101         * @return a String representaion
102         */
103        @Override
104        public String toString() {
105            String delegate = (fileFilter != null ? fileFilter.toString() : filenameFilter.toString()); 
106            return super.toString() + "(" + delegate + ")";
107        }
108        
109    }