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 public LocatedFileStatus() { 037 super(); 038 } 039 040 /** 041 * Constructor 042 * @param stat a file status 043 * @param locations a file's block locations 044 */ 045 public LocatedFileStatus(FileStatus stat, BlockLocation[] locations) 046 throws IOException { 047 this(stat.getLen(), stat.isDirectory(), stat.getReplication(), 048 stat.getBlockSize(), stat.getModificationTime(), 049 stat.getAccessTime(), stat.getPermission(), stat.getOwner(), 050 stat.getGroup(), null, stat.getPath(), locations); 051 if (stat.isSymlink()) { 052 setSymlink(stat.getSymlink()); 053 } 054 } 055 056 /** 057 * Constructor 058 * 059 * @param length a file's length 060 * @param isdir if the path is a directory 061 * @param block_replication the file's replication factor 062 * @param blocksize a file's block size 063 * @param modification_time a file's modification time 064 * @param access_time a file's access time 065 * @param permission a file's permission 066 * @param owner a file's owner 067 * @param group a file's group 068 * @param symlink symlink if the path is a symbolic link 069 * @param path the path's qualified name 070 * @param locations a file's block locations 071 */ 072 public LocatedFileStatus(long length, boolean isdir, 073 int block_replication, 074 long blocksize, long modification_time, long access_time, 075 FsPermission permission, String owner, String group, 076 Path symlink, 077 Path path, 078 BlockLocation[] locations) { 079 super(length, isdir, block_replication, blocksize, modification_time, 080 access_time, permission, owner, group, symlink, path); 081 this.locations = locations; 082 } 083 084 /** 085 * Get the file's block locations 086 * @return the file's block locations 087 */ 088 public BlockLocation[] getBlockLocations() { 089 return locations; 090 } 091 092 /** 093 * Compare this object to another object 094 * 095 * @param o the object to be compared. 096 * @return a negative integer, zero, or a positive integer as this object 097 * is less than, equal to, or greater than the specified object. 098 * 099 * @throws ClassCastException if the specified object's is not of 100 * type FileStatus 101 */ 102 @Override 103 public int compareTo(Object o) { 104 return super.compareTo(o); 105 } 106 107 /** Compare if this object is equal to another object 108 * @param o the object to be compared. 109 * @return true if two file status has the same path name; false if not. 110 */ 111 @Override 112 public boolean equals(Object o) { 113 return super.equals(o); 114 } 115 116 /** 117 * Returns a hash code value for the object, which is defined as 118 * the hash code of the path name. 119 * 120 * @return a hash code value for the path name. 121 */ 122 @Override 123 public int hashCode() { 124 return super.hashCode(); 125 } 126}