ContentSummary.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
源码类别:

网格计算

开发平台:

Java

  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.fs;
  19. import java.io.DataInput;
  20. import java.io.DataOutput;
  21. import java.io.IOException;
  22. import org.apache.hadoop.io.Writable;
  23. /** Store the summary of a content (a directory or a file). */
  24. public class ContentSummary implements Writable{
  25.   private long length;
  26.   private long fileCount;
  27.   private long directoryCount;
  28.   private long quota;
  29.   private long spaceConsumed;
  30.   private long spaceQuota;
  31.   
  32.   /** Constructor */
  33.   public ContentSummary() {}
  34.   
  35.   /** Constructor */
  36.   public ContentSummary(long length, long fileCount, long directoryCount) {
  37.     this(length, fileCount, directoryCount, -1L, length, -1L);
  38.   }
  39.   /** Constructor */
  40.   public ContentSummary(
  41.       long length, long fileCount, long directoryCount, long quota,
  42.       long spaceConsumed, long spaceQuota) {
  43.     this.length = length;
  44.     this.fileCount = fileCount;
  45.     this.directoryCount = directoryCount;
  46.     this.quota = quota;
  47.     this.spaceConsumed = spaceConsumed;
  48.     this.spaceQuota = spaceQuota;
  49.   }
  50.   /** @return the length */
  51.   public long getLength() {return length;}
  52.   /** @return the directory count */
  53.   public long getDirectoryCount() {return directoryCount;}
  54.   /** @return the file count */
  55.   public long getFileCount() {return fileCount;}
  56.   
  57.   /** Return the directory quota */
  58.   public long getQuota() {return quota;}
  59.   
  60.   /** Retuns (disk) space consumed */ 
  61.   public long getSpaceConsumed() {return spaceConsumed;}
  62.   /** Returns (disk) space quota */
  63.   public long getSpaceQuota() {return spaceQuota;}
  64.   
  65.   /** {@inheritDoc} */
  66.   public void write(DataOutput out) throws IOException {
  67.     out.writeLong(length);
  68.     out.writeLong(fileCount);
  69.     out.writeLong(directoryCount);
  70.     out.writeLong(quota);
  71.     out.writeLong(spaceConsumed);
  72.     out.writeLong(spaceQuota);
  73.   }
  74.   /** {@inheritDoc} */
  75.   public void readFields(DataInput in) throws IOException {
  76.     this.length = in.readLong();
  77.     this.fileCount = in.readLong();
  78.     this.directoryCount = in.readLong();
  79.     this.quota = in.readLong();
  80.     this.spaceConsumed = in.readLong();
  81.     this.spaceQuota = in.readLong();
  82.   }
  83.   
  84.   /** 
  85.    * Output format:
  86.    * <----12----> <----12----> <-------18------->
  87.    *    DIR_COUNT   FILE_COUNT       CONTENT_SIZE FILE_NAME    
  88.    */
  89.   private static final String STRING_FORMAT = "%12d %12d %18d ";
  90.   /** 
  91.    * Output format:
  92.    * <----12----> <----15----> <----15----> <----15----> <----12----> <----12----> <-------18------->
  93.    *    QUOTA   REMAINING_QUATA SPACE_QUOTA SPACE_QUOTA_REM DIR_COUNT   FILE_COUNT   CONTENT_SIZE     FILE_NAME    
  94.    */
  95.   private static final String QUOTA_STRING_FORMAT = "%12s %15s ";
  96.   private static final String SPACE_QUOTA_STRING_FORMAT = "%15s %15s ";
  97.   
  98.   /** The header string */
  99.   private static final String HEADER = String.format(
  100.       STRING_FORMAT.replace('d', 's'), "directories", "files", "bytes");
  101.   private static final String QUOTA_HEADER = String.format(
  102.       QUOTA_STRING_FORMAT + SPACE_QUOTA_STRING_FORMAT, 
  103.       "quota", "remaining quota", "space quota", "reamaining quota") +
  104.       HEADER;
  105.   
  106.   /** Return the header of the output.
  107.    * if qOption is false, output directory count, file count, and content size;
  108.    * if qOption is true, output quota and remaining quota as well.
  109.    * 
  110.    * @param qOption a flag indicating if quota needs to be printed or not
  111.    * @return the header of the output
  112.    */
  113.   public static String getHeader(boolean qOption) {
  114.     return qOption ? QUOTA_HEADER : HEADER;
  115.   }
  116.   
  117.   /** {@inheritDoc} */
  118.   public String toString() {
  119.     return toString(true);
  120.   }
  121.   /** Return the string representation of the object in the output format.
  122.    * if qOption is false, output directory count, file count, and content size;
  123.    * if qOption is true, output quota and remaining quota as well.
  124.    * 
  125.    * @param qOption a flag indicating if quota needs to be printed or not
  126.    * @return the string representation of the object
  127.    */
  128.   public String toString(boolean qOption) {
  129.     String prefix = "";
  130.     if (qOption) {
  131.       String quotaStr = "none";
  132.       String quotaRem = "inf";
  133.       String spaceQuotaStr = "none";
  134.       String spaceQuotaRem = "inf";
  135.       
  136.       if (quota>0) {
  137.         quotaStr = Long.toString(quota);
  138.         quotaRem = Long.toString(quota-(directoryCount+fileCount));
  139.       }
  140.       if (spaceQuota>0) {
  141.         spaceQuotaStr = Long.toString(spaceQuota);
  142.         spaceQuotaRem = Long.toString(spaceQuota - spaceConsumed);        
  143.       }
  144.       
  145.       prefix = String.format(QUOTA_STRING_FORMAT + SPACE_QUOTA_STRING_FORMAT, 
  146.                              quotaStr, quotaRem, spaceQuotaStr, spaceQuotaRem);
  147.     }
  148.     
  149.     return prefix + String.format(STRING_FORMAT, directoryCount, 
  150.                                   fileCount, length);
  151.   }
  152. }