View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.vfs2;
18  
19  import org.apache.commons.vfs2.util.Messages;
20  
21  /**
22   * A {@link org.apache.commons.vfs2.FileSelector} that selects all children of the given fileObject.
23   * <p>
24   * This is to mimic the {@link java.io.FileFilter} interface.
25   * </p>
26   */
27  public class FileFilterSelector extends FileDepthSelector {
28  
29      /**
30       * The FileFilter.
31       */
32      private final FileFilter fileFilter;
33  
34      public FileFilterSelector() {
35          this(null);
36      }
37  
38      public FileFilterSelector(final FileFilter fileFilter) {
39          super(1, 1);
40          this.fileFilter = fileFilter;
41      }
42  
43      /**
44       * Determines if a file or folder should be selected.
45       *
46       * @param fileInfo The file selection information.
47       * @return true if the file or folder should be included, false otherwise.
48       */
49      @Override
50      public boolean includeFile(final FileSelectInfo fileInfo) throws Exception {
51          if (!super.includeFile(fileInfo)) {
52              return false;
53          }
54  
55          return accept(fileInfo);
56      }
57  
58      /**
59       * Determines whether the file should be selected.
60       *
61       * @param fileInfo The file selection information.
62       * @return true if the file should be selected, false otherwise.
63       * @throws Exception Thrown for file system errors or illegal argument exception.
64       */
65      public boolean accept(final FileSelectInfo fileInfo) throws Exception {
66          if (fileFilter != null) {
67              return fileFilter.accept(fileInfo);
68          }
69  
70          throw new IllegalArgumentException(Messages.getString("vfs.selectors/filefilter.missing.error"));
71      }
72  }