/* * 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.client.file.options; import alluxio.Configuration; import alluxio.Constants; import alluxio.PropertyKey; import alluxio.annotation.PublicApi; import alluxio.client.WriteType; import alluxio.security.authorization.Mode; import alluxio.thrift.CreateDirectoryTOptions; import alluxio.wire.ThriftUtils; import alluxio.wire.TtlAction; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.google.common.base.Objects; import javax.annotation.concurrent.NotThreadSafe; /** * Method options for creating a directory. */ @PublicApi @NotThreadSafe @JsonInclude(Include.NON_EMPTY) public final class CreateDirectoryOptions { private boolean mAllowExists; private Mode mMode; private long mTtl; private TtlAction mTtlAction; private boolean mRecursive; private WriteType mWriteType; /** * @return the default {@link CreateDirectoryOptions} */ public static CreateDirectoryOptions defaults() { return new CreateDirectoryOptions(); } private CreateDirectoryOptions() { mRecursive = false; mAllowExists = false; mMode = Mode.defaults().applyDirectoryUMask(); mTtl = Constants.NO_TTL; mTtlAction = TtlAction.DELETE; mWriteType = Configuration.getEnum(PropertyKey.USER_FILE_WRITE_TYPE_DEFAULT, WriteType.class); } /** * @return the mode of the directory to create */ public Mode getMode() { return mMode; } /** * @return the write type */ public WriteType getWriteType() { return mWriteType; } /** * @return the allowExists flag value; it specifies whether an exception should be thrown if the * directory being made already exists */ public boolean isAllowExists() { return mAllowExists; } /** * @return the TTL (time to live) value; it identifies duration (in milliseconds) * the created directory should be kept around before it is automatically deleted */ public long getTtl() { return mTtl; } /** * @return the {@link TtlAction} */ public TtlAction getTtlAction() { return mTtlAction; } /** * @return the recursive flag value; it specifies whether parent directories should be created if * they do not already exist */ public boolean isRecursive() { return mRecursive; } /** * @param allowExists the allowExists flag value to use; it specifies whether an exception * should be thrown if the directory being made already exists. * @return the updated options object */ public CreateDirectoryOptions setAllowExists(boolean allowExists) { mAllowExists = allowExists; return this; } /** * @param mode the mode to be set * @return the updated options object */ public CreateDirectoryOptions setMode(Mode mode) { mMode = mode; return this; } /** * @param recursive the recursive flag value to use; it specifies whether parent directories * should be created if they do not already exist * @return the updated options object */ public CreateDirectoryOptions setRecursive(boolean recursive) { mRecursive = recursive; return this; } /** * @param ttl the TTL (time to live) value to use; it identifies duration (in milliseconds) the * created directory should be kept around before it is automatically deleted, * no matter whether the file is pinned * @return the updated options object */ public CreateDirectoryOptions setTtl(long ttl) { mTtl = ttl; return this; } /** * @param ttlAction the {@link TtlAction} to use * @return the updated options object */ public CreateDirectoryOptions setTtlAction(TtlAction ttlAction) { mTtlAction = ttlAction; return this; } /** * @param writeType the write type to use * @return the updated options object */ public CreateDirectoryOptions setWriteType(WriteType writeType) { mWriteType = writeType; return this; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof CreateDirectoryOptions)) { return false; } CreateDirectoryOptions that = (CreateDirectoryOptions) o; return Objects.equal(mAllowExists, that.mAllowExists) && Objects.equal(mMode, that.mMode) && Objects.equal(mRecursive, that.mRecursive) && Objects.equal(mTtl, that.mTtl) && Objects.equal(mTtlAction, that.mTtlAction) && Objects.equal(mWriteType, that.mWriteType); } @Override public int hashCode() { return Objects.hashCode(mAllowExists, mMode, mRecursive, mTtl, mTtlAction, mWriteType); } @Override public String toString() { return Objects.toStringHelper(this) .add("allowExists", mAllowExists) .add("mode", mMode) .add("recursive", mRecursive) .add("ttl", mTtl) .add("ttlAction", mTtlAction) .add("writeType", mWriteType) .toString(); } /** * @return Thrift representation of the options */ public CreateDirectoryTOptions toThrift() { CreateDirectoryTOptions options = new CreateDirectoryTOptions(); options.setAllowExists(mAllowExists); options.setRecursive(mRecursive); options.setTtl(mTtl); options.setTtlAction(ThriftUtils.toThrift(mTtlAction)); options.setPersisted(mWriteType.isThrough()); if (mMode != null) { options.setMode(mMode.toShort()); } return options; } }