/*
 * The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
 * (the "License"). You may not use this work except in compliance with the License, which is
 * available at www.apache.org/licenses/LICENSE-2.0
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied, as more fully set forth in the License.
 *
 * See the NOTICE file distributed with this work for information regarding copyright ownership.
 */

package alluxio.master.file.options;

import alluxio.thrift.DeleteTOptions;

import com.google.common.base.Objects;

import javax.annotation.concurrent.NotThreadSafe;

/**
 * Method options for deleting a file or a directory.
 */
@NotThreadSafe
public final class DeleteFileOptions {
  private boolean mRecursive;
  private boolean mAlluxioOnly;

  /**
   * @return the default {@link DeleteFileOptions}
   */
  public static DeleteFileOptions defaults() {
    return new DeleteFileOptions();
  }

  /**
   * @param options the {@link DeleteTOptions} to use
   */
  public DeleteFileOptions(DeleteTOptions options) {
    mRecursive = options.isRecursive();
    mAlluxioOnly = options.isAlluxioOnly();
  }

  private DeleteFileOptions() {
    mRecursive = false;
    mAlluxioOnly = false;
  }

  /**
   * @return the recursive flag value; if the object to be deleted is a directory, the flag
   *         specifies whether the directory content should be recursively deleted as well
   */
  public boolean isRecursive() {
    return mRecursive;
  }

  /**
   * @return the alluxioOnly flag value; the flag specifies whether the file content should
   *         be removed from Alluxio, but not from UFS.
   */
  public boolean isAlluxioOnly() {
    return mAlluxioOnly;
  }

  /**
   * @param recursive the recursive flag value to use; if the object to be deleted is a directory,
   *        the flag specifies whether the directory content should be recursively deleted as well
   * @return the updated options object
   */
  public DeleteFileOptions setRecursive(boolean recursive) {
    mRecursive = recursive;
    return this;
  }

  /**
   * @param removeUFSFile the removeUFSFile flag value to use; the flag specifies whether the file
   *        content should be removed from Alluxio, but not from UFS.
   * @return the updated options object
   */
  public DeleteFileOptions setAlluxioOnly(boolean removeUFSFile) {
    mAlluxioOnly = removeUFSFile;
    return this;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (!(o instanceof DeleteFileOptions)) {
      return false;
    }
    DeleteFileOptions that = (DeleteFileOptions) o;
    return Objects.equal(mRecursive, that.mRecursive)
        && Objects.equal(mAlluxioOnly, that.mAlluxioOnly);
  }

  @Override
  public int hashCode() {
    return Objects.hashCode(mRecursive, mAlluxioOnly);
  }

  @Override
  public String toString() {
    return Objects.toStringHelper(this)
         .add("recursive", mRecursive)
         .add("alluxioOnly", mAlluxioOnly)
         .toString();
  }
}

@@ -773,28 +773,24 @@
 class Delete
-File
 Options %7B%0A  
@@ -890,28 +890,24 @@
 @link Delete
-File
 Options%7D%0A   
@@ -923,36 +923,32 @@
 ic static Delete
-File
 Options defaults
@@ -969,28 +969,24 @@
 n new Delete
-File
 Options();%0A 
@@ -1066,28 +1066,24 @@
 ublic Delete
-File
 Options(Dele
@@ -1205,28 +1205,24 @@
 ivate Delete
-File
 Options() %7B%0A
@@ -1555,35 +1555,27 @@
 urn 
-the alluxioOnly flag
+return the
  value
-;
+ of
  the
@@ -1572,39 +1572,44 @@
 lue of the flag 
-specifi
+that indicat
 es whether the f
@@ -1612,30 +1612,25 @@
 he file 
-content 
 should
+ be
 %0A   *   
@@ -1639,50 +1639,50 @@
     
-be removed from Alluxio, but not from UFS.
+deleted in Alluxio only, or in UFS as well
 %0A   
@@ -2006,36 +2006,32 @@
 %0A  public Delete
-File
 Options setRecur
@@ -2128,44 +2128,23 @@
 ram 
-removeUFSFile the removeUFSFile flag
+alluxioOnly the
  val
@@ -2152,17 +2152,20 @@
 e to use
-;
+ for
  the fla
@@ -2158,39 +2158,44 @@
 se for the flag 
-specifi
+that indicat
 es whether the f
@@ -2197,16 +2197,26 @@
 the file
+ should be
 %0A   *   
@@ -2224,65 +2224,50 @@
     
-content should be removed from Alluxio, but not from UFS.
+deleted in Alluxio only, or in UFS as well
 %0A   
@@ -2320,28 +2320,24 @@
 ublic Delete
-File
 Options setA
@@ -2355,29 +2355,27 @@
 boolean 
-removeUFSFile
+alluxioOnly
 ) %7B%0A    
@@ -2393,21 +2393,19 @@
 y = 
-removeUFSFile
+alluxioOnly
 ;%0A  
@@ -2543,28 +2543,24 @@
 nceof Delete
-File
 Options)) %7B%0A
@@ -2591,28 +2591,24 @@
 %7D%0A    Delete
-File
 Options that
@@ -2621,12 +2621,8 @@
 lete
-File
 Opti

Rename DeleteFileOptions to DeleteOptions