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

网格计算

开发平台:

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.permission;
  19. import org.apache.hadoop.conf.Configuration;
  20. import org.apache.hadoop.io.*;
  21. import java.io.DataInput;
  22. import java.io.DataOutput;
  23. import java.io.IOException;
  24. /**
  25.  * A class for file/directory permissions.
  26.  */
  27. public class FsPermission implements Writable {
  28.   static final WritableFactory FACTORY = new WritableFactory() {
  29.     public Writable newInstance() { return new FsPermission(); }
  30.   };
  31.   static {                                      // register a ctor
  32.     WritableFactories.setFactory(FsPermission.class, FACTORY);
  33.   }
  34.   /** Create an immutable {@link FsPermission} object. */
  35.   public static FsPermission createImmutable(short permission) {
  36.     return new FsPermission(permission) {
  37.       public FsPermission applyUMask(FsPermission umask) {
  38.         throw new UnsupportedOperationException();
  39.       }
  40.       public void readFields(DataInput in) throws IOException {
  41.         throw new UnsupportedOperationException();
  42.       }
  43.     };
  44.   }
  45.   //POSIX permission style
  46.   private FsAction useraction = null;
  47.   private FsAction groupaction = null;
  48.   private FsAction otheraction = null;
  49.   private FsPermission() {}
  50.   /**
  51.    * Construct by the given {@link FsAction}.
  52.    * @param u user action
  53.    * @param g group action
  54.    * @param o other action
  55.    */
  56.   public FsPermission(FsAction u, FsAction g, FsAction o) {set(u, g, o);}
  57.   /**
  58.    * Construct by the given mode.
  59.    * @param mode
  60.    * @see #toShort()
  61.    */
  62.   public FsPermission(short mode) { fromShort(mode); }
  63.   /**
  64.    * Copy constructor
  65.    * 
  66.    * @param other other permission
  67.    */
  68.   public FsPermission(FsPermission other) {
  69.     this.useraction = other.useraction;
  70.     this.groupaction = other.groupaction;
  71.     this.otheraction = other.otheraction;
  72.   }
  73.   
  74.   /** Return user {@link FsAction}. */
  75.   public FsAction getUserAction() {return useraction;}
  76.   /** Return group {@link FsAction}. */
  77.   public FsAction getGroupAction() {return groupaction;}
  78.   /** Return other {@link FsAction}. */
  79.   public FsAction getOtherAction() {return otheraction;}
  80.   private void set(FsAction u, FsAction g, FsAction o) {
  81.     useraction = u;
  82.     groupaction = g;
  83.     otheraction = o;
  84.   }
  85.   public void fromShort(short n) {
  86.     FsAction[] v = FsAction.values();
  87.     set(v[(n >>> 6) & 7], v[(n >>> 3) & 7], v[n & 7]);
  88.   }
  89.   /** {@inheritDoc} */
  90.   public void write(DataOutput out) throws IOException {
  91.     out.writeShort(toShort());
  92.   }
  93.   /** {@inheritDoc} */
  94.   public void readFields(DataInput in) throws IOException {
  95.     fromShort(in.readShort());
  96.   }
  97.   /**
  98.    * Create and initialize a {@link FsPermission} from {@link DataInput}.
  99.    */
  100.   public static FsPermission read(DataInput in) throws IOException {
  101.     FsPermission p = new FsPermission();
  102.     p.readFields(in);
  103.     return p;
  104.   }
  105.   /**
  106.    * Encode the object to a short.
  107.    */
  108.   public short toShort() {
  109.     int s = (useraction.ordinal() << 6) | (groupaction.ordinal() << 3) |
  110.              otheraction.ordinal();
  111.     return (short)s;
  112.   }
  113.   /** {@inheritDoc} */
  114.   public boolean equals(Object obj) {
  115.     if (obj instanceof FsPermission) {
  116.       FsPermission that = (FsPermission)obj;
  117.       return this.useraction == that.useraction
  118.           && this.groupaction == that.groupaction
  119.           && this.otheraction == that.otheraction;
  120.     }
  121.     return false;
  122.   }
  123.   /** {@inheritDoc} */
  124.   public int hashCode() {return toShort();}
  125.   /** {@inheritDoc} */
  126.   public String toString() {
  127.     return useraction.SYMBOL + groupaction.SYMBOL + otheraction.SYMBOL;
  128.   }
  129.   /** Apply a umask to this permission and return a new one */
  130.   public FsPermission applyUMask(FsPermission umask) {
  131.     return new FsPermission(useraction.and(umask.useraction.not()),
  132.         groupaction.and(umask.groupaction.not()),
  133.         otheraction.and(umask.otheraction.not()));
  134.   }
  135.   /** umask property label */
  136.   public static final String UMASK_LABEL = "dfs.umask";
  137.   public static final int DEFAULT_UMASK = 0022;
  138.   /** Get the user file creation mask (umask) */
  139.   public static FsPermission getUMask(Configuration conf) {
  140.     int umask = DEFAULT_UMASK;
  141.     if (conf != null) {
  142.       umask = conf.getInt(UMASK_LABEL, DEFAULT_UMASK);
  143.     }
  144.     return new FsPermission((short)umask);
  145.   }
  146.   /** Set the user file creation mask (umask) */
  147.   public static void setUMask(Configuration conf, FsPermission umask) {
  148.     conf.setInt(UMASK_LABEL, umask.toShort());
  149.   }
  150.   /** Get the default permission. */
  151.   public static FsPermission getDefault() {
  152.     return new FsPermission((short)0777);
  153.   }
  154.   /**
  155.    * Create a FsPermission from a Unix symbolic permission string
  156.    * @param unixSymbolicPermission e.g. "-rw-rw-rw-"
  157.    */
  158.   public static FsPermission valueOf(String unixSymbolicPermission) {
  159.     if (unixSymbolicPermission == null) {
  160.       return null;
  161.     }
  162.     else if (unixSymbolicPermission.length() != 10) {
  163.       throw new IllegalArgumentException("length != 10(unixSymbolicPermission="
  164.           + unixSymbolicPermission + ")");
  165.     }
  166.     int n = 0;
  167.     for(int i = 1; i < unixSymbolicPermission.length(); i++) {
  168.       n = n << 1;
  169.       char c = unixSymbolicPermission.charAt(i);
  170.       n += (c == '-' || c == 'T' || c == 'S') ? 0: 1;
  171.     }
  172.     return new FsPermission((short)n);
  173.   }
  174. }