| /** |
| * 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 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( |
| new TemporaryRedirectOp[]{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 getDoOutput() { |
| return op.getDoOutput(); |
| } |
| |
| @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); |
| } |
| } |