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}