View Javadoc

1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  package org.apache.hadoop.hbase.util;
19  
20  import java.io.IOException;
21  
22  import org.apache.hadoop.classification.InterfaceAudience;
23  import org.apache.hadoop.classification.InterfaceStability;
24  import org.apache.hadoop.fs.FileStatus;
25  import org.apache.hadoop.fs.FileSystem;
26  import org.apache.hadoop.fs.Path;
27  import org.apache.hadoop.fs.PathFilter;
28  
29  import edu.umd.cs.findbugs.annotations.CheckForNull;
30  
31  /**
32   * Typical base class for file status filter.  Works more efficiently when
33   * filtering file statuses, otherwise implementation will need to lookup filestatus
34   * for the path which will be expensive.
35   */
36  @InterfaceAudience.Private
37  @InterfaceStability.Evolving
38  public abstract class AbstractFileStatusFilter implements PathFilter, FileStatusFilter {
39  
40    /**
41     * Filters out a path.  Can be given an optional directory hint to avoid
42     * filestatus lookup.
43     *
44     * @param p       A filesystem path
45     * @param isDir   An optional boolean indicating whether the path is a directory or not
46     * @return        true if the path is accepted, false if the path is filtered out
47     */
48    protected abstract boolean accept(Path p, @CheckForNull Boolean isDir);
49  
50    @Override
51    public boolean accept(FileStatus f) {
52      return accept(f.getPath(), f.isDirectory());
53    }
54  
55    @Override
56    public boolean accept(Path p) {
57      return accept(p, null);
58    }
59  
60    protected boolean isFile(FileSystem fs, @CheckForNull Boolean isDir, Path p) throws IOException {
61      return !isDirectory(fs, isDir, p);
62    }
63  
64    protected boolean isDirectory(FileSystem fs, @CheckForNull Boolean isDir, Path p) throws IOException {
65      return isDir != null ? isDir : fs.isDirectory(p);
66    }
67  }