001/** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019package org.apache.hadoop.fs; 020 021import java.io.IOException; 022 023import org.apache.hadoop.classification.InterfaceAudience; 024import org.apache.hadoop.classification.InterfaceStability; 025import org.apache.hadoop.fs.permission.FsPermission; 026 027/** 028 * This class defines a FileStatus that includes a file's block locations. 029 */ 030@InterfaceAudience.Public 031@InterfaceStability.Evolving 032public class LocatedFileStatus extends FileStatus { 033 private BlockLocation[] locations; 034 035 /** 036 * Constructor 037 * @param stat a file status 038 * @param locations a file's block locations 039 */ 040 public LocatedFileStatus(FileStatus stat, BlockLocation[] locations) 041 throws IOException { 042 this(stat.getLen(), stat.isDirectory(), stat.getReplication(), 043 stat.getBlockSize(), stat.getModificationTime(), 044 stat.getAccessTime(), stat.getPermission(), stat.getOwner(), 045 stat.getGroup(), null, stat.getPath(), locations); 046 if (isSymlink()) { 047 setSymlink(stat.getSymlink()); 048 } 049 } 050 051 /** 052 * Constructor 053 * 054 * @param length a file's length 055 * @param isdir if the path is a directory 056 * @param block_replication the file's replication factor 057 * @param blocksize a file's block size 058 * @param modification_time a file's modification time 059 * @param access_time a file's access time 060 * @param permission a file's permission 061 * @param owner a file's owner 062 * @param group a file's group 063 * @param symlink symlink if the path is a symbolic link 064 * @param path the path's qualified name 065 * @param locations a file's block locations 066 */ 067 public LocatedFileStatus(long length, boolean isdir, 068 int block_replication, 069 long blocksize, long modification_time, long access_time, 070 FsPermission permission, String owner, String group, 071 Path symlink, 072 Path path, 073 BlockLocation[] locations) { 074 super(length, isdir, block_replication, blocksize, modification_time, 075 access_time, permission, owner, group, symlink, path); 076 this.locations = locations; 077 } 078 079 /** 080 * Get the file's block locations 081 * @return the file's block locations 082 */ 083 public BlockLocation[] getBlockLocations() { 084 return locations; 085 } 086 087 /** 088 * Compare this object to another object 089 * 090 * @param o the object to be compared. 091 * @return a negative integer, zero, or a positive integer as this object 092 * is less than, equal to, or greater than the specified object. 093 * 094 * @throws ClassCastException if the specified object's is not of 095 * type FileStatus 096 */ 097 @Override 098 public int compareTo(Object o) { 099 return super.compareTo(o); 100 } 101 102 /** Compare if this object is equal to another object 103 * @param o the object to be compared. 104 * @return true if two file status has the same path name; false if not. 105 */ 106 @Override 107 public boolean equals(Object o) { 108 return super.equals(o); 109 } 110 111 /** 112 * Returns a hash code value for the object, which is defined as 113 * the hash code of the path name. 114 * 115 * @return a hash code value for the path name. 116 */ 117 @Override 118 public int hashCode() { 119 return super.hashCode(); 120 } 121}