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