blob: 9daee96288fa28159c75ae4eb8253c1e1015a70b [file] [log] [blame]
/*
* 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.tinkerpop.gremlin.driver.message;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.stream.Stream;
/**
* Response status codes for Gremlin Server responses. Result codes tend to map to
* <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">HTTP status codes</a>. It is not a one-to-one
* mapping and there are mapper status codes to be considered.
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public enum ResponseStatusCode {
/**
* The server successfully processed a request to completion - there are no messages remaining in this stream.
*/
SUCCESS(200),
/**
* The server processed the request but there is no result to return (e.g. an {@link Iterator} with no elements).
*/
NO_CONTENT(204),
/**
* The server successfully returned some content, but there is more in the stream to arrive - wait for a
* {@link #SUCCESS} to signify the end of the stream.
*/
PARTIAL_CONTENT(206),
/**
* The server could not authenticate the request or the client requested a resource it did not have access to.
*/
UNAUTHORIZED(401),
/**
* The server could authenticate the request, but will not fulfill it. This is a general purpose code that
* would typically be returned if the request is authenticated but not authorized to do what it is doing. This
* code is for future use.
*/
FORBIDDEN(403),
/**
* A challenge from the server for the client to authenticate its request.
*/
AUTHENTICATE(407),
/**
* The request message contains objects that were not serializable on the client side.
*/
REQUEST_ERROR_SERIALIZATION(497),
/**
* The request message was not properly formatted which means it could not be parsed at all or the "op" code was
* not recognized such that Gremlin Server could properly route it for processing. Check the message format and
* retry the request.
*/
REQUEST_ERROR_MALFORMED_REQUEST(498),
/**
* The request message was parseable, but the arguments supplied in the message were in conflict or incomplete.
* Check the message format and retry the request.
*/
REQUEST_ERROR_INVALID_REQUEST_ARGUMENTS(499),
/**
* A general server error occurred that prevented the request from being processed.
*/
SERVER_ERROR(500),
/**
* The request submitted for processing evaluated by the server with errors and could not be processed.
* Check the script or remote traversal submitted for errors or other problems and then resubmit.
*/
SERVER_ERROR_EVALUATION(597),
/**
* The server exceeded one of the timeout settings for the request and could therefore only partially responded
* or did not respond at all.
*/
SERVER_ERROR_TIMEOUT(598),
/**
* The server was not capable of serializing an object that was returned from the script supplied on the request.
* Either transform the object into something Gremlin Server can process within the script or install mapper
* serialization classes to Gremlin Server.
*/
SERVER_ERROR_SERIALIZATION(599);
private final int value;
private static Map<Integer, ResponseStatusCode> codeValueMap = new HashMap<>();
static {
Stream.of(ResponseStatusCode.values()).forEach(code -> codeValueMap.put(code.getValue(), code));
}
public static ResponseStatusCode getFromValue(final int codeValue) {
return codeValueMap.get(codeValue);
}
ResponseStatusCode(final int value) {
this.value = value;
}
public int getValue() {
return value;
}
public boolean isSuccess() {
return String.valueOf(this.value).startsWith("2");
}
/**
* Indicates whether the status code can only be used in the last response for a particular request.
*/
public boolean isFinalResponse() {
return this != PARTIAL_CONTENT && this != AUTHENTICATE;
}
}