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 }