| package org.apache.hadoop.fs.http.server; |
| |
| import org.apache.hadoop.fs.http.client.HttpFSFileSystem; |
| import org.apache.hadoop.lib.wsrs.BooleanParam; |
| import org.apache.hadoop.lib.wsrs.EnumParam; |
| import org.apache.hadoop.lib.wsrs.LongParam; |
| import org.apache.hadoop.lib.wsrs.ShortParam; |
| import org.apache.hadoop.lib.wsrs.StringParam; |
| import org.apache.hadoop.lib.wsrs.UserProvider; |
| import org.slf4j.MDC; |
| |
| import java.util.regex.Pattern; |
| |
| /** |
| * HttpFS HTTP Parameters used by {@link HttpFSServer}. |
| */ |
| public class HttpFSParams { |
| |
| /** |
| * To avoid instantiation. |
| */ |
| private HttpFSParams() { |
| } |
| |
| /** |
| * Class for access-time parameter. |
| */ |
| public static class AccessTimeParam extends LongParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.ACCESS_TIME_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = "-1"; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public AccessTimeParam(String str) { |
| super(NAME, str); |
| } |
| } |
| |
| /** |
| * Class for block-size parameter. |
| */ |
| public static class BlockSizeParam extends LongParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.BLOCKSIZE_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = "-1"; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public BlockSizeParam(String str) { |
| super(NAME, str); |
| } |
| } |
| |
| /** |
| * Class for data parameter. |
| */ |
| public static class DataParam extends BooleanParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = "data"; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = "false"; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public DataParam(String str) { |
| super(NAME, str); |
| } |
| } |
| |
| /** |
| * Class for DELETE operation parameter. |
| */ |
| public static class DeleteOpParam extends EnumParam<HttpFSFileSystem.DeleteOpValues> { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.OP_PARAM; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public DeleteOpParam(String str) { |
| super(NAME, str, HttpFSFileSystem.DeleteOpValues.class); |
| } |
| } |
| |
| /** |
| * Class for delete's recursive parameter. |
| */ |
| public static class DeleteRecursiveParam extends BooleanParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.RECURSIVE_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = "false"; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public DeleteRecursiveParam(String str) { |
| super(NAME, str); |
| } |
| } |
| |
| /** |
| * Class for do-as parameter. |
| */ |
| public static class DoAsParam extends StringParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.DO_AS_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = ""; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public DoAsParam(String str) { |
| super(NAME, str, UserProvider.USER_PATTERN); |
| } |
| |
| /** |
| * Delegates to parent and then adds do-as user to |
| * MDC context for logging purposes. |
| * |
| * @param name parameter name. |
| * @param str parameter value. |
| * |
| * @return parsed parameter |
| */ |
| @Override |
| public String parseParam(String name, String str) { |
| String doAs = super.parseParam(name, str); |
| MDC.put(NAME, (doAs != null) ? doAs : "-"); |
| return doAs; |
| } |
| } |
| |
| /** |
| * Class for filter parameter. |
| */ |
| public static class FilterParam extends StringParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = "filter"; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = ""; |
| |
| /** |
| * Constructor. |
| * |
| * @param expr parameter value. |
| */ |
| public FilterParam(String expr) { |
| super(NAME, expr); |
| } |
| |
| } |
| |
| /** |
| * Class for path parameter. |
| */ |
| public static class FsPathParam extends StringParam { |
| |
| /** |
| * Constructor. |
| * |
| * @param path parameter value. |
| */ |
| public FsPathParam(String path) { |
| super("path", path); |
| } |
| |
| /** |
| * Makes the path absolute adding '/' to it. |
| * <p/> |
| * This is required because JAX-RS resolution of paths does not add |
| * the root '/'. |
| */ |
| public void makeAbsolute() { |
| String path = value(); |
| path = "/" + ((path != null) ? path : ""); |
| setValue(path); |
| } |
| |
| } |
| |
| /** |
| * Class for GET operation parameter. |
| */ |
| public static class GetOpParam extends EnumParam<HttpFSFileSystem.GetOpValues> { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.OP_PARAM; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public GetOpParam(String str) { |
| super(NAME, str, HttpFSFileSystem.GetOpValues.class); |
| } |
| } |
| |
| /** |
| * Class for group parameter. |
| */ |
| public static class GroupParam extends StringParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.GROUP_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = ""; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public GroupParam(String str) { |
| super(NAME, str, UserProvider.USER_PATTERN); |
| } |
| |
| } |
| |
| /** |
| * Class for len parameter. |
| */ |
| public static class LenParam extends LongParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = "len"; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = "-1"; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public LenParam(String str) { |
| super(NAME, str); |
| } |
| } |
| |
| /** |
| * Class for modified-time parameter. |
| */ |
| public static class ModifiedTimeParam extends LongParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.MODIFICATION_TIME_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = "-1"; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public ModifiedTimeParam(String str) { |
| super(NAME, str); |
| } |
| } |
| |
| /** |
| * Class for offset parameter. |
| */ |
| public static class OffsetParam extends LongParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = "offset"; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = "0"; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public OffsetParam(String str) { |
| super(NAME, str); |
| } |
| } |
| |
| /** |
| * Class for overwrite parameter. |
| */ |
| public static class OverwriteParam extends BooleanParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.OVERWRITE_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = "true"; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public OverwriteParam(String str) { |
| super(NAME, str); |
| } |
| } |
| |
| /** |
| * Class for owner parameter. |
| */ |
| public static class OwnerParam extends StringParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.OWNER_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = ""; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public OwnerParam(String str) { |
| super(NAME, str, UserProvider.USER_PATTERN); |
| } |
| |
| } |
| |
| /** |
| * Class for permission parameter. |
| */ |
| public static class PermissionParam extends StringParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.PERMISSION_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = HttpFSFileSystem.DEFAULT_PERMISSION; |
| |
| |
| /** |
| * Symbolic Unix permissions regular expression pattern. |
| */ |
| private static final Pattern PERMISSION_PATTERN = |
| Pattern.compile(DEFAULT + "|(-[-r][-w][-x][-r][-w][-x][-r][-w][-x])" + "|[0-7][0-7][0-7]"); |
| |
| /** |
| * Constructor. |
| * |
| * @param permission parameter value. |
| */ |
| public PermissionParam(String permission) { |
| super(NAME, permission.toLowerCase(), PERMISSION_PATTERN); |
| } |
| |
| } |
| |
| /** |
| * Class for POST operation parameter. |
| */ |
| public static class PostOpParam extends EnumParam<HttpFSFileSystem.PostOpValues> { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.OP_PARAM; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public PostOpParam(String str) { |
| super(NAME, str, HttpFSFileSystem.PostOpValues.class); |
| } |
| } |
| |
| /** |
| * Class for PUT operation parameter. |
| */ |
| public static class PutOpParam extends EnumParam<HttpFSFileSystem.PutOpValues> { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.OP_PARAM; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public PutOpParam(String str) { |
| super(NAME, str, HttpFSFileSystem.PutOpValues.class); |
| } |
| } |
| |
| /** |
| * Class for replication parameter. |
| */ |
| public static class ReplicationParam extends ShortParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.REPLICATION_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = "-1"; |
| |
| /** |
| * Constructor. |
| * |
| * @param str parameter value. |
| */ |
| public ReplicationParam(String str) { |
| super(NAME, str); |
| } |
| } |
| |
| /** |
| * Class for to-path parameter. |
| */ |
| public static class ToPathParam extends StringParam { |
| |
| /** |
| * Parameter name. |
| */ |
| public static final String NAME = HttpFSFileSystem.DESTINATION_PARAM; |
| |
| /** |
| * Default parameter value. |
| */ |
| public static final String DEFAULT = ""; |
| |
| /** |
| * Constructor. |
| * |
| * @param path parameter value. |
| */ |
| public ToPathParam(String path) { |
| super(NAME, path); |
| } |
| } |
| } |