HDFS-8089. Move o.a.h.hdfs.web.resources.* to the client jars. Contributed by Haohui Mai.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/cc258235 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/cc258235 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/cc258235 Branch: refs/heads/trunk Commit: cc25823546643caf22bab63ec85fe0c8939593d8 Parents: 5a540c3 Author: Haohui Mai <whe...@apache.org> Authored: Wed Apr 8 16:30:08 2015 -0700 Committer: Haohui Mai <whe...@apache.org> Committed: Wed Apr 8 16:30:08 2015 -0700 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs-client/pom.xml | 9 ++ .../hdfs/client/HdfsClientConfigKeys.java | 9 +- .../hdfs/web/resources/AccessTimeParam.java | 49 +++++++ .../hdfs/web/resources/AclPermissionParam.java | 69 ++++++++++ .../hdfs/web/resources/BlockSizeParam.java | 60 +++++++++ .../hadoop/hdfs/web/resources/BooleanParam.java | 57 ++++++++ .../hdfs/web/resources/ConcatSourcesParam.java | 65 +++++++++ .../hdfs/web/resources/CreateParentParam.java | 49 +++++++ .../hdfs/web/resources/DelegationParam.java | 44 ++++++ .../hdfs/web/resources/DeleteOpParam.java | 82 ++++++++++++ .../hdfs/web/resources/DestinationParam.java | 54 ++++++++ .../hadoop/hdfs/web/resources/DoAsParam.java | 41 ++++++ .../hadoop/hdfs/web/resources/EnumParam.java | 47 +++++++ .../hadoop/hdfs/web/resources/EnumSetParam.java | 92 +++++++++++++ .../web/resources/ExcludeDatanodesParam.java | 42 ++++++ .../hdfs/web/resources/FsActionParam.java | 58 ++++++++ .../hadoop/hdfs/web/resources/GetOpParam.java | 106 +++++++++++++++ .../hadoop/hdfs/web/resources/GroupParam.java | 41 ++++++ .../hadoop/hdfs/web/resources/HttpOpParam.java | 134 +++++++++++++++++++ .../hadoop/hdfs/web/resources/IntegerParam.java | 88 ++++++++++++ .../hadoop/hdfs/web/resources/LengthParam.java | 54 ++++++++ .../hadoop/hdfs/web/resources/LongParam.java | 87 ++++++++++++ .../web/resources/ModificationTimeParam.java | 49 +++++++ .../hdfs/web/resources/NewLengthParam.java | 49 +++++++ .../hadoop/hdfs/web/resources/OffsetParam.java | 54 ++++++++ .../web/resources/OldSnapshotNameParam.java | 40 ++++++ .../hdfs/web/resources/OverwriteParam.java | 49 +++++++ .../hadoop/hdfs/web/resources/OwnerParam.java | 41 ++++++ .../apache/hadoop/hdfs/web/resources/Param.java | 122 +++++++++++++++++ .../hdfs/web/resources/PermissionParam.java | 64 +++++++++ .../hadoop/hdfs/web/resources/PostOpParam.java | 88 ++++++++++++ .../hadoop/hdfs/web/resources/PutOpParam.java | 114 ++++++++++++++++ .../hdfs/web/resources/RecursiveParam.java | 49 +++++++ .../web/resources/RenameOptionSetParam.java | 52 +++++++ .../hadoop/hdfs/web/resources/RenewerParam.java | 41 ++++++ .../hdfs/web/resources/ReplicationParam.java | 60 +++++++++ .../hadoop/hdfs/web/resources/ShortParam.java | 88 ++++++++++++ .../hdfs/web/resources/SnapshotNameParam.java | 41 ++++++ .../hadoop/hdfs/web/resources/StringParam.java | 60 +++++++++ .../hdfs/web/resources/TokenArgumentParam.java | 44 ++++++ .../hadoop/hdfs/web/resources/UserParam.java | 82 ++++++++++++ .../hdfs/web/resources/XAttrEncodingParam.java | 56 ++++++++ .../hdfs/web/resources/XAttrNameParam.java | 44 ++++++ .../hdfs/web/resources/XAttrSetFlagParam.java | 53 ++++++++ .../hdfs/web/resources/XAttrValueParam.java | 45 +++++++ hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 + .../org/apache/hadoop/hdfs/DFSConfigKeys.java | 18 ++- .../hdfs/web/resources/AccessTimeParam.java | 49 ------- .../hdfs/web/resources/AclPermissionParam.java | 68 ---------- .../hdfs/web/resources/BlockSizeParam.java | 60 --------- .../hadoop/hdfs/web/resources/BooleanParam.java | 57 -------- .../hdfs/web/resources/ConcatSourcesParam.java | 65 --------- .../hdfs/web/resources/CreateParentParam.java | 49 ------- .../hdfs/web/resources/DelegationParam.java | 44 ------ .../hdfs/web/resources/DeleteOpParam.java | 82 ------------ .../hdfs/web/resources/DestinationParam.java | 54 -------- .../hadoop/hdfs/web/resources/DoAsParam.java | 41 ------ .../hadoop/hdfs/web/resources/EnumParam.java | 47 ------- .../hadoop/hdfs/web/resources/EnumSetParam.java | 92 ------------- .../web/resources/ExcludeDatanodesParam.java | 42 ------ .../hdfs/web/resources/FsActionParam.java | 58 -------- .../hadoop/hdfs/web/resources/GetOpParam.java | 106 --------------- .../hadoop/hdfs/web/resources/GroupParam.java | 41 ------ .../hadoop/hdfs/web/resources/HttpOpParam.java | 134 ------------------- .../hadoop/hdfs/web/resources/IntegerParam.java | 88 ------------ .../hadoop/hdfs/web/resources/LengthParam.java | 54 -------- .../hadoop/hdfs/web/resources/LongParam.java | 87 ------------ .../web/resources/ModificationTimeParam.java | 49 ------- .../hdfs/web/resources/NewLengthParam.java | 49 ------- .../hadoop/hdfs/web/resources/OffsetParam.java | 54 -------- .../web/resources/OldSnapshotNameParam.java | 40 ------ .../hdfs/web/resources/OverwriteParam.java | 49 ------- .../hadoop/hdfs/web/resources/OwnerParam.java | 41 ------ .../apache/hadoop/hdfs/web/resources/Param.java | 122 ----------------- .../hdfs/web/resources/PermissionParam.java | 64 --------- .../hadoop/hdfs/web/resources/PostOpParam.java | 88 ------------ .../hadoop/hdfs/web/resources/PutOpParam.java | 114 ---------------- .../hdfs/web/resources/RecursiveParam.java | 49 ------- .../web/resources/RenameOptionSetParam.java | 52 ------- .../hadoop/hdfs/web/resources/RenewerParam.java | 41 ------ .../hdfs/web/resources/ReplicationParam.java | 60 --------- .../hadoop/hdfs/web/resources/ShortParam.java | 88 ------------ .../hdfs/web/resources/SnapshotNameParam.java | 41 ------ .../hadoop/hdfs/web/resources/StringParam.java | 60 --------- .../hdfs/web/resources/TokenArgumentParam.java | 44 ------ .../hadoop/hdfs/web/resources/UserParam.java | 82 ------------ .../hdfs/web/resources/XAttrEncodingParam.java | 56 -------- .../hdfs/web/resources/XAttrNameParam.java | 44 ------ .../hdfs/web/resources/XAttrSetFlagParam.java | 53 -------- .../hdfs/web/resources/XAttrValueParam.java | 45 ------- 90 files changed, 2735 insertions(+), 2710 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/pom.xml ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/pom.xml b/hadoop-hdfs-project/hadoop-hdfs-client/pom.xml index 900f345..33c2ed9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-client/pom.xml +++ b/hadoop-hdfs-project/hadoop-hdfs-client/pom.xml @@ -29,6 +29,15 @@ http://maven.apache.org/xsd/maven-4.0.0.xsd"> <description>Apache Hadoop HDFS Client</description> <name>Apache Hadoop HDFS Client</name> <packaging>jar</packaging> + + <dependencies> + <dependency> + <groupId>org.apache.hadoop</groupId> + <artifactId>hadoop-common</artifactId> + <scope>provided</scope> + </dependency> + </dependencies> + <build> <plugins> <plugin> http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsClientConfigKeys.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsClientConfigKeys.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsClientConfigKeys.java index cf2d50a..604d60e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsClientConfigKeys.java +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsClientConfigKeys.java @@ -19,8 +19,15 @@ package org.apache.hadoop.hdfs.client; /** Client configuration properties */ public interface HdfsClientConfigKeys { - static final String PREFIX = "dfs.client."; + String DFS_BLOCK_SIZE_KEY = "dfs.blocksize"; + long DFS_BLOCK_SIZE_DEFAULT = 128*1024*1024; + String DFS_REPLICATION_KEY = "dfs.replication"; + short DFS_REPLICATION_DEFAULT = 3; + String DFS_WEBHDFS_USER_PATTERN_DEFAULT = "^[A-Za-z_][A-Za-z0-9._-]*[$]?$"; + String DFS_WEBHDFS_ACL_PERMISSION_PATTERN_DEFAULT = + "^(default:)?(user|group|mask|other):[[A-Za-z_][A-Za-z0-9._-]]*:([rwx-]{3})?(,(default:)?(user|group|mask|other):[[A-Za-z_][A-Za-z0-9._-]]*:([rwx-]{3})?)*$"; + static final String PREFIX = "dfs.client."; /** Client retry configuration properties */ public interface Retry { static final String PREFIX = HdfsClientConfigKeys.PREFIX + "retry."; http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/AccessTimeParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/AccessTimeParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/AccessTimeParam.java new file mode 100644 index 0000000..9bc938d --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/AccessTimeParam.java @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Access time parameter. */ +public class AccessTimeParam extends LongParam { + /** Parameter name. */ + public static final String NAME = "accesstime"; + /** Default parameter value. */ + public static final String DEFAULT = "-1"; + + private static final Domain DOMAIN = new Domain(NAME); + + /** + * Constructor. + * @param value the parameter value. + */ + public AccessTimeParam(final Long value) { + super(DOMAIN, value, -1L, null); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public AccessTimeParam(final String str) { + this(DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/AclPermissionParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/AclPermissionParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/AclPermissionParam.java new file mode 100644 index 0000000..4c998b6 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/AclPermissionParam.java @@ -0,0 +1,69 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys + .DFS_WEBHDFS_ACL_PERMISSION_PATTERN_DEFAULT; + +import java.util.List; +import java.util.regex.Pattern; + +import org.apache.hadoop.fs.permission.AclEntry; +import org.apache.commons.lang.StringUtils; + +/** AclPermission parameter. */ +public class AclPermissionParam extends StringParam { + /** Parameter name. */ + public static final String NAME = "aclspec"; + /** Default parameter value. */ + public static final String DEFAULT = ""; + + private static final Domain DOMAIN = new Domain(NAME, + Pattern.compile(DFS_WEBHDFS_ACL_PERMISSION_PATTERN_DEFAULT)); + + /** + * Constructor. + * + * @param str a string representation of the parameter value. + */ + public AclPermissionParam(final String str) { + super(DOMAIN, str == null || str.equals(DEFAULT) ? null : str); + } + + public AclPermissionParam(List<AclEntry> acl) { + super(DOMAIN,parseAclSpec(acl).equals(DEFAULT) ? null : parseAclSpec(acl)); + } + + @Override + public String getName() { + return NAME; + } + + public List<AclEntry> getAclPermission(boolean includePermission) { + final String v = getValue(); + return (v != null ? AclEntry.parseAclSpec(v, includePermission) : AclEntry + .parseAclSpec(DEFAULT, includePermission)); + } + + /** + * @return parse {@code aclEntry} and return aclspec + */ + private static String parseAclSpec(List<AclEntry> aclEntry) { + return StringUtils.join(aclEntry, ","); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/BlockSizeParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/BlockSizeParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/BlockSizeParam.java new file mode 100644 index 0000000..3f53d7c --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/BlockSizeParam.java @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_BLOCK_SIZE_DEFAULT; +import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_BLOCK_SIZE_KEY; + +import org.apache.hadoop.conf.Configuration; + +/** Block size parameter. */ +public class BlockSizeParam extends LongParam { + /** Parameter name. */ + public static final String NAME = "blocksize"; + /** Default parameter value. */ + public static final String DEFAULT = NULL; + + private static final Domain DOMAIN = new Domain(NAME); + + /** + * Constructor. + * @param value the parameter value. + */ + public BlockSizeParam(final Long value) { + super(DOMAIN, value, 1L, null); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public BlockSizeParam(final String str) { + this(DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } + + /** @return the value or, if it is null, return the default from conf. */ + public long getValue(final Configuration conf) { + return getValue() != null? getValue() + : conf.getLongBytes(DFS_BLOCK_SIZE_KEY, DFS_BLOCK_SIZE_DEFAULT); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/BooleanParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/BooleanParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/BooleanParam.java new file mode 100644 index 0000000..3437a0c --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/BooleanParam.java @@ -0,0 +1,57 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Boolean parameter. */ +abstract class BooleanParam extends Param<Boolean, BooleanParam.Domain> { + static final String TRUE = "true"; + static final String FALSE = "false"; + + /** @return the parameter value as a string */ + @Override + public String getValueString() { + return value.toString(); + } + + BooleanParam(final Domain domain, final Boolean value) { + super(domain, value); + } + + /** The domain of the parameter. */ + static final class Domain extends Param.Domain<Boolean> { + Domain(final String paramName) { + super(paramName); + } + + @Override + public String getDomain() { + return "<" + NULL + " | boolean>"; + } + + @Override + Boolean parse(final String str) { + if (TRUE.equalsIgnoreCase(str)) { + return true; + } else if (FALSE.equalsIgnoreCase(str)) { + return false; + } + throw new IllegalArgumentException("Failed to parse \"" + str + + "\" to Boolean."); + } + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ConcatSourcesParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ConcatSourcesParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ConcatSourcesParam.java new file mode 100644 index 0000000..b68c5f5 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ConcatSourcesParam.java @@ -0,0 +1,65 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdfs.web.resources; + +import org.apache.hadoop.fs.Path; + +/** The concat source paths parameter. */ +public class ConcatSourcesParam extends StringParam { + /** Parameter name. */ + public static final String NAME = "sources"; + + public static final String DEFAULT = ""; + + private static final Domain DOMAIN = new Domain(NAME, null); + + private static String paths2String(Path[] paths) { + if (paths == null || paths.length == 0) { + return ""; + } + final StringBuilder b = new StringBuilder(paths[0].toUri().getPath()); + for(int i = 1; i < paths.length; i++) { + b.append(',').append(paths[i].toUri().getPath()); + } + return b.toString(); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public ConcatSourcesParam(String str) { + super(DOMAIN, str); + } + + public ConcatSourcesParam(Path[] paths) { + this(paths2String(paths)); + } + + @Override + public String getName() { + return NAME; + } + + /** @return the absolute path. */ + public final String[] getAbsolutePaths() { + final String[] paths = getValue().split(","); + return paths; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/CreateParentParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/CreateParentParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/CreateParentParam.java new file mode 100644 index 0000000..8152515 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/CreateParentParam.java @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Create Parent parameter. */ +public class CreateParentParam extends BooleanParam { + /** Parameter name. */ + public static final String NAME = "createparent"; + /** Default parameter value. */ + public static final String DEFAULT = FALSE; + + private static final Domain DOMAIN = new Domain(NAME); + + /** + * Constructor. + * @param value the parameter value. + */ + public CreateParentParam(final Boolean value) { + super(DOMAIN, value); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public CreateParentParam(final String str) { + this(DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DelegationParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DelegationParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DelegationParam.java new file mode 100644 index 0000000..57be43e --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DelegationParam.java @@ -0,0 +1,44 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import org.apache.hadoop.security.UserGroupInformation; + +/** Represents delegation token used for authentication. */ +public class DelegationParam extends StringParam { + /** Parameter name. */ + public static final String NAME = "delegation"; + /** Default parameter value. */ + public static final String DEFAULT = ""; + + private static final Domain DOMAIN = new Domain(NAME, null); + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public DelegationParam(final String str) { + super(DOMAIN, UserGroupInformation.isSecurityEnabled() + && str != null && !str.equals(DEFAULT)? str: null); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DeleteOpParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DeleteOpParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DeleteOpParam.java new file mode 100644 index 0000000..65275e0 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DeleteOpParam.java @@ -0,0 +1,82 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import java.net.HttpURLConnection; + +/** Http DELETE operation parameter. */ +public class DeleteOpParam extends HttpOpParam<DeleteOpParam.Op> { + /** Delete operations. */ + public static enum Op implements HttpOpParam.Op { + DELETE(HttpURLConnection.HTTP_OK), + DELETESNAPSHOT(HttpURLConnection.HTTP_OK), + + NULL(HttpURLConnection.HTTP_NOT_IMPLEMENTED); + + final int expectedHttpResponseCode; + + Op(final int expectedHttpResponseCode) { + this.expectedHttpResponseCode = expectedHttpResponseCode; + } + + @Override + public HttpOpParam.Type getType() { + return HttpOpParam.Type.DELETE; + } + + @Override + public boolean getRequireAuth() { + return false; + } + + @Override + public boolean getDoOutput() { + return false; + } + + @Override + public boolean getRedirect() { + return false; + } + + @Override + public int getExpectedHttpResponseCode() { + return expectedHttpResponseCode; + } + + @Override + public String toQueryString() { + return NAME + "=" + this; + } + } + + private static final Domain<Op> DOMAIN = new Domain<Op>(NAME, Op.class); + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public DeleteOpParam(final String str) { + super(DOMAIN, DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DestinationParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DestinationParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DestinationParam.java new file mode 100644 index 0000000..6759738 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DestinationParam.java @@ -0,0 +1,54 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import org.apache.hadoop.fs.Path; + +/** Destination path parameter. */ +public class DestinationParam extends StringParam { + /** Parameter name. */ + public static final String NAME = "destination"; + /** Default parameter value. */ + public static final String DEFAULT = ""; + + private static final Domain DOMAIN = new Domain(NAME, null); + + private static String validate(final String str) { + if (str == null || str.equals(DEFAULT)) { + return null; + } + if (!str.startsWith(Path.SEPARATOR)) { + throw new IllegalArgumentException("Invalid parameter value: " + NAME + + " = \"" + str + "\" is not an absolute path."); + } + return new Path(str).toUri().getPath(); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public DestinationParam(final String str) { + super(DOMAIN, validate(str)); + } + + @Override + public String getName() { + return NAME; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DoAsParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DoAsParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DoAsParam.java new file mode 100644 index 0000000..13d188c --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/DoAsParam.java @@ -0,0 +1,41 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** DoAs parameter for proxy user. */ +public class DoAsParam extends StringParam { + /** Parameter name. */ + public static final String NAME = "doas"; + /** Default parameter value. */ + public static final String DEFAULT = ""; + + private static final Domain DOMAIN = new Domain(NAME, null); + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public DoAsParam(final String str) { + super(DOMAIN, str == null || str.equals(DEFAULT)? null: str); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/EnumParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/EnumParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/EnumParam.java new file mode 100644 index 0000000..60d201b --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/EnumParam.java @@ -0,0 +1,47 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import java.util.Arrays; +import org.apache.hadoop.util.StringUtils; + +abstract class EnumParam<E extends Enum<E>> extends Param<E, EnumParam.Domain<E>> { + EnumParam(final Domain<E> domain, final E value) { + super(domain, value); + } + + /** The domain of the parameter. */ + static final class Domain<E extends Enum<E>> extends Param.Domain<E> { + private final Class<E> enumClass; + + Domain(String name, final Class<E> enumClass) { + super(name); + this.enumClass = enumClass; + } + + @Override + public final String getDomain() { + return Arrays.asList(enumClass.getEnumConstants()).toString(); + } + + @Override + final E parse(final String str) { + return Enum.valueOf(enumClass, StringUtils.toUpperCase(str)); + } + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/EnumSetParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/EnumSetParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/EnumSetParam.java new file mode 100644 index 0000000..06b7bc6 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/EnumSetParam.java @@ -0,0 +1,92 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import java.util.Arrays; +import java.util.EnumSet; +import java.util.Iterator; +import org.apache.hadoop.util.StringUtils; + +abstract class EnumSetParam<E extends Enum<E>> extends Param<EnumSet<E>, EnumSetParam.Domain<E>> { + /** Convert an EnumSet to a string of comma separated values. */ + static <E extends Enum<E>> String toString(EnumSet<E> set) { + if (set == null || set.isEmpty()) { + return ""; + } else { + final StringBuilder b = new StringBuilder(); + final Iterator<E> i = set.iterator(); + b.append(i.next()); + for(; i.hasNext(); ) { + b.append(',').append(i.next()); + } + return b.toString(); + } + } + + static <E extends Enum<E>> EnumSet<E> toEnumSet(final Class<E> clazz, + final E... values) { + final EnumSet<E> set = EnumSet.noneOf(clazz); + set.addAll(Arrays.asList(values)); + return set; + } + + EnumSetParam(final Domain<E> domain, final EnumSet<E> value) { + super(domain, value); + } + + @Override + public String toString() { + return getName() + "=" + toString(value); + } + + /** @return the parameter value as a string */ + @Override + public String getValueString() { + return toString(value); + } + + /** The domain of the parameter. */ + static final class Domain<E extends Enum<E>> extends Param.Domain<EnumSet<E>> { + private final Class<E> enumClass; + + Domain(String name, final Class<E> enumClass) { + super(name); + this.enumClass = enumClass; + } + + @Override + public final String getDomain() { + return Arrays.asList(enumClass.getEnumConstants()).toString(); + } + + /** The string contains a comma separated values. */ + @Override + final EnumSet<E> parse(final String str) { + final EnumSet<E> set = EnumSet.noneOf(enumClass); + if (!str.isEmpty()) { + for(int i, j = 0; j >= 0; ) { + i = j > 0 ? j + 1 : 0; + j = str.indexOf(',', i); + final String sub = j >= 0? str.substring(i, j): str.substring(i); + set.add(Enum.valueOf(enumClass, StringUtils.toUpperCase(sub.trim()))); + } + } + return set; + } + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ExcludeDatanodesParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ExcludeDatanodesParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ExcludeDatanodesParam.java new file mode 100644 index 0000000..3f44fae --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ExcludeDatanodesParam.java @@ -0,0 +1,42 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + + +/** Exclude datanodes param */ +public class ExcludeDatanodesParam extends StringParam { + /** Parameter name. */ + public static final String NAME = "excludedatanodes"; + /** Default parameter value. */ + public static final String DEFAULT = ""; + + private static final Domain DOMAIN = new Domain(NAME, null); + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public ExcludeDatanodesParam(final String str) { + super(DOMAIN, str == null || str.equals(DEFAULT)? null: DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/FsActionParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/FsActionParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/FsActionParam.java new file mode 100644 index 0000000..c840196 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/FsActionParam.java @@ -0,0 +1,58 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import org.apache.hadoop.fs.permission.FsAction; + +import java.util.regex.Pattern; + +/** {@link FsAction} Parameter */ +public class FsActionParam extends StringParam { + + /** Parameter name. */ + public static final String NAME = "fsaction"; + + /** Default parameter value. */ + public static final String DEFAULT = NULL; + + private static String FS_ACTION_PATTERN = "[rwx-]{3}"; + + private static final Domain DOMAIN = new Domain(NAME, + Pattern.compile(FS_ACTION_PATTERN)); + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public FsActionParam(final String str) { + super(DOMAIN, str == null || str.equals(DEFAULT)? null: str); + } + + /** + * Constructor. + * @param value the parameter value. + */ + public FsActionParam(final FsAction value) { + super(DOMAIN, value == null? null: value.SYMBOL); + } + + @Override + public String getName() { + return NAME; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/GetOpParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/GetOpParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/GetOpParam.java new file mode 100644 index 0000000..c39032c --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/GetOpParam.java @@ -0,0 +1,106 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import java.net.HttpURLConnection; + +/** Http GET operation parameter. */ +public class GetOpParam extends HttpOpParam<GetOpParam.Op> { + /** Get operations. */ + public static enum Op implements HttpOpParam.Op { + OPEN(true, HttpURLConnection.HTTP_OK), + + GETFILESTATUS(false, HttpURLConnection.HTTP_OK), + LISTSTATUS(false, HttpURLConnection.HTTP_OK), + GETCONTENTSUMMARY(false, HttpURLConnection.HTTP_OK), + GETFILECHECKSUM(true, HttpURLConnection.HTTP_OK), + + GETHOMEDIRECTORY(false, HttpURLConnection.HTTP_OK), + GETDELEGATIONTOKEN(false, HttpURLConnection.HTTP_OK, true), + + /** GET_BLOCK_LOCATIONS is a private unstable op. */ + GET_BLOCK_LOCATIONS(false, HttpURLConnection.HTTP_OK), + GETACLSTATUS(false, HttpURLConnection.HTTP_OK), + GETXATTRS(false, HttpURLConnection.HTTP_OK), + LISTXATTRS(false, HttpURLConnection.HTTP_OK), + + NULL(false, HttpURLConnection.HTTP_NOT_IMPLEMENTED), + + CHECKACCESS(false, HttpURLConnection.HTTP_OK); + + final boolean redirect; + final int expectedHttpResponseCode; + final boolean requireAuth; + + Op(final boolean redirect, final int expectedHttpResponseCode) { + this(redirect, expectedHttpResponseCode, false); + } + + Op(final boolean redirect, final int expectedHttpResponseCode, + final boolean requireAuth) { + this.redirect = redirect; + this.expectedHttpResponseCode = expectedHttpResponseCode; + this.requireAuth = requireAuth; + } + + @Override + public HttpOpParam.Type getType() { + return HttpOpParam.Type.GET; + } + + @Override + public boolean getRequireAuth() { + return requireAuth; + } + + @Override + public boolean getDoOutput() { + return false; + } + + @Override + public boolean getRedirect() { + return redirect; + } + + @Override + public int getExpectedHttpResponseCode() { + return expectedHttpResponseCode; + } + + @Override + public String toQueryString() { + return NAME + "=" + this; + } + } + + private static final Domain<Op> DOMAIN = new Domain<Op>(NAME, Op.class); + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public GetOpParam(final String str) { + super(DOMAIN, DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/GroupParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/GroupParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/GroupParam.java new file mode 100644 index 0000000..c0429cc --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/GroupParam.java @@ -0,0 +1,41 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Group parameter. */ +public class GroupParam extends StringParam { + /** Parameter name. */ + public static final String NAME = "group"; + /** Default parameter value. */ + public static final String DEFAULT = ""; + + private static final Domain DOMAIN = new Domain(NAME, null); + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public GroupParam(final String str) { + super(DOMAIN, str == null || str.equals(DEFAULT)? null: str); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/HttpOpParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/HttpOpParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/HttpOpParam.java new file mode 100644 index 0000000..67224ef --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/HttpOpParam.java @@ -0,0 +1,134 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import javax.ws.rs.core.Response; + + +/** Http operation parameter. */ +public abstract class HttpOpParam<E extends Enum<E> & HttpOpParam.Op> + extends EnumParam<E> { + /** Parameter name. */ + public static final String NAME = "op"; + + /** Default parameter value. */ + public static final String DEFAULT = NULL; + + /** Http operation types */ + public static enum Type { + GET, PUT, POST, DELETE; + } + + /** Http operation interface. */ + public static interface Op { + /** @return the Http operation type. */ + public Type getType(); + + /** @return true if the operation cannot use a token */ + public boolean getRequireAuth(); + + /** @return true if the operation will do output. */ + public boolean getDoOutput(); + + /** @return true if the operation will be redirected. */ + public boolean getRedirect(); + + /** @return true the expected http response code. */ + public int getExpectedHttpResponseCode(); + + /** @return a URI query string. */ + public String toQueryString(); + } + + /** Expects HTTP response 307 "Temporary Redirect". */ + public static class TemporaryRedirectOp implements Op { + static final TemporaryRedirectOp CREATE = new TemporaryRedirectOp( + PutOpParam.Op.CREATE); + static final TemporaryRedirectOp APPEND = new TemporaryRedirectOp( + PostOpParam.Op.APPEND); + static final TemporaryRedirectOp OPEN = new TemporaryRedirectOp( + GetOpParam.Op.OPEN); + static final TemporaryRedirectOp GETFILECHECKSUM = new TemporaryRedirectOp( + GetOpParam.Op.GETFILECHECKSUM); + + static final List<TemporaryRedirectOp> values + = Collections.unmodifiableList(Arrays.asList(CREATE, APPEND, OPEN, + GETFILECHECKSUM)); + + /** Get an object for the given op. */ + public static TemporaryRedirectOp valueOf(final Op op) { + for(TemporaryRedirectOp t : values) { + if (op == t.op) { + return t; + } + } + throw new IllegalArgumentException(op + " not found."); + } + + private final Op op; + + private TemporaryRedirectOp(final Op op) { + this.op = op; + } + + @Override + public Type getType() { + return op.getType(); + } + + @Override + public boolean getRequireAuth() { + return op.getRequireAuth(); + } + + @Override + public boolean getDoOutput() { + return false; + } + + @Override + public boolean getRedirect() { + return false; + } + + /** Override the original expected response with "Temporary Redirect". */ + @Override + public int getExpectedHttpResponseCode() { + return Response.Status.TEMPORARY_REDIRECT.getStatusCode(); + } + + @Override + public String toQueryString() { + return op.toQueryString(); + } + } + + /** @return the parameter value as a string */ + @Override + public String getValueString() { + return value.toString(); + } + + HttpOpParam(final Domain<E> domain, final E value) { + super(domain, value); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/IntegerParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/IntegerParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/IntegerParam.java new file mode 100644 index 0000000..c860d90 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/IntegerParam.java @@ -0,0 +1,88 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Integer parameter. */ +abstract class IntegerParam extends Param<Integer, IntegerParam.Domain> { + IntegerParam(final Domain domain, final Integer value, + final Integer min, final Integer max) { + super(domain, value); + checkRange(min, max); + } + + private void checkRange(final Integer min, final Integer max) { + if (value == null) { + return; + } + if (min != null && value < min) { + throw new IllegalArgumentException("Invalid parameter range: " + getName() + + " = " + domain.toString(value) + " < " + domain.toString(min)); + } + if (max != null && value > max) { + throw new IllegalArgumentException("Invalid parameter range: " + getName() + + " = " + domain.toString(value) + " > " + domain.toString(max)); + } + } + + @Override + public String toString() { + return getName() + "=" + domain.toString(getValue()); + } + + /** @return the parameter value as a string */ + @Override + public String getValueString() { + return domain.toString(getValue()); + } + + /** The domain of the parameter. */ + static final class Domain extends Param.Domain<Integer> { + /** The radix of the number. */ + final int radix; + + Domain(final String paramName) { + this(paramName, 10); + } + + Domain(final String paramName, final int radix) { + super(paramName); + this.radix = radix; + } + + @Override + public String getDomain() { + return "<" + NULL + " | int in radix " + radix + ">"; + } + + @Override + Integer parse(final String str) { + try{ + return NULL.equals(str) || str == null ? null : Integer.parseInt(str, + radix); + } catch(NumberFormatException e) { + throw new IllegalArgumentException("Failed to parse \"" + str + + "\" as a radix-" + radix + " integer.", e); + } + } + + /** Convert an Integer to a String. */ + String toString(final Integer n) { + return n == null? NULL: Integer.toString(n, radix); + } + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/LengthParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/LengthParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/LengthParam.java new file mode 100644 index 0000000..5a609ee --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/LengthParam.java @@ -0,0 +1,54 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Length parameter. */ +public class LengthParam extends LongParam { + /** Parameter name. */ + public static final String NAME = "length"; + /** Default parameter value. */ + public static final String DEFAULT = NULL; + + private static final Domain DOMAIN = new Domain(NAME); + + /** + * Constructor. + * @param value the parameter value. + */ + public LengthParam(final Long value) { + super(DOMAIN, value, 0L, null); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public LengthParam(final String str) { + this(DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } + + public long getLength() { + Long v = getValue(); + return v == null ? -1 : v; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/LongParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/LongParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/LongParam.java new file mode 100644 index 0000000..12e0a94 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/LongParam.java @@ -0,0 +1,87 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Long parameter. */ +abstract class LongParam extends Param<Long, LongParam.Domain> { + LongParam(final Domain domain, final Long value, final Long min, final Long max) { + super(domain, value); + checkRange(min, max); + } + + private void checkRange(final Long min, final Long max) { + if (value == null) { + return; + } + if (min != null && value < min) { + throw new IllegalArgumentException("Invalid parameter range: " + getName() + + " = " + domain.toString(value) + " < " + domain.toString(min)); + } + if (max != null && value > max) { + throw new IllegalArgumentException("Invalid parameter range: " + getName() + + " = " + domain.toString(value) + " > " + domain.toString(max)); + } + } + + @Override + public String toString() { + return getName() + "=" + domain.toString(getValue()); + } + + /** @return the parameter value as a string */ + @Override + public String getValueString() { + return domain.toString(getValue()); + } + + /** The domain of the parameter. */ + static final class Domain extends Param.Domain<Long> { + /** The radix of the number. */ + final int radix; + + Domain(final String paramName) { + this(paramName, 10); + } + + Domain(final String paramName, final int radix) { + super(paramName); + this.radix = radix; + } + + @Override + public String getDomain() { + return "<" + NULL + " | long in radix " + radix + ">"; + } + + @Override + Long parse(final String str) { + try { + return NULL.equals(str) || str == null ? null: Long.parseLong(str, + radix); + } catch(NumberFormatException e) { + throw new IllegalArgumentException("Failed to parse \"" + str + + "\" as a radix-" + radix + " long integer.", e); + } + } + + /** Convert a Long to a String. */ + String toString(final Long n) { + return n == null? NULL: Long.toString(n, radix); + } + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ModificationTimeParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ModificationTimeParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ModificationTimeParam.java new file mode 100644 index 0000000..59911d7 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/ModificationTimeParam.java @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Modification time parameter. */ +public class ModificationTimeParam extends LongParam { + /** Parameter name. */ + public static final String NAME = "modificationtime"; + /** Default parameter value. */ + public static final String DEFAULT = "-1"; + + private static final Domain DOMAIN = new Domain(NAME); + + /** + * Constructor. + * @param value the parameter value. + */ + public ModificationTimeParam(final Long value) { + super(DOMAIN, value, -1L, null); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public ModificationTimeParam(final String str) { + this(DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/NewLengthParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/NewLengthParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/NewLengthParam.java new file mode 100644 index 0000000..83aba9e --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/NewLengthParam.java @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** NewLength parameter. */ +public class NewLengthParam extends LongParam { + /** Parameter name. */ + public static final String NAME = "newlength"; + /** Default parameter value. */ + public static final String DEFAULT = NULL; + + private static final Domain DOMAIN = new Domain(NAME); + + /** + * Constructor. + * @param value the parameter value. + */ + public NewLengthParam(final Long value) { + super(DOMAIN, value, 0L, null); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public NewLengthParam(final String str) { + this(DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OffsetParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OffsetParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OffsetParam.java new file mode 100644 index 0000000..6d88703 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OffsetParam.java @@ -0,0 +1,54 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Offset parameter. */ +public class OffsetParam extends LongParam { + /** Parameter name. */ + public static final String NAME = "offset"; + /** Default parameter value. */ + public static final String DEFAULT = "0"; + + private static final Domain DOMAIN = new Domain(NAME); + + /** + * Constructor. + * @param value the parameter value. + */ + public OffsetParam(final Long value) { + super(DOMAIN, value, 0L, null); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public OffsetParam(final String str) { + this(DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } + + public Long getOffset() { + Long offset = getValue(); + return (offset == null) ? Long.valueOf(0) : offset; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OldSnapshotNameParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OldSnapshotNameParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OldSnapshotNameParam.java new file mode 100644 index 0000000..befade5 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OldSnapshotNameParam.java @@ -0,0 +1,40 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** + * The old snapshot name parameter for renameSnapshot operation. + */ +public class OldSnapshotNameParam extends StringParam { + /** Parameter name. */ + public static final String NAME = "oldsnapshotname"; + + /** Default parameter value. */ + public static final String DEFAULT = ""; + + private static final Domain DOMAIN = new Domain(NAME, null); + + public OldSnapshotNameParam(final String str) { + super(DOMAIN, str != null && !str.equals(DEFAULT) ? str : null); + } + + @Override + public String getName() { + return NAME; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OverwriteParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OverwriteParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OverwriteParam.java new file mode 100644 index 0000000..f6945bb --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OverwriteParam.java @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Overwrite parameter. */ +public class OverwriteParam extends BooleanParam { + /** Parameter name. */ + public static final String NAME = "overwrite"; + /** Default parameter value. */ + public static final String DEFAULT = FALSE; + + private static final Domain DOMAIN = new Domain(NAME); + + /** + * Constructor. + * @param value the parameter value. + */ + public OverwriteParam(final Boolean value) { + super(DOMAIN, value); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public OverwriteParam(final String str) { + this(DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OwnerParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OwnerParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OwnerParam.java new file mode 100644 index 0000000..a1c10aa --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/OwnerParam.java @@ -0,0 +1,41 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +/** Owner parameter. */ +public class OwnerParam extends StringParam { + /** Parameter name. */ + public static final String NAME = "owner"; + /** Default parameter value. */ + public static final String DEFAULT = ""; + + private static final Domain DOMAIN = new Domain(NAME, null); + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public OwnerParam(final String str) { + super(DOMAIN, str == null || str.equals(DEFAULT)? null: str); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/Param.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/Param.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/Param.java new file mode 100644 index 0000000..279a50c --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/Param.java @@ -0,0 +1,122 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Arrays; +import java.util.Comparator; + + +/** Base class of parameters. */ +public abstract class Param<T, D extends Param.Domain<T>> { + static final String NULL = "null"; + + static final Comparator<Param<?,?>> NAME_CMP = new Comparator<Param<?,?>>() { + @Override + public int compare(Param<?, ?> left, Param<?, ?> right) { + return left.getName().compareTo(right.getName()); + } + }; + + /** Convert the parameters to a sorted String. + * + * @param separator URI parameter separator character + * @param parameters parameters to encode into a string + * @return the encoded URI string + */ + public static String toSortedString(final String separator, + final Param<?, ?>... parameters) { + Arrays.sort(parameters, NAME_CMP); + final StringBuilder b = new StringBuilder(); + try { + for(Param<?, ?> p : parameters) { + if (p.getValue() != null) { + b.append(separator).append( + URLEncoder.encode(p.getName(), "UTF-8") + + "=" + + URLEncoder.encode(p.getValueString(), "UTF-8")); + } + } + } catch (UnsupportedEncodingException e) { + // Sane systems know about UTF-8, so this should never happen. + throw new RuntimeException(e); + } + return b.toString(); + } + + /** The domain of the parameter. */ + final D domain; + /** The actual parameter value. */ + final T value; + + Param(final D domain, final T value) { + this.domain = domain; + this.value = value; + } + + /** @return the parameter value. */ + public final T getValue() { + return value; + } + + /** @return the parameter value as a string */ + public abstract String getValueString(); + + /** @return the parameter name. */ + public abstract String getName(); + + @Override + public String toString() { + return getName() + "=" + value; + } + + /** Base class of parameter domains. */ + static abstract class Domain<T> { + /** Parameter name. */ + final String paramName; + + Domain(final String paramName) { + this.paramName = paramName; + } + + /** @return the parameter name. */ + public final String getParamName() { + return paramName; + } + + /** @return a string description of the domain of the parameter. */ + public abstract String getDomain(); + + /** @return the parameter value represented by the string. */ + abstract T parse(String str); + + /** Parse the given string. + * @return the parameter value represented by the string. + */ + public final T parse(final String varName, final String str) { + try { + return str != null && str.trim().length() > 0 ? parse(str) : null; + } catch(Exception e) { + throw new IllegalArgumentException("Failed to parse \"" + str + + "\" for the parameter " + varName + + ". The value must be in the domain " + getDomain(), e); + } + } + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/PermissionParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/PermissionParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/PermissionParam.java new file mode 100644 index 0000000..ac6f097 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/PermissionParam.java @@ -0,0 +1,64 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import org.apache.hadoop.fs.permission.FsPermission; + +/** Permission parameter, use a Short to represent a FsPermission. */ +public class PermissionParam extends ShortParam { + /** Parameter name. */ + public static final String NAME = "permission"; + /** Default parameter value. */ + public static final String DEFAULT = NULL; + + private static final Domain DOMAIN = new Domain(NAME, 8); + + private static final short DEFAULT_PERMISSION = 0755; + + /** @return the default FsPermission. */ + public static FsPermission getDefaultFsPermission() { + return new FsPermission(DEFAULT_PERMISSION); + } + + /** + * Constructor. + * @param value the parameter value. + */ + public PermissionParam(final FsPermission value) { + super(DOMAIN, value == null? null: value.toShort(), null, null); + } + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public PermissionParam(final String str) { + super(DOMAIN, DOMAIN.parse(str), (short)0, (short)01777); + } + + @Override + public String getName() { + return NAME; + } + + /** @return the represented FsPermission. */ + public FsPermission getFsPermission() { + final Short v = getValue(); + return new FsPermission(v != null? v: DEFAULT_PERMISSION); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/cc258235/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/PostOpParam.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/PostOpParam.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/PostOpParam.java new file mode 100644 index 0000000..e0178d5 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/web/resources/PostOpParam.java @@ -0,0 +1,88 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.hdfs.web.resources; + +import java.net.HttpURLConnection; + +/** Http POST operation parameter. */ +public class PostOpParam extends HttpOpParam<PostOpParam.Op> { + /** Post operations. */ + public static enum Op implements HttpOpParam.Op { + APPEND(true, HttpURLConnection.HTTP_OK), + + CONCAT(false, HttpURLConnection.HTTP_OK), + + TRUNCATE(false, HttpURLConnection.HTTP_OK), + + NULL(false, HttpURLConnection.HTTP_NOT_IMPLEMENTED); + + final boolean doOutputAndRedirect; + final int expectedHttpResponseCode; + + Op(final boolean doOutputAndRedirect, final int expectedHttpResponseCode) { + this.doOutputAndRedirect = doOutputAndRedirect; + this.expectedHttpResponseCode = expectedHttpResponseCode; + } + + @Override + public Type getType() { + return Type.POST; + } + + @Override + public boolean getRequireAuth() { + return false; + } + + @Override + public boolean getDoOutput() { + return doOutputAndRedirect; + } + + @Override + public boolean getRedirect() { + return doOutputAndRedirect; + } + + @Override + public int getExpectedHttpResponseCode() { + return expectedHttpResponseCode; + } + + /** @return a URI query string. */ + @Override + public String toQueryString() { + return NAME + "=" + this; + } + } + + private static final Domain<Op> DOMAIN = new Domain<PostOpParam.Op>(NAME, Op.class); + + /** + * Constructor. + * @param str a string representation of the parameter value. + */ + public PostOpParam(final String str) { + super(DOMAIN, DOMAIN.parse(str)); + } + + @Override + public String getName() { + return NAME; + } +} \ No newline at end of file