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 }