14ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/*
24ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Licensed to the Apache Software Foundation (ASF) under one or more
34ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * contributor license agreements.  See the NOTICE file distributed with
44ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * this work for additional information regarding copyright ownership.
54ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * The ASF licenses this file to You under the Apache License, Version 2.0
64ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * (the "License"); you may not use this file except in compliance with
74ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * the License.  You may obtain a copy of the License at
84ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *
94ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *      http://www.apache.org/licenses/LICENSE-2.0
104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *
114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Unless required by applicable law or agreed to in writing, software
124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * See the License for the specific language governing permissions and
154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * limitations under the License.
164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */
174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapackage org.apache.commons.io.filefilter;
184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.File;
204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.FileFilter;
214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.FilenameFilter;
224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.io.Serializable;
234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/**
254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * This class turns a Java FileFilter or FilenameFilter into an IO FileFilter.
264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *
274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @since Commons IO 1.0
284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @version $Revision: 591058 $ $Date: 2007-11-01 15:47:05 +0000 (Thu, 01 Nov 2007) $
294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira *
304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @author Stephen Colebourne
314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */
324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic class DelegateFileFilter extends AbstractFileFilter implements Serializable {
334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /** The Filename filter */
354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    private final FilenameFilter filenameFilter;
364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /** The File filter */
374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    private final FileFilter fileFilter;
384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Constructs a delegate file filter around an existing FilenameFilter.
414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     *
424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param filter  the filter to decorate
434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public DelegateFileFilter(FilenameFilter filter) {
454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        if (filter == null) {
464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw new IllegalArgumentException("The FilenameFilter must not be null");
474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        this.filenameFilter = filter;
494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        this.fileFilter = null;
504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Constructs a delegate file filter around an existing FileFilter.
544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     *
554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param filter  the filter to decorate
564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public DelegateFileFilter(FileFilter filter) {
584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        if (filter == null) {
594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            throw new IllegalArgumentException("The FileFilter must not be null");
604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        this.fileFilter = filter;
624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        this.filenameFilter = null;
634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Checks the filter.
674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     *
684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param file  the file to check
694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @return true if the filter matches
704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public boolean accept(File file) {
724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        if (fileFilter != null) {
734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            return fileFilter.accept(file);
744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } else {
754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            return super.accept(file);
764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Checks the filter.
814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     *
824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param dir  the directory
834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @param name  the filename in the directory
844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @return true if the filter matches
854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public boolean accept(File dir, String name) {
874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        if (filenameFilter != null) {
884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            return filenameFilter.accept(dir, name);
894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        } else {
904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            return super.accept(dir, name);
914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    /**
954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * Provide a String representaion of this file filter.
964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     *
974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     * @return a String representaion
984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     */
994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    public String toString() {
1004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        String delegate = (fileFilter != null ? fileFilter.toString() : filenameFilter.toString());
1014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return super.toString() + "(" + delegate + ")";
1024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
1034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira}
105