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.Serializable; 214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.util.ArrayList; 224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.util.Collections; 234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.util.Iterator; 244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereiraimport java.util.List; 254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/** 274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * A {@link java.io.FileFilter} providing conditional OR logic across a list of 284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * file filters. This filter returns <code>true</code> if any filters in the 294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * list return <code>true</code>. Otherwise, it returns <code>false</code>. 304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Checking of the file filter list stops when the first filter returns 314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * <code>true</code>. 324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @since Commons IO 1.0 344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @version $Revision: 606381 $ $Date: 2007-12-22 02:03:16 +0000 (Sat, 22 Dec 2007) $ 354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @author Steven Caswell 374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic class OrFileFilter 394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira extends AbstractFileFilter 404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira implements ConditionalFileFilter, Serializable { 414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** The list of file filters. */ 434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira private List<IOFileFilter> fileFilters; 444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs a new instance of <code>OrFileFilter</code>. 474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @since Commons IO 1.1 494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public OrFileFilter() { 514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.fileFilters = new ArrayList<IOFileFilter>(); 524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs a new instance of <code>OrFileFilter</code> 564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * with the specified filters. 574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param fileFilters the file filters for this filter, copied, null ignored 594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @since Commons IO 1.1 604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public OrFileFilter(final List<IOFileFilter> fileFilters) { 624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (fileFilters == null) { 634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.fileFilters = new ArrayList<IOFileFilter>(); 644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } else { 654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.fileFilters = new ArrayList<IOFileFilter>(fileFilters); 664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Constructs a new file filter that ORs the result of two other filters. 714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param filter1 the first filter, must not be null 734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @param filter2 the second filter, must not be null 744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @throws IllegalArgumentException if either filter is null 754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public OrFileFilter(IOFileFilter filter1, IOFileFilter filter2) { 774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (filter1 == null || filter2 == null) { 784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira throw new IllegalArgumentException("The filters must not be null"); 794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.fileFilters = new ArrayList<IOFileFilter>(); 814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira addFileFilter(filter1); 824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira addFileFilter(filter2); 834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * {@inheritDoc} 874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public void addFileFilter(final IOFileFilter ioFileFilter) { 894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.fileFilters.add(ioFileFilter); 904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * {@inheritDoc} 944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public List<IOFileFilter> getFileFilters() { 964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return Collections.unmodifiableList(this.fileFilters); 974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * {@inheritDoc} 1014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public boolean removeFileFilter(IOFileFilter ioFileFilter) { 1034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return this.fileFilters.remove(ioFileFilter); 1044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * {@inheritDoc} 1084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public void setFileFilters(final List<IOFileFilter> fileFilters) { 1104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira this.fileFilters = fileFilters; 1114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * {@inheritDoc} 1154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira @Override 1174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public boolean accept(final File file) { 1184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira for (Iterator<IOFileFilter> iter = this.fileFilters.iterator(); iter.hasNext();) { 1194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira IOFileFilter fileFilter = iter.next(); 1204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (fileFilter.accept(file)) { 1214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return true; 1224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return false; 1254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * {@inheritDoc} 1294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira @Override 1314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public boolean accept(final File file, final String name) { 1324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira for (Iterator<IOFileFilter> iter = this.fileFilters.iterator(); iter.hasNext();) { 1334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira IOFileFilter fileFilter = iter.next(); 1344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (fileFilter.accept(file, name)) { 1354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return true; 1364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return false; 1394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira /** 1424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * Provide a String representaion of this file filter. 1434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * 1444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * @return a String representaion 1454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */ 1464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira @Override 1474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira public String toString() { 1484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira StringBuffer buffer = new StringBuffer(); 1494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira buffer.append(super.toString()); 1504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira buffer.append("("); 1514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (fileFilters != null) { 1524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira for (int i = 0; i < fileFilters.size(); i++) { 1534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira if (i > 0) { 1544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira buffer.append(","); 1554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira Object filter = fileFilters.get(i); 1574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira buffer.append(filter == null ? "null" : filter.toString()); 1584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira buffer.append(")"); 1614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira return buffer.toString(); 1624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira } 1634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira 1644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira} 165