diff --git a/driver/src/main/java/com/arangodb/ArangoDB.java b/driver/src/main/java/com/arangodb/ArangoDB.java index 661d77b30..118bd755c 100644 --- a/driver/src/main/java/com/arangodb/ArangoDB.java +++ b/driver/src/main/java/com/arangodb/ArangoDB.java @@ -23,9 +23,7 @@ import com.arangodb.config.ConfigPropertiesProvider; import com.arangodb.config.ConfigPropertyKey; import com.arangodb.entity.*; -import com.arangodb.internal.ArangoDBImpl; -import com.arangodb.internal.ArangoDefaults; -import com.arangodb.internal.InternalArangoDBBuilder; +import com.arangodb.internal.*; import com.arangodb.internal.http.HttpCommunication; import com.arangodb.internal.http.HttpConnectionFactory; import com.arangodb.internal.net.*; @@ -276,21 +274,19 @@ public interface ArangoDB extends ArangoSerdeAccessor { void grantDefaultCollectionAccess(String user, Permissions permissions); /** - * Generic Execute. Use this method to execute custom FOXX services. + * Execute custom requests. Requests can be programmatically built by setting low level detail such as method, path, + * query parameters, headers and body payload. + * This method can be used to call FOXX services, API endpoints not (yet) implemented in this driver or trigger + * async jobs, see + * Fire and Forget + * and + * Async Execution and later Result Retrieval * * @param request request - * @return VelocyStream response + * @param type Deserialization target type for the response body (POJO or {@link com.arangodb.util.RawData}) + * @return response */ - Response execute(Request request); - - /** - * Generic Execute. Use this method to execute custom FOXX services. - * - * @param request request - * @param hostHandle Used to stick to a specific host when using {@link LoadBalancingStrategy#ROUND_ROBIN} - * @return VelocyStream response - */ - Response execute(Request request, HostHandle hostHandle); + Response execute(Request request, Class type); /** * Returns the server logs diff --git a/driver/src/main/java/com/arangodb/ArangoDatabase.java b/driver/src/main/java/com/arangodb/ArangoDatabase.java index 8224f27c0..1ef5e1de1 100644 --- a/driver/src/main/java/com/arangodb/ArangoDatabase.java +++ b/driver/src/main/java/com/arangodb/ArangoDatabase.java @@ -612,15 +612,6 @@ public interface ArangoDatabase extends ArangoSerdeAccessor { */ void reloadRouting(); - /** - * Returns a new {@link ArangoRoute} instance for the given path (relative to the database) that can be used to - * perform arbitrary requests. - * - * @param path The database-relative URL of the route - * @return {@link ArangoRoute} - */ - ArangoRoute route(String... path); - /** * Fetches all views from the database and returns an list of view descriptions. * diff --git a/driver/src/main/java/com/arangodb/ArangoRoute.java b/driver/src/main/java/com/arangodb/ArangoRoute.java deleted file mode 100644 index 4e4bab95b..000000000 --- a/driver/src/main/java/com/arangodb/ArangoRoute.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * DISCLAIMER - * - * Copyright 2018 ArangoDB GmbH, Cologne, Germany - * - * Licensed 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. - * - * Copyright holder is ArangoDB GmbH, Cologne, Germany - */ - -package com.arangodb; - -/** - * Interface for a specific path to be used to perform arbitrary requests. - * - * @author Mark Vollmary - */ -public interface ArangoRoute extends ArangoSerdeAccessor { - - /** - * Returns a new {@link ArangoRoute} instance for the given path (relative to the current route) that can be used to - * perform arbitrary requests. - * - * @param path The relative URL of the route - * @return {@link ArangoRoute} - */ - ArangoRoute route(String... path); - - /** - * Header that should be sent with each request to the route. - * - * @param key Header key - * @param value Header value (the {@code toString()} method will be called for the value} - * @return {@link ArangoRoute} - */ - ArangoRoute withHeader(String key, Object value); - - /** - * Query parameter that should be sent with each request to the route. - * - * @param key Query parameter key - * @param value Query parameter value (the {@code toString()} method will be called for the value} - * @return {@link ArangoRoute} - */ - ArangoRoute withQueryParam(String key, Object value); - - /** - * The response body. - * - * @param body The request body - * @return {@link ArangoRoute} - */ - ArangoRoute withBody(Object body); - - /** - * Performs a DELETE request to the given URL and returns the server response. - * - * @return server response - */ - Response delete(); - - /** - * Performs a GET request to the given URL and returns the server response. - * - * @return server response - */ - - Response get(); - - /** - * Performs a HEAD request to the given URL and returns the server response. - * - * @return server response - */ - - Response head(); - - /** - * Performs a PATCH request to the given URL and returns the server response. - * - * @return server response - */ - - Response patch(); - - /** - * Performs a POST request to the given URL and returns the server response. - * - * @return server response - */ - - Response post(); - - /** - * Performs a PUT request to the given URL and returns the server response. - * - * @return server response - */ - - Response put(); - -} diff --git a/driver/src/main/java/com/arangodb/Request.java b/driver/src/main/java/com/arangodb/Request.java index f3c8e9429..dbc708632 100644 --- a/driver/src/main/java/com/arangodb/Request.java +++ b/driver/src/main/java/com/arangodb/Request.java @@ -1,137 +1,130 @@ -/* - * DISCLAIMER - * - * Copyright 2016 ArangoDB GmbH, Cologne, Germany - * - * Licensed 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. - * - * Copyright holder is ArangoDB GmbH, Cologne, Germany - */ - package com.arangodb; -import java.util.Collections; import java.util.HashMap; -import java.util.Locale; import java.util.Map; -/** - * @author Mark Vollmary - */ -public class Request { - - private final DbName dbName; - private final RequestType requestType; +public final class Request { + private final DbName db; + private final Method method; private final String path; - private final Map queryParam; - private final Map headerParam; - private int version = 1; - private int type = 1; - private byte[] body; - - public Request(final DbName dbName, final RequestType requestType, final String path) { - super(); - this.dbName = dbName; - this.requestType = requestType; - this.path = path; - body = null; - queryParam = new HashMap<>(); - headerParam = new HashMap<>(); - } + private final Map queryParams; + private final Map headers; + private final T body; - public int getVersion() { - return version; + public enum Method { + DELETE, + GET, + POST, + PUT, + HEAD, + PATCH, + OPTIONS } - public Request setVersion(final int version) { - this.version = version; - return this; + public static Builder builder() { + return new Builder<>(); } - public int getType() { - return type; - } - - public Request setType(final int type) { - this.type = type; - return this; + private Request(DbName db, Method method, String path, Map queryParams, Map headers, T body) { + this.db = db; + this.method = method; + this.path = path; + this.queryParams = queryParams; + this.headers = headers; + this.body = body; } - public DbName getDbName() { - return dbName; + public DbName getDb() { + return db; } - public RequestType getRequestType() { - return requestType; + public Method getMethod() { + return method; } public String getPath() { return path; } - public Map getQueryParam() { - return queryParam; + public Map getQueryParams() { + return queryParams; } - public Request putQueryParam(final String key, final Object value) { - if (value != null) { - queryParam.put(key, value.toString()); - } - return this; + public Map getHeaders() { + return headers; } - public Map getHeaderParam() { - return Collections.unmodifiableMap(headerParam); + public T getBody() { + return body; } - public boolean containsHeaderParam(final String key) { - return headerParam.containsKey(key.toLowerCase(Locale.ROOT)); - } + public static final class Builder { + private DbName db; + private Request.Method method; + private String path; + private final Map queryParams; + private final Map headers; + private T body; - public Request putHeaderParam(final String key, final String value) { - if (value != null) { - headerParam.put(key.toLowerCase(Locale.ROOT), value); + public Builder() { + queryParams = new HashMap<>(); + headers = new HashMap<>(); + } + + public Builder db(DbName db) { + this.db = db; + return this; + } + + public Builder method(Request.Method method) { + this.method = method; + return this; + } + + public Builder path(String path) { + this.path = path; + return this; } - return this; - } - public Request putHeaderParams(final Map params) { - if (params != null) { - for (Map.Entry it : params.entrySet()) { - putHeaderParam(it.getKey(), it.getValue()); + public Builder queryParam(final String key, final String value) { + if (value != null) { + queryParams.put(key, value); } + return this; } - return this; - } - public byte[] getBody() { - return body; - } + public Builder queryParams(Map queryParams) { + if (queryParams != null) { + for (Map.Entry it : queryParams.entrySet()) { + queryParam(it.getKey(), it.getValue()); + } + } + return this; + } - public Request setBody(final byte[] body) { - this.body = body; - return this; - } + public Builder header(final String key, final String value) { + if (value != null) { + headers.put(key, value); + } + return this; + } - @Override - public String toString() { - return "{" + - "requestType=" + requestType + - ", database='" + dbName + '\'' + - ", url='" + path + '\'' + - ", parameters=" + queryParam + - ", headers=" + headerParam + - '}'; - } + public Builder headers(Map headers) { + if (headers != null) { + for (Map.Entry it : headers.entrySet()) { + header(it.getKey(), it.getValue()); + } + } + return this; + } + public Builder body(T body) { + this.body = body; + return this; + } + + public Request build() { + return new Request<>(db, method, path, queryParams, headers, body); + } + } } diff --git a/driver/src/main/java/com/arangodb/Response.java b/driver/src/main/java/com/arangodb/Response.java index a7fffa552..49c37698b 100644 --- a/driver/src/main/java/com/arangodb/Response.java +++ b/driver/src/main/java/com/arangodb/Response.java @@ -1,105 +1,27 @@ -/* - * DISCLAIMER - * - * Copyright 2016 ArangoDB GmbH, Cologne, Germany - * - * Licensed 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. - * - * Copyright holder is ArangoDB GmbH, Cologne, Germany - */ - package com.arangodb; -import java.util.Collections; -import java.util.HashMap; -import java.util.Locale; import java.util.Map; -/** - * @author Mark Vollmary - */ -public class Response { - - private int version = 1; - private int type = 2; - private int responseCode; - private final Map meta; - private byte[] body = null; - - public Response() { - super(); - meta = new HashMap<>(); - } - - public int getVersion() { - return version; - } - - public void setVersion(final int version) { - this.version = version; - } - - public int getType() { - return type; - } +public final class Response { + private final int responseCode; + private final Map headers; + private final T body; - public void setType(final int type) { - this.type = type; + public Response(int responseCode, Map headers, T body) { + this.responseCode = responseCode; + this.headers = headers; + this.body = body; } public int getResponseCode() { return responseCode; } - public void setResponseCode(final int responseCode) { - this.responseCode = responseCode; - } - - public Map getMeta() { - return Collections.unmodifiableMap(meta); - } - - public String getMeta(final String key) { - return meta.get(key.toLowerCase(Locale.ROOT)); - } - - public boolean containsMeta(final String key) { - return meta.containsKey(key.toLowerCase(Locale.ROOT)); - } - - public void putMeta(final String key, final String value) { - this.meta.put(key.toLowerCase(Locale.ROOT), value); + public Map getHeaders() { + return headers; } - public void putMetas(final Map meta) { - for (Map.Entry it : meta.entrySet()) { - putMeta(it.getKey(), it.getValue()); - } - } - - public byte[] getBody() { + public T getBody() { return body; } - - public void setBody(final byte[] body) { - this.body = body; - } - - @Override - public String toString() { - return "{" + - "statusCode=" + responseCode + - ", headers=" + meta + - '}'; - } } diff --git a/driver/src/main/java/com/arangodb/async/ArangoDBAsync.java b/driver/src/main/java/com/arangodb/async/ArangoDBAsync.java index 949dedd02..28e1701f3 100644 --- a/driver/src/main/java/com/arangodb/async/ArangoDBAsync.java +++ b/driver/src/main/java/com/arangodb/async/ArangoDBAsync.java @@ -257,12 +257,19 @@ public interface ArangoDBAsync extends ArangoSerdeAccessor { CompletableFuture grantDefaultCollectionAccess(final String user, final Permissions permissions); /** - * Generic Execute. Use this method to execute custom FOXX services. + * Execute custom requests. Requests can be programmatically built by setting low level detail such as method, path, + * query parameters, headers and body payload. + * This method can be used to call FOXX services, API endpoints not (yet) implemented in this driver or trigger + * async jobs, see + * Fire and Forget + * and + * Async Execution and later Result Retrieval * - * @param request VelocyStream request - * @return VelocyStream response + * @param request request + * @param type Deserialization target type for the response body (POJO or {@link com.arangodb.util.RawData}) + * @return response */ - CompletableFuture execute(final Request request); + CompletableFuture> execute(final Request request, final Class type); /** * Returns the server logs diff --git a/driver/src/main/java/com/arangodb/async/ArangoRouteAsync.java b/driver/src/main/java/com/arangodb/async/ArangoRouteAsync.java index ed66aff87..c2ab2d221 100644 --- a/driver/src/main/java/com/arangodb/async/ArangoRouteAsync.java +++ b/driver/src/main/java/com/arangodb/async/ArangoRouteAsync.java @@ -21,7 +21,7 @@ package com.arangodb.async; import com.arangodb.ArangoSerdeAccessor; -import com.arangodb.Response; +import com.arangodb.internal.InternalResponse; import java.util.concurrent.CompletableFuture; @@ -72,7 +72,7 @@ public interface ArangoRouteAsync extends ArangoSerdeAccessor { * * @return server response */ - CompletableFuture delete(); + CompletableFuture delete(); /** * Performs a GET request to the given URL and returns the server response. @@ -80,7 +80,7 @@ public interface ArangoRouteAsync extends ArangoSerdeAccessor { * @return server response */ - CompletableFuture get(); + CompletableFuture get(); /** * Performs a HEAD request to the given URL and returns the server response. @@ -88,7 +88,7 @@ public interface ArangoRouteAsync extends ArangoSerdeAccessor { * @return server response */ - CompletableFuture head(); + CompletableFuture head(); /** * Performs a PATCH request to the given URL and returns the server response. @@ -96,7 +96,7 @@ public interface ArangoRouteAsync extends ArangoSerdeAccessor { * @return server response */ - CompletableFuture patch(); + CompletableFuture patch(); /** * Performs a POST request to the given URL and returns the server response. @@ -104,7 +104,7 @@ public interface ArangoRouteAsync extends ArangoSerdeAccessor { * @return server response */ - CompletableFuture post(); + CompletableFuture post(); /** * Performs a PUT request to the given URL and returns the server response. @@ -112,6 +112,6 @@ public interface ArangoRouteAsync extends ArangoSerdeAccessor { * @return server response */ - CompletableFuture put(); + CompletableFuture put(); } diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java b/driver/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java index 5e52ffdf5..2ad1b2b0d 100644 --- a/driver/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java +++ b/driver/src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java @@ -22,6 +22,8 @@ import com.arangodb.ArangoMetrics; import com.arangodb.DbName; +import com.arangodb.Request; +import com.arangodb.Response; import com.arangodb.async.ArangoDBAsync; import com.arangodb.async.ArangoDatabaseAsync; import com.arangodb.async.internal.velocystream.VstCommunicationAsync; @@ -40,8 +42,7 @@ import com.arangodb.model.LogOptions; import com.arangodb.model.UserCreateOptions; import com.arangodb.model.UserUpdateOptions; -import com.arangodb.Request; -import com.arangodb.Response; +import com.arangodb.internal.InternalResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -75,7 +76,7 @@ public ArangoDBAsyncImpl( super(new ArangoExecutorAsync(asyncCommBuilder.build(util), util, new QueueTimeMetricsImpl(responseQueueTimeSamples), timeoutMs), util); - final VstCommunication cacheCom = syncCommBuilder.build(util); + final VstCommunication cacheCom = syncCommBuilder.build(util); cp = new VstProtocol(cacheCom); this.asyncHostHandler = asyncHostHandler; @@ -215,8 +216,8 @@ public CompletableFuture grantDefaultCollectionAccess(final String user, f } @Override - public CompletableFuture execute(final Request request) { - return executor.execute(request, response -> response); + public CompletableFuture> execute(Request request, Class type) { + return executor.execute(executeRequest(request), responseDeserializer(type)); } @Override diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java b/driver/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java index 180f2671c..b8ab7b0aa 100644 --- a/driver/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java +++ b/driver/src/main/java/com/arangodb/async/internal/ArangoDatabaseAsyncImpl.java @@ -35,7 +35,7 @@ import com.arangodb.model.arangosearch.AnalyzerDeleteOptions; import com.arangodb.model.arangosearch.ArangoSearchCreateOptions; import com.arangodb.model.arangosearch.SearchAliasCreateOptions; -import com.arangodb.Request; +import com.arangodb.internal.InternalRequest; import java.util.Collection; import java.util.Collections; @@ -179,7 +179,7 @@ public CompletableFuture> query( final Map bindVars, final AqlQueryOptions options, final Class type) { - final Request request = queryRequest(query, bindVars, options); + final InternalRequest request = queryRequest(query, bindVars, options); final HostHandle hostHandle = new HostHandle(); final CompletableFuture execution = executor.execute(request, InternalCursorEntity.class, hostHandle); diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoExecutorAsync.java b/driver/src/main/java/com/arangodb/async/internal/ArangoExecutorAsync.java index 1510cbf2a..831b64e40 100644 --- a/driver/src/main/java/com/arangodb/async/internal/ArangoExecutorAsync.java +++ b/driver/src/main/java/com/arangodb/async/internal/ArangoExecutorAsync.java @@ -26,7 +26,7 @@ import com.arangodb.internal.QueueTimeMetricsImpl; import com.arangodb.internal.net.HostHandle; import com.arangodb.internal.serde.InternalSerde; -import com.arangodb.Request; +import com.arangodb.internal.InternalRequest; import java.io.IOException; import java.lang.reflect.Type; @@ -49,20 +49,20 @@ public ArangoExecutorAsync(final VstCommunicationAsync communication, final Inte this.communication = communication; } - public CompletableFuture execute(final Request request, final Type type) { + public CompletableFuture execute(final InternalRequest request, final Type type) { return execute(request, response -> createResult(type, response)); } - public CompletableFuture execute(final Request request, final Type type, final HostHandle hostHandle) { + public CompletableFuture execute(final InternalRequest request, final Type type, final HostHandle hostHandle) { return execute(request, response -> createResult(type, response), hostHandle); } - public CompletableFuture execute(final Request request, final ResponseDeserializer responseDeserializer) { + public CompletableFuture execute(final InternalRequest request, final ResponseDeserializer responseDeserializer) { return execute(request, responseDeserializer, null); } private CompletableFuture execute( - final Request request, + final InternalRequest request, final ResponseDeserializer responseDeserializer, final HostHandle hostHandle) { diff --git a/driver/src/main/java/com/arangodb/async/internal/ArangoRouteAsyncImpl.java b/driver/src/main/java/com/arangodb/async/internal/ArangoRouteAsyncImpl.java index e00688dcc..57270220d 100644 --- a/driver/src/main/java/com/arangodb/async/internal/ArangoRouteAsyncImpl.java +++ b/driver/src/main/java/com/arangodb/async/internal/ArangoRouteAsyncImpl.java @@ -22,8 +22,8 @@ import com.arangodb.async.ArangoRouteAsync; import com.arangodb.internal.InternalArangoRoute; -import com.arangodb.RequestType; -import com.arangodb.Response; +import com.arangodb.internal.RequestType; +import com.arangodb.internal.InternalResponse; import java.util.Map; import java.util.concurrent.CompletableFuture; @@ -66,37 +66,37 @@ public ArangoRouteAsync withBody(final Object body) { return this; } - private CompletableFuture request(final RequestType requestType) { + private CompletableFuture request(final RequestType requestType) { return executor.execute(createRequest(requestType), response -> response); } @Override - public CompletableFuture delete() { + public CompletableFuture delete() { return request(RequestType.DELETE); } @Override - public CompletableFuture get() { + public CompletableFuture get() { return request(RequestType.GET); } @Override - public CompletableFuture head() { + public CompletableFuture head() { return request(RequestType.HEAD); } @Override - public CompletableFuture patch() { + public CompletableFuture patch() { return request(RequestType.PATCH); } @Override - public CompletableFuture post() { + public CompletableFuture post() { return request(RequestType.POST); } @Override - public CompletableFuture put() { + public CompletableFuture put() { return request(RequestType.PUT); } diff --git a/driver/src/main/java/com/arangodb/async/internal/velocystream/VstCommunicationAsync.java b/driver/src/main/java/com/arangodb/async/internal/velocystream/VstCommunicationAsync.java index e0eab0092..98edbc61b 100644 --- a/driver/src/main/java/com/arangodb/async/internal/velocystream/VstCommunicationAsync.java +++ b/driver/src/main/java/com/arangodb/async/internal/velocystream/VstCommunicationAsync.java @@ -33,8 +33,8 @@ import com.arangodb.internal.velocystream.internal.Message; import com.arangodb.velocypack.exception.VPackException; import com.arangodb.velocypack.exception.VPackParserException; -import com.arangodb.Request; -import com.arangodb.Response; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,7 +45,7 @@ /** * @author Mark Vollmary */ -public class VstCommunicationAsync extends VstCommunication, VstConnectionAsync> { +public class VstCommunicationAsync extends VstCommunication, VstConnectionAsync> { private static final Logger LOGGER = LoggerFactory.getLogger(VstCommunicationAsync.class); @@ -57,19 +57,19 @@ private VstCommunicationAsync(final HostHandler hostHandler, final Integer timeo } @Override - protected CompletableFuture execute(final Request request, final VstConnectionAsync connection) { + protected CompletableFuture execute(final InternalRequest request, final VstConnectionAsync connection) { return execute(request, connection, 0); } @Override - protected CompletableFuture execute(final Request request, final VstConnectionAsync connection, - final int attemptCount) { - final CompletableFuture rfuture = new CompletableFuture<>(); + protected CompletableFuture execute(final InternalRequest request, final VstConnectionAsync connection, + final int attemptCount) { + final CompletableFuture rfuture = new CompletableFuture<>(); try { final Message message = createMessage(request); send(message, connection).whenComplete((m, ex) -> { if (m != null) { - final Response response; + final InternalResponse response; try { response = createResponse(m); } catch (final VPackParserException e) { @@ -127,14 +127,14 @@ private CompletableFuture send(final Message message, final VstConnecti @Override protected void authenticate(final VstConnectionAsync connection) { - Request authRequest; + InternalRequest authRequest; if (jwt != null) { authRequest = new JwtAuthenticationRequest(jwt, ENCRYPTION_JWT); } else { authRequest = new AuthenticationRequest(user, password != null ? password : "", ENCRYPTION_PLAIN); } - Response response; + InternalResponse response; try { response = execute(authRequest, connection).get(); } catch (final InterruptedException e) { diff --git a/driver/src/main/java/com/arangodb/internal/ArangoDBImpl.java b/driver/src/main/java/com/arangodb/internal/ArangoDBImpl.java index 04d631369..22a0e95a1 100644 --- a/driver/src/main/java/com/arangodb/internal/ArangoDBImpl.java +++ b/driver/src/main/java/com/arangodb/internal/ArangoDBImpl.java @@ -25,7 +25,6 @@ import com.arangodb.internal.http.HttpCommunication; import com.arangodb.internal.http.HttpProtocol; import com.arangodb.internal.net.CommunicationProtocol; -import com.arangodb.internal.net.HostHandle; import com.arangodb.internal.net.HostHandler; import com.arangodb.internal.net.HostResolver; import com.arangodb.internal.serde.InternalSerde; @@ -36,8 +35,6 @@ import com.arangodb.model.LogOptions; import com.arangodb.model.UserCreateOptions; import com.arangodb.model.UserUpdateOptions; -import com.arangodb.Request; -import com.arangodb.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -214,13 +211,8 @@ public void grantDefaultCollectionAccess(final String user, final Permissions pe } @Override - public Response execute(final Request request) { - return executor.execute(request, response -> response); - } - - @Override - public Response execute(final Request request, final HostHandle hostHandle) { - return executor.execute(request, response -> response, hostHandle); + public Response execute(Request request, Class type) { + return executor.execute(executeRequest(request), responseDeserializer(type)); } @Override diff --git a/driver/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java b/driver/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java index c3ed750d9..e2c1eca2d 100644 --- a/driver/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java +++ b/driver/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java @@ -31,10 +31,8 @@ import com.arangodb.model.arangosearch.AnalyzerDeleteOptions; import com.arangodb.model.arangosearch.ArangoSearchCreateOptions; import com.arangodb.model.arangosearch.SearchAliasCreateOptions; -import com.arangodb.Request; import java.util.Collection; -import java.util.Collections; import java.util.Map; import static com.arangodb.internal.serde.SerdeUtils.constructListType; @@ -163,7 +161,7 @@ public ArangoCursor query( final String query, final Map bindVars, final AqlQueryOptions options, final Class type) { - final Request request = queryRequest(query, bindVars, options); + final InternalRequest request = queryRequest(query, bindVars, options); final HostHandle hostHandle = new HostHandle(); final InternalCursorEntity result = executor.execute(request, InternalCursorEntity.class, hostHandle); @@ -366,11 +364,6 @@ public void reloadRouting() { executor.execute(reloadRoutingRequest(), Void.class); } - @Override - public ArangoRoute route(final String... path) { - return new ArangoRouteImpl(this, String.join("/", path), Collections.emptyMap()); - } - @Override public Collection getViews() { return executor.execute(getViewsRequest(), getViewsResponseDeserializer()); diff --git a/driver/src/main/java/com/arangodb/internal/ArangoExecuteable.java b/driver/src/main/java/com/arangodb/internal/ArangoExecuteable.java index c1bb79eed..10fc7c87a 100644 --- a/driver/src/main/java/com/arangodb/internal/ArangoExecuteable.java +++ b/driver/src/main/java/com/arangodb/internal/ArangoExecuteable.java @@ -24,8 +24,6 @@ import com.arangodb.DbName; import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.util.EncodeUtils; -import com.arangodb.Request; -import com.arangodb.RequestType; /** * @author Mark Vollmary @@ -69,8 +67,8 @@ public InternalSerde getSerde() { return serde; } - protected Request request(final DbName dbName, final RequestType requestType, final String... path) { - return new Request(dbName, requestType, createPath(path)); + protected InternalRequest request(final DbName dbName, final RequestType requestType, final String... path) { + return new InternalRequest(dbName, requestType, createPath(path)); } } diff --git a/driver/src/main/java/com/arangodb/internal/ArangoExecutor.java b/driver/src/main/java/com/arangodb/internal/ArangoExecutor.java index 359a0f952..ad9e0acda 100644 --- a/driver/src/main/java/com/arangodb/internal/ArangoExecutor.java +++ b/driver/src/main/java/com/arangodb/internal/ArangoExecutor.java @@ -22,8 +22,6 @@ import com.arangodb.QueueTimeMetrics; import com.arangodb.internal.serde.InternalSerde; -import com.arangodb.Request; -import com.arangodb.Response; import java.lang.reflect.Type; @@ -43,18 +41,18 @@ protected ArangoExecutor(final InternalSerde serde, final QueueTimeMetricsImpl q timeoutS = timeoutMs >= 1000 ? Integer.toString(timeoutMs / 1000) : null; } - protected T createResult(final Type type, final Response response) { + protected T createResult(final Type type, final InternalResponse response) { return serde.deserialize(response.getBody(), type); } - protected final void interceptResponse(Response response) { + protected final void interceptResponse(InternalResponse response) { String queueTime = response.getMeta("X-Arango-Queue-Time-Seconds"); if (queueTime != null) { qtMetrics.add(Double.parseDouble(queueTime)); } } - protected final Request interceptRequest(Request request) { + protected final InternalRequest interceptRequest(InternalRequest request) { request.putHeaderParam("x-arango-queue-time-seconds", timeoutS); return request; } @@ -64,6 +62,6 @@ public QueueTimeMetrics getQueueTimeMetrics() { } public interface ResponseDeserializer { - T deserialize(Response response); + T deserialize(InternalResponse response); } } diff --git a/driver/src/main/java/com/arangodb/internal/ArangoExecutorSync.java b/driver/src/main/java/com/arangodb/internal/ArangoExecutorSync.java index 8588c26b0..88b2f6f0f 100644 --- a/driver/src/main/java/com/arangodb/internal/ArangoExecutorSync.java +++ b/driver/src/main/java/com/arangodb/internal/ArangoExecutorSync.java @@ -25,8 +25,6 @@ import com.arangodb.internal.net.CommunicationProtocol; import com.arangodb.internal.net.HostHandle; import com.arangodb.internal.serde.InternalSerde; -import com.arangodb.Request; -import com.arangodb.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,24 +46,24 @@ public ArangoExecutorSync(final CommunicationProtocol protocol, final InternalSe this.protocol = protocol; } - public T execute(final Request request, final Type type) { + public T execute(final InternalRequest request, final Type type) { return execute(request, type, null); } - public T execute(final Request request, final Type type, final HostHandle hostHandle) { + public T execute(final InternalRequest request, final Type type, final HostHandle hostHandle) { return execute(request, response -> createResult(type, response), hostHandle); } - public T execute(final Request request, final ResponseDeserializer responseDeserializer) { + public T execute(final InternalRequest request, final ResponseDeserializer responseDeserializer) { return execute(request, responseDeserializer, null); } public T execute( - final Request request, + final InternalRequest request, final ResponseDeserializer responseDeserializer, final HostHandle hostHandle) { - final Response response = protocol.execute(interceptRequest(request), hostHandle); + final InternalResponse response = protocol.execute(interceptRequest(request), hostHandle); interceptResponse(response); T deserialize = responseDeserializer.deserialize(response); diff --git a/driver/src/main/java/com/arangodb/internal/ArangoRouteImpl.java b/driver/src/main/java/com/arangodb/internal/ArangoRouteImpl.java deleted file mode 100644 index b73753ddc..000000000 --- a/driver/src/main/java/com/arangodb/internal/ArangoRouteImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * DISCLAIMER - * - * Copyright 2018 ArangoDB GmbH, Cologne, Germany - * - * Licensed 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. - * - * Copyright holder is ArangoDB GmbH, Cologne, Germany - */ - -package com.arangodb.internal; - -import com.arangodb.ArangoRoute; -import com.arangodb.RequestType; -import com.arangodb.Response; - -import java.util.Map; - -/** - * @author Mark Vollmary - */ -public class ArangoRouteImpl extends InternalArangoRoute - implements ArangoRoute { - - protected ArangoRouteImpl(final ArangoDatabaseImpl db, final String path, final Map headerParam) { - super(db, path, headerParam); - } - - @Override - public ArangoRoute route(final String... path) { - final String[] fullPath = new String[path.length + 1]; - fullPath[0] = this.path; - System.arraycopy(path, 0, fullPath, 1, path.length); - return new ArangoRouteImpl(db, String.join("/", fullPath), headerParam); - } - - @Override - public ArangoRoute withHeader(final String key, final Object value) { - _withHeader(key, value); - return this; - } - - @Override - public ArangoRoute withQueryParam(final String key, final Object value) { - _withQueryParam(key, value); - return this; - } - - @Override - public ArangoRoute withBody(final Object body) { - _withBody(body); - return this; - } - - private Response request(final RequestType requestType) { - return executor.execute(createRequest(requestType), response -> response); - } - - @Override - public Response delete() { - return request(RequestType.DELETE); - } - - @Override - public Response get() { - return request(RequestType.GET); - } - - @Override - public Response head() { - return request(RequestType.HEAD); - } - - @Override - public Response patch() { - return request(RequestType.PATCH); - } - - @Override - public Response post() { - return request(RequestType.POST); - } - - @Override - public Response put() { - return request(RequestType.PUT); - } - -} diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoCollection.java b/driver/src/main/java/com/arangodb/internal/InternalArangoCollection.java index 2b8e625c0..90389ed3b 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoCollection.java +++ b/driver/src/main/java/com/arangodb/internal/InternalArangoCollection.java @@ -28,8 +28,6 @@ import com.arangodb.internal.util.RequestUtils; import com.arangodb.model.*; import com.arangodb.util.RawData; -import com.arangodb.Request; -import com.arangodb.RequestType; import com.fasterxml.jackson.databind.JsonNode; import java.lang.reflect.Type; @@ -80,27 +78,27 @@ public String name() { return name; } - protected Request insertDocumentRequest(final T value, final DocumentCreateOptions options) { - final Request request = createInsertDocumentRequest(options); + protected InternalRequest insertDocumentRequest(final T value, final DocumentCreateOptions options) { + final InternalRequest request = createInsertDocumentRequest(options); request.setBody(getSerde().serializeUserData(value)); return request; } - protected Request insertDocumentsRequest(final RawData values, final DocumentCreateOptions options) { - Request request = createInsertDocumentRequest(options); + protected InternalRequest insertDocumentsRequest(final RawData values, final DocumentCreateOptions options) { + InternalRequest request = createInsertDocumentRequest(options); request.setBody(getSerde().serialize(values)); return request; } - protected Request insertDocumentsRequest(final Collection values, final DocumentCreateOptions options) { - Request request = createInsertDocumentRequest(options); + protected InternalRequest insertDocumentsRequest(final Collection values, final DocumentCreateOptions options) { + InternalRequest request = createInsertDocumentRequest(options); request.setBody(getSerde().serializeCollectionUserData(values)); return request; } - private Request createInsertDocumentRequest(final DocumentCreateOptions options) { + private InternalRequest createInsertDocumentRequest(final DocumentCreateOptions options) { final DocumentCreateOptions params = (options != null ? options : new DocumentCreateOptions()); - final Request request = request(db.dbName(), RequestType.POST, PATH_API_DOCUMENT, name); + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_DOCUMENT, name); request.putQueryParam(ArangoRequestParam.WAIT_FOR_SYNC, params.getWaitForSync()); request.putQueryParam(RETURN_NEW, params.getReturnNew()); request.putQueryParam(RETURN_OLD, params.getReturnOld()); @@ -140,16 +138,16 @@ protected ResponseDeserializer>> }; } - protected Request importDocumentsRequest(final RawData values, final DocumentImportOptions options) { + protected InternalRequest importDocumentsRequest(final RawData values, final DocumentImportOptions options) { return importDocumentsRequest(options).putQueryParam("type", ImportType.auto).setBody(getSerde().serialize(values)); } - protected Request importDocumentsRequest(final Collection values, final DocumentImportOptions options) { + protected InternalRequest importDocumentsRequest(final Collection values, final DocumentImportOptions options) { return importDocumentsRequest(options).putQueryParam("type", ImportType.list) .setBody(getSerde().serializeCollectionUserData(values)); } - protected Request importDocumentsRequest(final DocumentImportOptions options) { + protected InternalRequest importDocumentsRequest(final DocumentImportOptions options) { final DocumentImportOptions params = options != null ? options : new DocumentImportOptions(); return request(db.dbName(), RequestType.POST, PATH_API_IMPORT).putQueryParam(COLLECTION, name) .putQueryParam(ArangoRequestParam.WAIT_FOR_SYNC, params.getWaitForSync()) @@ -158,8 +156,8 @@ protected Request importDocumentsRequest(final DocumentImportOptions options) { .putQueryParam("complete", params.getComplete()).putQueryParam("details", params.getDetails()); } - protected Request getDocumentRequest(final String key, final DocumentReadOptions options) { - final Request request = request(db.dbName(), RequestType.GET, PATH_API_DOCUMENT, + protected InternalRequest getDocumentRequest(final String key, final DocumentReadOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.GET, PATH_API_DOCUMENT, DocumentUtil.createDocumentHandle(name, key)); final DocumentReadOptions params = (options != null ? options : new DocumentReadOptions()); request.putHeaderParam(ArangoRequestParam.IF_NONE_MATCH, params.getIfNoneMatch()); @@ -175,9 +173,9 @@ protected ResponseDeserializer getDocumentResponseDeserializer(final Clas return response -> getSerde().deserializeUserData(response.getBody(), type); } - protected Request getDocumentsRequest(final Collection keys, final DocumentReadOptions options) { + protected InternalRequest getDocumentsRequest(final Collection keys, final DocumentReadOptions options) { final DocumentReadOptions params = (options != null ? options : new DocumentReadOptions()); - final Request request = request(db.dbName(), RequestType.PUT, PATH_API_DOCUMENT, name) + final InternalRequest request = request(db.dbName(), RequestType.PUT, PATH_API_DOCUMENT, name) .putQueryParam("onlyget", true) .putHeaderParam(ArangoRequestParam.IF_NONE_MATCH, params.getIfNoneMatch()) .putHeaderParam(ArangoRequestParam.IF_MATCH, params.getIfMatch()).setBody(getSerde().serialize(keys)) @@ -217,28 +215,28 @@ protected ResponseDeserializer> getDocumentsResponseD }; } - protected Request replaceDocumentRequest( + protected InternalRequest replaceDocumentRequest( final String key, final T value, final DocumentReplaceOptions options) { - final Request request = createReplaceDocumentRequest(options, DocumentUtil.createDocumentHandle(name, key)); + final InternalRequest request = createReplaceDocumentRequest(options, DocumentUtil.createDocumentHandle(name, key)); request.setBody(getSerde().serializeUserData(value)); return request; } - protected Request replaceDocumentsRequest(final Collection values, final DocumentReplaceOptions options) { - final Request request = createReplaceDocumentRequest(options, name); + protected InternalRequest replaceDocumentsRequest(final Collection values, final DocumentReplaceOptions options) { + final InternalRequest request = createReplaceDocumentRequest(options, name); request.setBody(getSerde().serializeCollectionUserData(values)); return request; } - protected Request replaceDocumentsRequest(final RawData values, final DocumentReplaceOptions options) { - final Request request = createReplaceDocumentRequest(options, name); + protected InternalRequest replaceDocumentsRequest(final RawData values, final DocumentReplaceOptions options) { + final InternalRequest request = createReplaceDocumentRequest(options, name); request.setBody(getSerde().serialize(values)); return request; } - private Request createReplaceDocumentRequest(final DocumentReplaceOptions options, String path) { + private InternalRequest createReplaceDocumentRequest(final DocumentReplaceOptions options, String path) { final DocumentReplaceOptions params = (options != null ? options : new DocumentReplaceOptions()); - final Request request = request(db.dbName(), RequestType.PUT, PATH_API_DOCUMENT, path); + final InternalRequest request = request(db.dbName(), RequestType.PUT, PATH_API_DOCUMENT, path); request.putHeaderParam(ArangoRequestParam.IF_MATCH, params.getIfMatch()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); request.putQueryParam(ArangoRequestParam.WAIT_FOR_SYNC, params.getWaitForSync()); @@ -277,27 +275,27 @@ protected ResponseDeserializer>> }; } - protected Request updateDocumentRequest(final String key, final T value, final DocumentUpdateOptions options) { - final Request request = createUpdateDocumentRequest(options, DocumentUtil.createDocumentHandle(name, key)); + protected InternalRequest updateDocumentRequest(final String key, final T value, final DocumentUpdateOptions options) { + final InternalRequest request = createUpdateDocumentRequest(options, DocumentUtil.createDocumentHandle(name, key)); request.setBody(getSerde().serializeUserData(value)); return request; } - protected Request updateDocumentsRequest(final Collection values, final DocumentUpdateOptions options) { - final Request request = createUpdateDocumentRequest(options, name); + protected InternalRequest updateDocumentsRequest(final Collection values, final DocumentUpdateOptions options) { + final InternalRequest request = createUpdateDocumentRequest(options, name); request.setBody(getSerde().serializeCollectionUserData(values)); return request; } - protected Request updateDocumentsRequest(final RawData values, final DocumentUpdateOptions options) { - final Request request = createUpdateDocumentRequest(options, name); + protected InternalRequest updateDocumentsRequest(final RawData values, final DocumentUpdateOptions options) { + final InternalRequest request = createUpdateDocumentRequest(options, name); request.setBody(getSerde().serialize(values)); return request; } - private Request createUpdateDocumentRequest(final DocumentUpdateOptions options, String path) { + private InternalRequest createUpdateDocumentRequest(final DocumentUpdateOptions options, String path) { final DocumentUpdateOptions params = (options != null ? options : new DocumentUpdateOptions()); - final Request request = request(db.dbName(), RequestType.PATCH, PATH_API_DOCUMENT, path); + final InternalRequest request = request(db.dbName(), RequestType.PATCH, PATH_API_DOCUMENT, path); request.putHeaderParam(ArangoRequestParam.IF_MATCH, params.getIfMatch()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); request.putQueryParam(ArangoRequestParam.KEEP_NULL, params.getKeepNull()); @@ -338,25 +336,25 @@ protected ResponseDeserializer>> }; } - protected Request deleteDocumentRequest(final String key, final DocumentDeleteOptions options) { + protected InternalRequest deleteDocumentRequest(final String key, final DocumentDeleteOptions options) { return createDeleteDocumentRequest(options, DocumentUtil.createDocumentHandle(name, key)); } - protected Request deleteDocumentsRequest(final Collection docs, final DocumentDeleteOptions options) { - final Request request = createDeleteDocumentRequest(options, name); + protected InternalRequest deleteDocumentsRequest(final Collection docs, final DocumentDeleteOptions options) { + final InternalRequest request = createDeleteDocumentRequest(options, name); request.setBody(getSerde().serializeCollectionUserData(docs)); return request; } - protected Request deleteDocumentsRequest(final RawData docs, final DocumentDeleteOptions options) { - final Request request = createDeleteDocumentRequest(options, name); + protected InternalRequest deleteDocumentsRequest(final RawData docs, final DocumentDeleteOptions options) { + final InternalRequest request = createDeleteDocumentRequest(options, name); request.setBody(getSerde().serialize(docs)); return request; } - private Request createDeleteDocumentRequest(final DocumentDeleteOptions options, String path) { + private InternalRequest createDeleteDocumentRequest(final DocumentDeleteOptions options, String path) { final DocumentDeleteOptions params = (options != null ? options : new DocumentDeleteOptions()); - final Request request = request(db.dbName(), RequestType.DELETE, PATH_API_DOCUMENT, path); + final InternalRequest request = request(db.dbName(), RequestType.DELETE, PATH_API_DOCUMENT, path); request.putHeaderParam(ArangoRequestParam.IF_MATCH, params.getIfMatch()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); request.putQueryParam(ArangoRequestParam.WAIT_FOR_SYNC, params.getWaitForSync()); @@ -393,8 +391,8 @@ protected ResponseDeserializer>> }; } - protected Request documentExistsRequest(final String key, final DocumentExistsOptions options) { - final Request request = request(db.dbName(), RequestType.HEAD, PATH_API_DOCUMENT, + protected InternalRequest documentExistsRequest(final String key, final DocumentExistsOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.HEAD, PATH_API_DOCUMENT, DocumentUtil.createDocumentHandle(name, key)); final DocumentExistsOptions params = (options != null ? options : new DocumentExistsOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -403,11 +401,11 @@ protected Request documentExistsRequest(final String key, final DocumentExistsOp return request; } - protected Request getIndexRequest(final String id) { + protected InternalRequest getIndexRequest(final String id) { return request(db.dbName(), RequestType.GET, PATH_API_INDEX, createIndexId(id)); } - protected Request deleteIndexRequest(final String id) { + protected InternalRequest deleteIndexRequest(final String id) { return request(db.dbName(), RequestType.DELETE, PATH_API_INDEX, createIndexId(id)); } @@ -428,8 +426,8 @@ private String createIndexId(final String id) { } @Deprecated - protected Request createHashIndexRequest(final Iterable fields, final HashIndexOptions options) { - final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); + protected InternalRequest createHashIndexRequest(final Iterable fields, final HashIndexOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody( getSerde().serialize(OptionsBuilder.build(options != null ? options : new HashIndexOptions(), fields))); @@ -437,8 +435,8 @@ protected Request createHashIndexRequest(final Iterable fields, final Ha } @Deprecated - protected Request createSkiplistIndexRequest(final Iterable fields, final SkiplistIndexOptions options) { - final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); + protected InternalRequest createSkiplistIndexRequest(final Iterable fields, final SkiplistIndexOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody( getSerde().serialize(OptionsBuilder.build(options != null ? options : new SkiplistIndexOptions(), @@ -446,24 +444,24 @@ protected Request createSkiplistIndexRequest(final Iterable fields, fina return request; } - protected Request createPersistentIndexRequest( + protected InternalRequest createPersistentIndexRequest( final Iterable fields, final PersistentIndexOptions options) { - final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody(getSerde().serialize( OptionsBuilder.build(options != null ? options : new PersistentIndexOptions(), fields))); return request; } - protected Request createInvertedIndexRequest(final InvertedIndexOptions options) { - final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); + protected InternalRequest createInvertedIndexRequest(final InvertedIndexOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody(getSerde().serialize(options)); return request; } - protected Request createGeoIndexRequest(final Iterable fields, final GeoIndexOptions options) { - final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); + protected InternalRequest createGeoIndexRequest(final Iterable fields, final GeoIndexOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody( getSerde().serialize(OptionsBuilder.build(options != null ? options : new GeoIndexOptions(), fields))); @@ -471,8 +469,8 @@ protected Request createGeoIndexRequest(final Iterable fields, final Geo } @Deprecated - protected Request createFulltextIndexRequest(final Iterable fields, final FulltextIndexOptions options) { - final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); + protected InternalRequest createFulltextIndexRequest(final Iterable fields, final FulltextIndexOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody( getSerde().serialize(OptionsBuilder.build(options != null ? options : new FulltextIndexOptions(), @@ -480,25 +478,25 @@ protected Request createFulltextIndexRequest(final Iterable fields, fina return request; } - protected Request createTtlIndexRequest(final Iterable fields, final TtlIndexOptions options) { - final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); + protected InternalRequest createTtlIndexRequest(final Iterable fields, final TtlIndexOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody( getSerde().serialize(OptionsBuilder.build(options != null ? options : new TtlIndexOptions(), fields))); return request; } - protected Request createZKDIndexRequest( + protected InternalRequest createZKDIndexRequest( final Iterable fields, final ZKDIndexOptions options) { - final Request request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); request.setBody(getSerde().serialize(OptionsBuilder.build(options != null ? options : new ZKDIndexOptions().fieldValueTypes(ZKDIndexOptions.FieldValueTypes.DOUBLE), fields))); return request; } - protected Request getIndexesRequest() { - final Request request = request(db.dbName(), RequestType.GET, PATH_API_INDEX); + protected InternalRequest getIndexesRequest() { + final InternalRequest request = request(db.dbName(), RequestType.GET, PATH_API_INDEX); request.putQueryParam(COLLECTION, name); return request; } @@ -527,66 +525,66 @@ protected ResponseDeserializer> getInvertedIndex }; } - protected Request truncateRequest(final CollectionTruncateOptions options) { - final Request request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "truncate"); + protected InternalRequest truncateRequest(final CollectionTruncateOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "truncate"); final CollectionTruncateOptions params = (options != null ? options : new CollectionTruncateOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); return request; } - protected Request countRequest(final CollectionCountOptions options) { - final Request request = request(db.dbName(), RequestType.GET, PATH_API_COLLECTION, name, "count"); + protected InternalRequest countRequest(final CollectionCountOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.GET, PATH_API_COLLECTION, name, "count"); final CollectionCountOptions params = (options != null ? options : new CollectionCountOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); return request; } - protected Request dropRequest(final Boolean isSystem) { + protected InternalRequest dropRequest(final Boolean isSystem) { return request(db.dbName(), RequestType.DELETE, PATH_API_COLLECTION, name).putQueryParam("isSystem", isSystem); } - protected Request getInfoRequest() { + protected InternalRequest getInfoRequest() { return request(db.dbName(), RequestType.GET, PATH_API_COLLECTION, name); } - protected Request getPropertiesRequest() { + protected InternalRequest getPropertiesRequest() { return request(db.dbName(), RequestType.GET, PATH_API_COLLECTION, name, "properties"); } - protected Request changePropertiesRequest(final CollectionPropertiesOptions options) { - final Request request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "properties"); + protected InternalRequest changePropertiesRequest(final CollectionPropertiesOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "properties"); request.setBody(getSerde().serialize(options != null ? options : new CollectionPropertiesOptions())); return request; } - protected Request renameRequest(final String newName) { - final Request request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "rename"); + protected InternalRequest renameRequest(final String newName) { + final InternalRequest request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "rename"); request.setBody(getSerde().serialize(OptionsBuilder.build(new CollectionRenameOptions(), newName))); return request; } - protected Request responsibleShardRequest(final T value) { - final Request request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "responsibleShard"); + protected InternalRequest responsibleShardRequest(final T value) { + final InternalRequest request = request(db.dbName(), RequestType.PUT, PATH_API_COLLECTION, name, "responsibleShard"); request.setBody(getSerde().serializeUserData(value)); return request; } - protected Request getRevisionRequest() { + protected InternalRequest getRevisionRequest() { return request(db.dbName(), RequestType.GET, PATH_API_COLLECTION, name, "revision"); } - protected Request grantAccessRequest(final String user, final Permissions permissions) { + protected InternalRequest grantAccessRequest(final String user, final Permissions permissions) { return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, db.dbName().get(), name).setBody(getSerde().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } - protected Request resetAccessRequest(final String user) { + protected InternalRequest resetAccessRequest(final String user) { return request(DbName.SYSTEM, RequestType.DELETE, PATH_API_USER, user, ArangoRequestParam.DATABASE, db.dbName().get(), name); } - protected Request getPermissionsRequest(final String user) { + protected InternalRequest getPermissionsRequest(final String user) { return request(DbName.SYSTEM, RequestType.GET, PATH_API_USER, user, ArangoRequestParam.DATABASE, db.dbName().get(), name); } diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoDB.java b/driver/src/main/java/com/arangodb/internal/InternalArangoDB.java index 25376bade..1243fd53e 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoDB.java +++ b/driver/src/main/java/com/arangodb/internal/InternalArangoDB.java @@ -21,6 +21,8 @@ package com.arangodb.internal; import com.arangodb.DbName; +import com.arangodb.Request; +import com.arangodb.Response; import com.arangodb.entity.LogLevelEntity; import com.arangodb.entity.Permissions; import com.arangodb.entity.ServerRole; @@ -28,8 +30,6 @@ import com.arangodb.internal.ArangoExecutor.ResponseDeserializer; import com.arangodb.internal.serde.InternalSerde; import com.arangodb.model.*; -import com.arangodb.Request; -import com.arangodb.RequestType; import java.util.ArrayList; import java.util.Collection; @@ -53,11 +53,11 @@ protected InternalArangoDB(final E executor, final InternalSerde util) { super(executor, util); } - protected Request getRoleRequest() { + protected InternalRequest getRoleRequest() { return request(DbName.SYSTEM, RequestType.GET, PATH_API_ROLE); } - protected Request getServerIdRequest() { + protected InternalRequest getServerIdRequest() { return request(DbName.SYSTEM, RequestType.GET, PATH_API_SERVER_ID); } @@ -69,8 +69,8 @@ protected ResponseDeserializer getServerIdResponseDeserializer() { return response -> getSerde().deserialize(response.getBody(), "/id", String.class); } - protected Request createDatabaseRequest(final DBCreateOptions options) { - final Request request = request(DbName.SYSTEM, RequestType.POST, + protected InternalRequest createDatabaseRequest(final DBCreateOptions options) { + final InternalRequest request = request(DbName.SYSTEM, RequestType.POST, InternalArangoDatabase.PATH_API_DATABASE); request.setBody(getSerde().serialize(options)); return request; @@ -81,7 +81,7 @@ protected ResponseDeserializer createDatabaseResponseDeserializer() { Boolean.class); } - protected Request getDatabasesRequest(final DbName dbName) { + protected InternalRequest getDatabasesRequest(final DbName dbName) { return request(dbName, RequestType.GET, InternalArangoDatabase.PATH_API_DATABASE); } @@ -90,7 +90,7 @@ protected ResponseDeserializer> getDatabaseResponseDeserializ constructListType(String.class)); } - protected Request getAccessibleDatabasesForRequest(final DbName dbName, final String user) { + protected InternalRequest getAccessibleDatabasesForRequest(final DbName dbName, final String user) { return request(dbName, RequestType.GET, PATH_API_USER, user, ArangoRequestParam.DATABASE); } @@ -106,12 +106,12 @@ protected ResponseDeserializer> getAccessibleDatabasesForResp }; } - protected Request createUserRequest( + protected InternalRequest createUserRequest( final DbName dbName, final String user, final String passwd, final UserCreateOptions options) { - final Request request; + final InternalRequest request; request = request(dbName, RequestType.POST, PATH_API_USER); request.setBody( getSerde().serialize(OptionsBuilder.build(options != null ? options : new UserCreateOptions(), user, @@ -119,15 +119,15 @@ protected Request createUserRequest( return request; } - protected Request deleteUserRequest(final DbName dbName, final String user) { + protected InternalRequest deleteUserRequest(final DbName dbName, final String user) { return request(dbName, RequestType.DELETE, PATH_API_USER, user); } - protected Request getUsersRequest(final DbName dbName) { + protected InternalRequest getUsersRequest(final DbName dbName) { return request(dbName, RequestType.GET, PATH_API_USER); } - protected Request getUserRequest(final DbName dbName, final String user) { + protected InternalRequest getUserRequest(final DbName dbName, final String user) { return request(dbName, RequestType.GET, PATH_API_USER, user); } @@ -136,31 +136,47 @@ protected ResponseDeserializer> getUsersResponseDeseriali constructListType(UserEntity.class)); } - protected Request updateUserRequest(final DbName dbName, final String user, final UserUpdateOptions options) { - final Request request; + protected InternalRequest updateUserRequest(final DbName dbName, final String user, final UserUpdateOptions options) { + final InternalRequest request; request = request(dbName, RequestType.PATCH, PATH_API_USER, user); request.setBody(getSerde().serialize(options != null ? options : new UserUpdateOptions())); return request; } - protected Request replaceUserRequest(final DbName dbName, final String user, final UserUpdateOptions options) { - final Request request; + protected InternalRequest replaceUserRequest(final DbName dbName, final String user, final UserUpdateOptions options) { + final InternalRequest request; request = request(dbName, RequestType.PUT, PATH_API_USER, user); request.setBody(getSerde().serialize(options != null ? options : new UserUpdateOptions())); return request; } - protected Request updateUserDefaultDatabaseAccessRequest(final String user, final Permissions permissions) { + protected InternalRequest updateUserDefaultDatabaseAccessRequest(final String user, final Permissions permissions) { return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, "*").setBody(getSerde().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } - protected Request updateUserDefaultCollectionAccessRequest(final String user, final Permissions permissions) { + protected InternalRequest updateUserDefaultCollectionAccessRequest(final String user, final Permissions permissions) { return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, "*", "*").setBody(getSerde().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } - protected Request getLogEntriesRequest(final LogOptions options) { + protected InternalRequest executeRequest(final Request request) { + InternalRequest ireq = new InternalRequest(request.getDb(), RequestType.from(request.getMethod()), request.getPath()); + ireq.putHeaderParams(request.getHeaders()); + ireq.putQueryParams(request.getQueryParams()); + ireq.setBody(serde.serializeUserData(request.getBody())); + return ireq; + } + + protected ResponseDeserializer> responseDeserializer(Class type) { + return response -> new Response<>( + response.getResponseCode(), + response.getMeta(), + serde.deserializeUserData(response.getBody(), type) + ); + } + + protected InternalRequest getLogEntriesRequest(final LogOptions options) { final LogOptions params = options != null ? options : new LogOptions(); return request(DbName.SYSTEM, RequestType.GET, PATH_API_ADMIN_LOG_ENTRIES) .putQueryParam(LogOptions.PROPERTY_UPTO, params.getUpto()) @@ -172,16 +188,16 @@ protected Request getLogEntriesRequest(final LogOptions options) { .putQueryParam(LogOptions.PROPERTY_SORT, params.getSort()); } - protected Request getLogLevelRequest() { + protected InternalRequest getLogLevelRequest() { return request(DbName.SYSTEM, RequestType.GET, PATH_API_ADMIN_LOG_LEVEL); } - protected Request setLogLevelRequest(final LogLevelEntity entity) { + protected InternalRequest setLogLevelRequest(final LogLevelEntity entity) { return request(DbName.SYSTEM, RequestType.PUT, PATH_API_ADMIN_LOG_LEVEL) .setBody(getSerde().serialize(entity)); } - protected Request getQueryOptimizerRulesRequest() { + protected InternalRequest getQueryOptimizerRulesRequest() { return request(DbName.SYSTEM, RequestType.GET, PATH_API_QUERY_RULES); } diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoDatabase.java b/driver/src/main/java/com/arangodb/internal/InternalArangoDatabase.java index 8841570ef..fcde6ad9b 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoDatabase.java +++ b/driver/src/main/java/com/arangodb/internal/InternalArangoDatabase.java @@ -27,8 +27,6 @@ import com.arangodb.internal.util.RequestUtils; import com.arangodb.model.*; import com.arangodb.model.arangosearch.*; -import com.arangodb.Request; -import com.arangodb.RequestType; import java.util.Collection; import java.util.Map; @@ -81,19 +79,19 @@ protected ResponseDeserializer> getDatabaseResponseDeserializ return arango.getDatabaseResponseDeserializer(); } - protected Request getAccessibleDatabasesRequest() { + protected InternalRequest getAccessibleDatabasesRequest() { return request(dbName, RequestType.GET, PATH_API_DATABASE, "user"); } - protected Request getVersionRequest() { + protected InternalRequest getVersionRequest() { return request(dbName, RequestType.GET, PATH_API_VERSION); } - protected Request getEngineRequest() { + protected InternalRequest getEngineRequest() { return request(dbName, RequestType.GET, PATH_API_ENGINE); } - protected Request createCollectionRequest(final String name, final CollectionCreateOptions options) { + protected InternalRequest createCollectionRequest(final String name, final CollectionCreateOptions options) { byte[] body = getSerde().serialize(OptionsBuilder.build(options != null ? options : new CollectionCreateOptions(), name)); @@ -101,8 +99,8 @@ protected Request createCollectionRequest(final String name, final CollectionCre return request(dbName, RequestType.POST, InternalArangoCollection.PATH_API_COLLECTION).setBody(body); } - protected Request getCollectionsRequest(final CollectionsReadOptions options) { - final Request request; + protected InternalRequest getCollectionsRequest(final CollectionsReadOptions options) { + final InternalRequest request; request = request(dbName, RequestType.GET, InternalArangoCollection.PATH_API_COLLECTION); final CollectionsReadOptions params = (options != null ? options : new CollectionsReadOptions()); request.putQueryParam("excludeSystem", params.getExcludeSystem()); @@ -114,7 +112,7 @@ protected ResponseDeserializer> getCollectionsRespo constructListType(CollectionEntity.class)); } - protected Request dropRequest() { + protected InternalRequest dropRequest() { return request(DbName.SYSTEM, RequestType.DELETE, PATH_API_DATABASE, dbName.get()); } @@ -123,22 +121,22 @@ protected ResponseDeserializer createDropResponseDeserializer() { Boolean.class); } - protected Request grantAccessRequest(final String user, final Permissions permissions) { + protected InternalRequest grantAccessRequest(final String user, final Permissions permissions) { return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, dbName.get()).setBody(getSerde().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } - protected Request resetAccessRequest(final String user) { + protected InternalRequest resetAccessRequest(final String user) { return request(DbName.SYSTEM, RequestType.DELETE, PATH_API_USER, user, ArangoRequestParam.DATABASE, dbName.get()); } - protected Request updateUserDefaultCollectionAccessRequest(final String user, final Permissions permissions) { + protected InternalRequest updateUserDefaultCollectionAccessRequest(final String user, final Permissions permissions) { return request(DbName.SYSTEM, RequestType.PUT, PATH_API_USER, user, ArangoRequestParam.DATABASE, dbName.get() , "*").setBody(getSerde().serialize(OptionsBuilder.build(new UserAccessOptions(), permissions))); } - protected Request getPermissionsRequest(final String user) { + protected InternalRequest getPermissionsRequest(final String user) { return request(DbName.SYSTEM, RequestType.GET, PATH_API_USER, user, ArangoRequestParam.DATABASE, dbName.get()); } @@ -147,10 +145,10 @@ protected ResponseDeserializer getPermissionsResponseDeserialzer() Permissions.class); } - protected Request queryRequest(final String query, final Map bindVars, - final AqlQueryOptions options) { + protected InternalRequest queryRequest(final String query, final Map bindVars, + final AqlQueryOptions options) { final AqlQueryOptions opt = options != null ? options : new AqlQueryOptions(); - final Request request = request(dbName, RequestType.POST, PATH_API_CURSOR) + final InternalRequest request = request(dbName, RequestType.POST, PATH_API_CURSOR) .setBody(getSerde().serialize(OptionsBuilder.build(opt, query, bindVars))); if (Boolean.TRUE.equals(opt.getAllowDirtyRead())) { RequestUtils.allowDirtyRead(request); @@ -159,9 +157,9 @@ protected Request queryRequest(final String query, final Map bin return request; } - protected Request queryNextRequest(final String id, final AqlQueryOptions options, Map meta) { + protected InternalRequest queryNextRequest(final String id, final AqlQueryOptions options, Map meta) { - final Request request = request(dbName, RequestType.POST, PATH_API_CURSOR, id); + final InternalRequest request = request(dbName, RequestType.POST, PATH_API_CURSOR, id); request.putHeaderParams(meta); final AqlQueryOptions opt = options != null ? options : new AqlQueryOptions(); @@ -173,9 +171,9 @@ protected Request queryNextRequest(final String id, final AqlQueryOptions option return request; } - protected Request queryCloseRequest(final String id, final AqlQueryOptions options, Map meta) { + protected InternalRequest queryCloseRequest(final String id, final AqlQueryOptions options, Map meta) { - final Request request = request(dbName, RequestType.DELETE, PATH_API_CURSOR, id); + final InternalRequest request = request(dbName, RequestType.DELETE, PATH_API_CURSOR, id); request.putHeaderParams(meta); final AqlQueryOptions opt = options != null ? options : new AqlQueryOptions(); @@ -187,60 +185,60 @@ protected Request queryCloseRequest(final String id, final AqlQueryOptions optio return request; } - protected Request explainQueryRequest(final String query, final Map bindVars, - final AqlQueryExplainOptions options) { + protected InternalRequest explainQueryRequest(final String query, final Map bindVars, + final AqlQueryExplainOptions options) { final AqlQueryExplainOptions opt = options != null ? options : new AqlQueryExplainOptions(); return request(dbName, RequestType.POST, PATH_API_EXPLAIN) .setBody(getSerde().serialize(OptionsBuilder.build(opt, query, bindVars))); } - protected Request parseQueryRequest(final String query) { + protected InternalRequest parseQueryRequest(final String query) { return request(dbName, RequestType.POST, PATH_API_QUERY).setBody(getSerde().serialize(OptionsBuilder.build(new AqlQueryParseOptions(), query))); } - protected Request clearQueryCacheRequest() { + protected InternalRequest clearQueryCacheRequest() { return request(dbName, RequestType.DELETE, PATH_API_QUERY_CACHE); } - protected Request getQueryCachePropertiesRequest() { + protected InternalRequest getQueryCachePropertiesRequest() { return request(dbName, RequestType.GET, PATH_API_QUERY_CACHE_PROPERTIES); } - protected Request setQueryCachePropertiesRequest(final QueryCachePropertiesEntity properties) { + protected InternalRequest setQueryCachePropertiesRequest(final QueryCachePropertiesEntity properties) { return request(dbName, RequestType.PUT, PATH_API_QUERY_CACHE_PROPERTIES).setBody(getSerde().serialize(properties)); } - protected Request getQueryTrackingPropertiesRequest() { + protected InternalRequest getQueryTrackingPropertiesRequest() { return request(dbName, RequestType.GET, PATH_API_QUERY_PROPERTIES); } - protected Request setQueryTrackingPropertiesRequest(final QueryTrackingPropertiesEntity properties) { + protected InternalRequest setQueryTrackingPropertiesRequest(final QueryTrackingPropertiesEntity properties) { return request(dbName, RequestType.PUT, PATH_API_QUERY_PROPERTIES).setBody(getSerde().serialize(properties)); } - protected Request getCurrentlyRunningQueriesRequest() { + protected InternalRequest getCurrentlyRunningQueriesRequest() { return request(dbName, RequestType.GET, PATH_API_QUERY_CURRENT); } - protected Request getSlowQueriesRequest() { + protected InternalRequest getSlowQueriesRequest() { return request(dbName, RequestType.GET, PATH_API_QUERY_SLOW); } - protected Request clearSlowQueriesRequest() { + protected InternalRequest clearSlowQueriesRequest() { return request(dbName, RequestType.DELETE, PATH_API_QUERY_SLOW); } - protected Request killQueryRequest(final String id) { + protected InternalRequest killQueryRequest(final String id) { return request(dbName, RequestType.DELETE, PATH_API_QUERY, id); } - protected Request createAqlFunctionRequest(final String name, final String code, - final AqlFunctionCreateOptions options) { + protected InternalRequest createAqlFunctionRequest(final String name, final String code, + final AqlFunctionCreateOptions options) { return request(dbName, RequestType.POST, PATH_API_AQLFUNCTION).setBody(getSerde().serialize(OptionsBuilder.build(options != null ? options : new AqlFunctionCreateOptions(), name, code))); } - protected Request deleteAqlFunctionRequest(final String name, final AqlFunctionDeleteOptions options) { - final Request request = request(dbName, RequestType.DELETE, PATH_API_AQLFUNCTION, name); + protected InternalRequest deleteAqlFunctionRequest(final String name, final AqlFunctionDeleteOptions options) { + final InternalRequest request = request(dbName, RequestType.DELETE, PATH_API_AQLFUNCTION, name); final AqlFunctionDeleteOptions params = options != null ? options : new AqlFunctionDeleteOptions(); request.putQueryParam("group", params.getGroup()); return request; @@ -250,8 +248,8 @@ protected ResponseDeserializer deleteAqlFunctionResponseDeserializer() return response -> getSerde().deserialize(response.getBody(), "/deletedCount", Integer.class); } - protected Request getAqlFunctionsRequest(final AqlFunctionGetOptions options) { - final Request request = request(dbName, RequestType.GET, PATH_API_AQLFUNCTION); + protected InternalRequest getAqlFunctionsRequest(final AqlFunctionGetOptions options) { + final InternalRequest request = request(dbName, RequestType.GET, PATH_API_AQLFUNCTION); final AqlFunctionGetOptions params = options != null ? options : new AqlFunctionGetOptions(); request.putQueryParam("namespace", params.getNamespace()); return request; @@ -262,8 +260,8 @@ protected ResponseDeserializer> getAqlFunctionsRes constructListType(AqlFunctionEntity.class)); } - protected Request createGraphRequest(final String name, final Collection edgeDefinitions, - final GraphCreateOptions options) { + protected InternalRequest createGraphRequest(final String name, final Collection edgeDefinitions, + final GraphCreateOptions options) { return request(dbName, RequestType.POST, InternalArangoGraph.PATH_API_GHARIAL).setBody(getSerde().serialize(OptionsBuilder.build(options != null ? options : new GraphCreateOptions(), name, edgeDefinitions))); } @@ -271,7 +269,7 @@ protected ResponseDeserializer createGraphResponseDeserializer() { return response -> getSerde().deserialize(response.getBody(), "/graph", GraphEntity.class); } - protected Request getGraphsRequest() { + protected InternalRequest getGraphsRequest() { return request(dbName, RequestType.GET, InternalArangoGraph.PATH_API_GHARIAL); } @@ -280,7 +278,7 @@ protected ResponseDeserializer> getGraphsResponseDeseria constructListType(GraphEntity.class)); } - protected Request transactionRequest(final String action, final TransactionOptions options) { + protected InternalRequest transactionRequest(final String action, final TransactionOptions options) { return request(dbName, RequestType.POST, PATH_API_TRANSACTION).setBody(getSerde().serialize(OptionsBuilder.build(options != null ? options : new TransactionOptions(), action))); } @@ -291,24 +289,24 @@ protected ResponseDeserializer transactionResponseDeserializer(final Clas }; } - protected Request beginStreamTransactionRequest(final StreamTransactionOptions options) { + protected InternalRequest beginStreamTransactionRequest(final StreamTransactionOptions options) { StreamTransactionOptions opts = options != null ? options : new StreamTransactionOptions(); - Request r = request(dbName, RequestType.POST, PATH_API_BEGIN_STREAM_TRANSACTION).setBody(getSerde().serialize(opts)); + InternalRequest r = request(dbName, RequestType.POST, PATH_API_BEGIN_STREAM_TRANSACTION).setBody(getSerde().serialize(opts)); if(Boolean.TRUE.equals(opts.getAllowDirtyRead())) { RequestUtils.allowDirtyRead(r); } return r; } - protected Request abortStreamTransactionRequest(String id) { + protected InternalRequest abortStreamTransactionRequest(String id) { return request(dbName, RequestType.DELETE, PATH_API_TRANSACTION, id); } - protected Request getStreamTransactionsRequest() { + protected InternalRequest getStreamTransactionsRequest() { return request(dbName, RequestType.GET, PATH_API_TRANSACTION); } - protected Request getStreamTransactionRequest(String id) { + protected InternalRequest getStreamTransactionRequest(String id) { return request(dbName, RequestType.GET, PATH_API_TRANSACTION, id); } @@ -317,7 +315,7 @@ protected ResponseDeserializer> transactionsRespon constructListType(TransactionEntity.class)); } - protected Request commitStreamTransactionRequest(String id) { + protected InternalRequest commitStreamTransactionRequest(String id) { return request(dbName, RequestType.PUT, PATH_API_TRANSACTION, id); } @@ -326,7 +324,7 @@ protected ResponseDeserializer streamTransactionRespons StreamTransactionEntity.class); } - protected Request getInfoRequest() { + protected InternalRequest getInfoRequest() { return request(dbName, RequestType.GET, PATH_API_DATABASE, "current"); } @@ -335,11 +333,11 @@ protected ResponseDeserializer getInfoResponseDeserializer() { DatabaseEntity.class); } - protected Request reloadRoutingRequest() { + protected InternalRequest reloadRoutingRequest() { return request(dbName, RequestType.POST, PATH_API_ADMIN_ROUTING_RELOAD); } - protected Request getViewsRequest() { + protected InternalRequest getViewsRequest() { return request(dbName, RequestType.GET, InternalArangoView.PATH_API_VIEW); } @@ -348,24 +346,24 @@ protected ResponseDeserializer> getViewsResponseDeseriali constructListType(ViewEntity.class)); } - protected Request createViewRequest(final String name, final ViewType type) { + protected InternalRequest createViewRequest(final String name, final ViewType type) { return request(dbName, RequestType.POST, InternalArangoView.PATH_API_VIEW).setBody(getSerde().serialize(OptionsBuilder.build(new ViewCreateOptions(), name, type))); } - protected Request createArangoSearchRequest(final String name, final ArangoSearchCreateOptions options) { + protected InternalRequest createArangoSearchRequest(final String name, final ArangoSearchCreateOptions options) { return request(dbName, RequestType.POST, InternalArangoView.PATH_API_VIEW).setBody(getSerde().serialize(ArangoSearchOptionsBuilder.build(options != null ? options : new ArangoSearchCreateOptions(), name))); } - protected Request createSearchAliasRequest(final String name, final SearchAliasCreateOptions options) { + protected InternalRequest createSearchAliasRequest(final String name, final SearchAliasCreateOptions options) { return request(dbName, RequestType.POST, InternalArangoView.PATH_API_VIEW).setBody(getSerde().serialize( SearchAliasOptionsBuilder.build(options != null ? options : new SearchAliasCreateOptions(), name))); } - protected Request getAnalyzerRequest(final String name) { + protected InternalRequest getAnalyzerRequest(final String name) { return request(dbName, RequestType.GET, InternalArangoView.PATH_API_ANALYZER, name); } - protected Request getAnalyzersRequest() { + protected InternalRequest getAnalyzersRequest() { return request(dbName, RequestType.GET, InternalArangoView.PATH_API_ANALYZER); } @@ -374,12 +372,12 @@ protected ResponseDeserializer> getSearchAnalyzersRes constructListType(SearchAnalyzer.class)); } - protected Request createAnalyzerRequest(final SearchAnalyzer options) { + protected InternalRequest createAnalyzerRequest(final SearchAnalyzer options) { return request(dbName, RequestType.POST, InternalArangoView.PATH_API_ANALYZER).setBody(getSerde().serialize(options)); } - protected Request deleteAnalyzerRequest(final String name, final AnalyzerDeleteOptions options) { - Request request = request(dbName, RequestType.DELETE, InternalArangoView.PATH_API_ANALYZER, name); + protected InternalRequest deleteAnalyzerRequest(final String name, final AnalyzerDeleteOptions options) { + InternalRequest request = request(dbName, RequestType.DELETE, InternalArangoView.PATH_API_ANALYZER, name); request.putQueryParam("force", options != null ? options.getForce() : null); return request; } diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java b/driver/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java index 89bb70423..37ee04fc1 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java +++ b/driver/src/main/java/com/arangodb/internal/InternalArangoEdgeCollection.java @@ -26,8 +26,6 @@ import com.arangodb.internal.util.DocumentUtil; import com.arangodb.internal.util.RequestUtils; import com.arangodb.model.*; -import com.arangodb.Request; -import com.arangodb.RequestType; /** * @author Mark Vollmary @@ -58,8 +56,8 @@ public String name() { return name; } - protected Request insertEdgeRequest(final T value, final EdgeCreateOptions options) { - final Request request = request(graph.db().dbName(), RequestType.POST, PATH_API_GHARIAL, graph.name(), EDGE_PATH, + protected InternalRequest insertEdgeRequest(final T value, final EdgeCreateOptions options) { + final InternalRequest request = request(graph.db().dbName(), RequestType.POST, PATH_API_GHARIAL, graph.name(), EDGE_PATH, name); final EdgeCreateOptions params = (options != null ? options : new EdgeCreateOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -72,8 +70,8 @@ protected ResponseDeserializer insertEdgeResponseDeserializer() { return response -> getSerde().deserialize(response.getBody(), EDGE_JSON_POINTER, EdgeEntity.class); } - protected Request getEdgeRequest(final String key, final GraphDocumentReadOptions options) { - final Request request = request(graph.db().dbName(), RequestType.GET, PATH_API_GHARIAL, graph.name(), EDGE_PATH, + protected InternalRequest getEdgeRequest(final String key, final GraphDocumentReadOptions options) { + final InternalRequest request = request(graph.db().dbName(), RequestType.GET, PATH_API_GHARIAL, graph.name(), EDGE_PATH, DocumentUtil.createDocumentHandle(name, key)); final GraphDocumentReadOptions params = (options != null ? options : new GraphDocumentReadOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -89,8 +87,8 @@ protected ResponseDeserializer getEdgeResponseDeserializer(final Class return response -> getSerde().deserializeUserData(getSerde().extract(response.getBody(), EDGE_JSON_POINTER), type); } - protected Request replaceEdgeRequest(final String key, final T value, final EdgeReplaceOptions options) { - final Request request = request(graph.db().dbName(), RequestType.PUT, PATH_API_GHARIAL, graph.name(), EDGE_PATH, + protected InternalRequest replaceEdgeRequest(final String key, final T value, final EdgeReplaceOptions options) { + final InternalRequest request = request(graph.db().dbName(), RequestType.PUT, PATH_API_GHARIAL, graph.name(), EDGE_PATH, DocumentUtil.createDocumentHandle(name, key)); final EdgeReplaceOptions params = (options != null ? options : new EdgeReplaceOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -104,8 +102,8 @@ protected ResponseDeserializer replaceEdgeResponseDeserializer return response -> getSerde().deserialize(response.getBody(), EDGE_JSON_POINTER, EdgeUpdateEntity.class); } - protected Request updateEdgeRequest(final String key, final T value, final EdgeUpdateOptions options) { - final Request request; + protected InternalRequest updateEdgeRequest(final String key, final T value, final EdgeUpdateOptions options) { + final InternalRequest request; request = request(graph.db().dbName(), RequestType.PATCH, PATH_API_GHARIAL, graph.name(), EDGE_PATH, DocumentUtil.createDocumentHandle(name, key)); final EdgeUpdateOptions params = (options != null ? options : new EdgeUpdateOptions()); @@ -121,8 +119,8 @@ protected ResponseDeserializer updateEdgeResponseDeserializer( return response -> getSerde().deserialize(response.getBody(), EDGE_JSON_POINTER, EdgeUpdateEntity.class); } - protected Request deleteEdgeRequest(final String key, final EdgeDeleteOptions options) { - final Request request = request(graph.db().dbName(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), EDGE_PATH, + protected InternalRequest deleteEdgeRequest(final String key, final EdgeDeleteOptions options) { + final InternalRequest request = request(graph.db().dbName(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), EDGE_PATH, DocumentUtil.createDocumentHandle(name, key)); final EdgeDeleteOptions params = (options != null ? options : new EdgeDeleteOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoGraph.java b/driver/src/main/java/com/arangodb/internal/InternalArangoGraph.java index 8c874c041..975902459 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoGraph.java +++ b/driver/src/main/java/com/arangodb/internal/InternalArangoGraph.java @@ -25,8 +25,6 @@ import com.arangodb.internal.ArangoExecutor.ResponseDeserializer; import com.arangodb.model.OptionsBuilder; import com.arangodb.model.VertexCollectionCreateOptions; -import com.arangodb.Request; -import com.arangodb.RequestType; import java.util.Collection; @@ -61,19 +59,19 @@ public String name() { return name; } - protected Request dropRequest() { + protected InternalRequest dropRequest() { return dropRequest(false); } - protected Request dropRequest(final boolean dropCollections) { - final Request request = request(db.dbName(), RequestType.DELETE, PATH_API_GHARIAL, name); + protected InternalRequest dropRequest(final boolean dropCollections) { + final InternalRequest request = request(db.dbName(), RequestType.DELETE, PATH_API_GHARIAL, name); if (dropCollections) { request.putQueryParam("dropCollections", true); } return request; } - protected Request getInfoRequest() { + protected InternalRequest getInfoRequest() { return request(db.dbName(), RequestType.GET, PATH_API_GHARIAL, name); } @@ -81,7 +79,7 @@ protected ResponseDeserializer getInfoResponseDeserializer() { return addVertexCollectionResponseDeserializer(); } - protected Request getVertexCollectionsRequest() { + protected InternalRequest getVertexCollectionsRequest() { return request(db.dbName(), RequestType.GET, PATH_API_GHARIAL, name, VERTEX); } @@ -90,8 +88,8 @@ protected ResponseDeserializer> getVertexCollectionsResponseD constructListType(String.class)); } - protected Request addVertexCollectionRequest(final String name, final VertexCollectionCreateOptions options) { - final Request request = request(db.dbName(), RequestType.POST, PATH_API_GHARIAL, name(), VERTEX); + protected InternalRequest addVertexCollectionRequest(final String name, final VertexCollectionCreateOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_GHARIAL, name(), VERTEX); request.setBody(getSerde().serialize(OptionsBuilder.build(options, name))); return request; } @@ -100,7 +98,7 @@ protected ResponseDeserializer addVertexCollectionResponseDeseriali return addEdgeDefinitionResponseDeserializer(); } - protected Request getEdgeDefinitionsRequest() { + protected InternalRequest getEdgeDefinitionsRequest() { return request(db.dbName(), RequestType.GET, PATH_API_GHARIAL, name, EDGE); } @@ -109,8 +107,8 @@ protected ResponseDeserializer> getEdgeDefinitionsDeserialize constructListType(String.class)); } - protected Request addEdgeDefinitionRequest(final EdgeDefinition definition) { - final Request request = request(db.dbName(), RequestType.POST, PATH_API_GHARIAL, name, EDGE); + protected InternalRequest addEdgeDefinitionRequest(final EdgeDefinition definition) { + final InternalRequest request = request(db.dbName(), RequestType.POST, PATH_API_GHARIAL, name, EDGE); request.setBody(getSerde().serialize(definition)); return request; } @@ -119,8 +117,8 @@ protected ResponseDeserializer addEdgeDefinitionResponseDeserialize return response -> getSerde().deserialize(response.getBody(), GRAPH, GraphEntity.class); } - protected Request replaceEdgeDefinitionRequest(final EdgeDefinition definition) { - final Request request = request(db.dbName(), RequestType.PUT, PATH_API_GHARIAL, name, EDGE, + protected InternalRequest replaceEdgeDefinitionRequest(final EdgeDefinition definition) { + final InternalRequest request = request(db.dbName(), RequestType.PUT, PATH_API_GHARIAL, name, EDGE, definition.getCollection()); request.setBody(getSerde().serialize(definition)); return request; @@ -130,7 +128,7 @@ protected ResponseDeserializer replaceEdgeDefinitionResponseDeseria return response -> getSerde().deserialize(response.getBody(), GRAPH, GraphEntity.class); } - protected Request removeEdgeDefinitionRequest(final String definitionName) { + protected InternalRequest removeEdgeDefinitionRequest(final String definitionName) { return request(db.dbName(), RequestType.DELETE, PATH_API_GHARIAL, name, EDGE, definitionName); } diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoRoute.java b/driver/src/main/java/com/arangodb/internal/InternalArangoRoute.java index 78e782d68..86ac9d047 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoRoute.java +++ b/driver/src/main/java/com/arangodb/internal/InternalArangoRoute.java @@ -20,9 +20,6 @@ package com.arangodb.internal; -import com.arangodb.Request; -import com.arangodb.RequestType; - import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; @@ -66,8 +63,8 @@ public void _withBody(final Object body) { this.body = body; } - protected Request createRequest(final RequestType requestType) { - final Request request = request(db.dbName(), requestType, path); + protected InternalRequest createRequest(final RequestType requestType) { + final InternalRequest request = request(db.dbName(), requestType, path); for (final Entry param : headerParam.entrySet()) { request.putHeaderParam(param.getKey(), param.getValue()); } diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoSearch.java b/driver/src/main/java/com/arangodb/internal/InternalArangoSearch.java index e4c3d5fc9..fc33ccfe4 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoSearch.java +++ b/driver/src/main/java/com/arangodb/internal/InternalArangoSearch.java @@ -21,8 +21,6 @@ package com.arangodb.internal; import com.arangodb.model.arangosearch.ArangoSearchPropertiesOptions; -import com.arangodb.Request; -import com.arangodb.RequestType; /** * @author Mark Vollmary @@ -37,18 +35,18 @@ protected InternalArangoSearch(final D db, final String name) { super(db, name); } - protected Request getPropertiesRequest() { + protected InternalRequest getPropertiesRequest() { return request(db.dbName(), RequestType.GET, PATH_API_VIEW, name, PROPERTIES_PATH); } - protected Request replacePropertiesRequest(final ArangoSearchPropertiesOptions options) { - final Request request = request(db.dbName(), RequestType.PUT, PATH_API_VIEW, name, PROPERTIES_PATH); + protected InternalRequest replacePropertiesRequest(final ArangoSearchPropertiesOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.PUT, PATH_API_VIEW, name, PROPERTIES_PATH); request.setBody(getSerde().serialize(options != null ? options : new ArangoSearchPropertiesOptions())); return request; } - protected Request updatePropertiesRequest(final ArangoSearchPropertiesOptions options) { - final Request request = request(db.dbName(), RequestType.PATCH, PATH_API_VIEW, name, PROPERTIES_PATH); + protected InternalRequest updatePropertiesRequest(final ArangoSearchPropertiesOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.PATCH, PATH_API_VIEW, name, PROPERTIES_PATH); request.setBody(getSerde().serialize(options != null ? options : new ArangoSearchPropertiesOptions())); return request; } diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java b/driver/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java index 58a3d6d9f..204aaf532 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java +++ b/driver/src/main/java/com/arangodb/internal/InternalArangoVertexCollection.java @@ -26,8 +26,6 @@ import com.arangodb.internal.util.DocumentUtil; import com.arangodb.internal.util.RequestUtils; import com.arangodb.model.*; -import com.arangodb.Request; -import com.arangodb.RequestType; /** * @author Mark Vollmary @@ -58,12 +56,12 @@ public String name() { return name; } - protected Request dropRequest() { + protected InternalRequest dropRequest() { return request(graph.db().dbName(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), VERTEX_PATH, name); } - protected Request insertVertexRequest(final T value, final VertexCreateOptions options) { - final Request request = request(graph.db().dbName(), RequestType.POST, PATH_API_GHARIAL, graph.name(), VERTEX_PATH, + protected InternalRequest insertVertexRequest(final T value, final VertexCreateOptions options) { + final InternalRequest request = request(graph.db().dbName(), RequestType.POST, PATH_API_GHARIAL, graph.name(), VERTEX_PATH, name); final VertexCreateOptions params = (options != null ? options : new VertexCreateOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -76,8 +74,8 @@ protected ResponseDeserializer insertVertexResponseDeserializer() return response -> getSerde().deserialize(response.getBody(), VERTEX_JSON_POINTER, VertexEntity.class); } - protected Request getVertexRequest(final String key, final GraphDocumentReadOptions options) { - final Request request = request(graph.db().dbName(), RequestType.GET, PATH_API_GHARIAL, graph.name(), VERTEX_PATH, + protected InternalRequest getVertexRequest(final String key, final GraphDocumentReadOptions options) { + final InternalRequest request = request(graph.db().dbName(), RequestType.GET, PATH_API_GHARIAL, graph.name(), VERTEX_PATH, DocumentUtil.createDocumentHandle(name, key)); final GraphDocumentReadOptions params = (options != null ? options : new GraphDocumentReadOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -93,8 +91,8 @@ protected ResponseDeserializer getVertexResponseDeserializer(final Class< return response -> getSerde().deserializeUserData(getSerde().extract(response.getBody(), VERTEX_JSON_POINTER), type); } - protected Request replaceVertexRequest(final String key, final T value, final VertexReplaceOptions options) { - final Request request = request(graph.db().dbName(), RequestType.PUT, PATH_API_GHARIAL, graph.name(), VERTEX_PATH, + protected InternalRequest replaceVertexRequest(final String key, final T value, final VertexReplaceOptions options) { + final InternalRequest request = request(graph.db().dbName(), RequestType.PUT, PATH_API_GHARIAL, graph.name(), VERTEX_PATH, DocumentUtil.createDocumentHandle(name, key)); final VertexReplaceOptions params = (options != null ? options : new VertexReplaceOptions()); request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId()); @@ -108,8 +106,8 @@ protected ResponseDeserializer replaceVertexResponseDeserial return response -> getSerde().deserialize(response.getBody(), VERTEX_JSON_POINTER, VertexUpdateEntity.class); } - protected Request updateVertexRequest(final String key, final T value, final VertexUpdateOptions options) { - final Request request; + protected InternalRequest updateVertexRequest(final String key, final T value, final VertexUpdateOptions options) { + final InternalRequest request; request = request(graph.db().dbName(), RequestType.PATCH, PATH_API_GHARIAL, graph.name(), VERTEX_PATH, DocumentUtil.createDocumentHandle(name, key)); final VertexUpdateOptions params = (options != null ? options : new VertexUpdateOptions()); @@ -125,8 +123,8 @@ protected ResponseDeserializer updateVertexResponseDeseriali return response -> getSerde().deserialize(response.getBody(), VERTEX_JSON_POINTER, VertexUpdateEntity.class); } - protected Request deleteVertexRequest(final String key, final VertexDeleteOptions options) { - final Request request = request(graph.db().dbName(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), + protected InternalRequest deleteVertexRequest(final String key, final VertexDeleteOptions options) { + final InternalRequest request = request(graph.db().dbName(), RequestType.DELETE, PATH_API_GHARIAL, graph.name(), VERTEX_PATH, DocumentUtil.createDocumentHandle(name, key)); final VertexDeleteOptions params = (options != null ? options : new VertexDeleteOptions()); diff --git a/driver/src/main/java/com/arangodb/internal/InternalArangoView.java b/driver/src/main/java/com/arangodb/internal/InternalArangoView.java index 150a297d9..38b042695 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalArangoView.java +++ b/driver/src/main/java/com/arangodb/internal/InternalArangoView.java @@ -22,8 +22,6 @@ import com.arangodb.model.OptionsBuilder; import com.arangodb.model.ViewRenameOptions; -import com.arangodb.Request; -import com.arangodb.RequestType; /** * @author Mark Vollmary @@ -53,17 +51,17 @@ public String name() { return name; } - protected Request dropRequest() { + protected InternalRequest dropRequest() { return request(db.dbName(), RequestType.DELETE, PATH_API_VIEW, name); } - protected Request renameRequest(final String newName) { - final Request request = request(db.dbName(), RequestType.PUT, PATH_API_VIEW, name, "rename"); + protected InternalRequest renameRequest(final String newName) { + final InternalRequest request = request(db.dbName(), RequestType.PUT, PATH_API_VIEW, name, "rename"); request.setBody(getSerde().serialize(OptionsBuilder.build(new ViewRenameOptions(), newName))); return request; } - protected Request getInfoRequest() { + protected InternalRequest getInfoRequest() { return request(db.dbName(), RequestType.GET, PATH_API_VIEW, name); } diff --git a/driver/src/main/java/com/arangodb/internal/InternalRequest.java b/driver/src/main/java/com/arangodb/internal/InternalRequest.java new file mode 100644 index 000000000..912062cf0 --- /dev/null +++ b/driver/src/main/java/com/arangodb/internal/InternalRequest.java @@ -0,0 +1,148 @@ +/* + * DISCLAIMER + * + * Copyright 2016 ArangoDB GmbH, Cologne, Germany + * + * Licensed 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. + * + * Copyright holder is ArangoDB GmbH, Cologne, Germany + */ + +package com.arangodb.internal; + +import com.arangodb.DbName; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +/** + * @author Mark Vollmary + */ +public class InternalRequest { + + private final DbName dbName; + private final RequestType requestType; + private final String path; + private final Map queryParam; + private final Map headerParam; + private int version = 1; + private int type = 1; + private byte[] body; + + public InternalRequest(final DbName dbName, final RequestType requestType, final String path) { + super(); + this.dbName = dbName; + this.requestType = requestType; + this.path = path; + body = null; + queryParam = new HashMap<>(); + headerParam = new HashMap<>(); + } + + public int getVersion() { + return version; + } + + public InternalRequest setVersion(final int version) { + this.version = version; + return this; + } + + public int getType() { + return type; + } + + public InternalRequest setType(final int type) { + this.type = type; + return this; + } + + public DbName getDbName() { + return dbName; + } + + public RequestType getRequestType() { + return requestType; + } + + public String getPath() { + return path; + } + + public Map getQueryParam() { + return queryParam; + } + + public InternalRequest putQueryParam(final String key, final Object value) { + if (value != null) { + queryParam.put(key, value.toString()); + } + return this; + } + + public InternalRequest putQueryParams(final Map params) { + if (params != null) { + for (Map.Entry it : params.entrySet()) { + putQueryParam(it.getKey(), it.getValue()); + } + } + return this; + } + + public Map getHeaderParam() { + return Collections.unmodifiableMap(headerParam); + } + + public boolean containsHeaderParam(final String key) { + return headerParam.containsKey(key.toLowerCase(Locale.ROOT)); + } + + public InternalRequest putHeaderParam(final String key, final String value) { + if (value != null) { + headerParam.put(key.toLowerCase(Locale.ROOT), value); + } + return this; + } + + public InternalRequest putHeaderParams(final Map params) { + if (params != null) { + for (Map.Entry it : params.entrySet()) { + putHeaderParam(it.getKey(), it.getValue()); + } + } + return this; + } + + public byte[] getBody() { + return body; + } + + public InternalRequest setBody(final byte[] body) { + this.body = body; + return this; + } + + @Override + public String toString() { + return "{" + + "requestType=" + requestType + + ", database='" + dbName + '\'' + + ", url='" + path + '\'' + + ", parameters=" + queryParam + + ", headers=" + headerParam + + '}'; + } + +} diff --git a/driver/src/main/java/com/arangodb/internal/InternalResponse.java b/driver/src/main/java/com/arangodb/internal/InternalResponse.java new file mode 100644 index 000000000..3e0ba6bbb --- /dev/null +++ b/driver/src/main/java/com/arangodb/internal/InternalResponse.java @@ -0,0 +1,105 @@ +/* + * DISCLAIMER + * + * Copyright 2016 ArangoDB GmbH, Cologne, Germany + * + * Licensed 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. + * + * Copyright holder is ArangoDB GmbH, Cologne, Germany + */ + +package com.arangodb.internal; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +/** + * @author Mark Vollmary + */ +public class InternalResponse { + + private int version = 1; + private int type = 2; + private int responseCode; + private final Map meta; + private byte[] body = null; + + public InternalResponse() { + super(); + meta = new HashMap<>(); + } + + public int getVersion() { + return version; + } + + public void setVersion(final int version) { + this.version = version; + } + + public int getType() { + return type; + } + + public void setType(final int type) { + this.type = type; + } + + public int getResponseCode() { + return responseCode; + } + + public void setResponseCode(final int responseCode) { + this.responseCode = responseCode; + } + + public Map getMeta() { + return Collections.unmodifiableMap(meta); + } + + public String getMeta(final String key) { + return meta.get(key.toLowerCase(Locale.ROOT)); + } + + public boolean containsMeta(final String key) { + return meta.containsKey(key.toLowerCase(Locale.ROOT)); + } + + public void putMeta(final String key, final String value) { + this.meta.put(key.toLowerCase(Locale.ROOT), value); + } + + public void putMetas(final Map meta) { + for (Map.Entry it : meta.entrySet()) { + putMeta(it.getKey(), it.getValue()); + } + } + + public byte[] getBody() { + return body; + } + + public void setBody(final byte[] body) { + this.body = body; + } + + @Override + public String toString() { + return "{" + + "statusCode=" + responseCode + + ", headers=" + meta + + '}'; + } +} diff --git a/driver/src/main/java/com/arangodb/internal/InternalSearchAlias.java b/driver/src/main/java/com/arangodb/internal/InternalSearchAlias.java index 410918742..97abc1745 100644 --- a/driver/src/main/java/com/arangodb/internal/InternalSearchAlias.java +++ b/driver/src/main/java/com/arangodb/internal/InternalSearchAlias.java @@ -21,8 +21,6 @@ package com.arangodb.internal; import com.arangodb.model.arangosearch.SearchAliasPropertiesOptions; -import com.arangodb.Request; -import com.arangodb.RequestType; public class InternalSearchAlias, D extends InternalArangoDatabase, E extends ArangoExecutor> extends InternalArangoView { @@ -33,18 +31,18 @@ protected InternalSearchAlias(final D db, final String name) { super(db, name); } - protected Request getPropertiesRequest() { + protected InternalRequest getPropertiesRequest() { return request(db.dbName(), RequestType.GET, PATH_API_VIEW, name, PROPERTIES_PATH); } - protected Request replacePropertiesRequest(final SearchAliasPropertiesOptions options) { - final Request request = request(db.dbName(), RequestType.PUT, PATH_API_VIEW, name, PROPERTIES_PATH); + protected InternalRequest replacePropertiesRequest(final SearchAliasPropertiesOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.PUT, PATH_API_VIEW, name, PROPERTIES_PATH); request.setBody(getSerde().serialize(options != null ? options : new SearchAliasPropertiesOptions())); return request; } - protected Request updatePropertiesRequest(final SearchAliasPropertiesOptions options) { - final Request request = request(db.dbName(), RequestType.PATCH, PATH_API_VIEW, name, PROPERTIES_PATH); + protected InternalRequest updatePropertiesRequest(final SearchAliasPropertiesOptions options) { + final InternalRequest request = request(db.dbName(), RequestType.PATCH, PATH_API_VIEW, name, PROPERTIES_PATH); request.setBody(getSerde().serialize(options != null ? options : new SearchAliasPropertiesOptions())); return request; } diff --git a/driver/src/main/java/com/arangodb/RequestType.java b/driver/src/main/java/com/arangodb/internal/RequestType.java similarity index 64% rename from driver/src/main/java/com/arangodb/RequestType.java rename to driver/src/main/java/com/arangodb/internal/RequestType.java index 009f08c35..5b9d27aae 100644 --- a/driver/src/main/java/com/arangodb/RequestType.java +++ b/driver/src/main/java/com/arangodb/internal/RequestType.java @@ -18,7 +18,9 @@ * Copyright holder is ArangoDB GmbH, Cologne, Germany */ -package com.arangodb; +package com.arangodb.internal; + +import com.arangodb.Request; /** * @author Mark Vollmary @@ -43,13 +45,25 @@ public enum RequestType { this.type = type; } - public static RequestType fromType(final int type) { - for (final RequestType rType : RequestType.values()) { - if (rType.type == type) { - return rType; - } + public static RequestType from(final Request.Method method) { + switch (method) { + case DELETE: + return DELETE; + case GET: + return GET; + case POST: + return POST; + case PUT: + return PUT; + case HEAD: + return HEAD; + case PATCH: + return PATCH; + case OPTIONS: + return OPTIONS; + default: + throw new IllegalArgumentException(); } - return null; } public int getType() { diff --git a/driver/src/main/java/com/arangodb/internal/http/HttpCommunication.java b/driver/src/main/java/com/arangodb/internal/http/HttpCommunication.java index 0ce212159..f68f86f01 100644 --- a/driver/src/main/java/com/arangodb/internal/http/HttpCommunication.java +++ b/driver/src/main/java/com/arangodb/internal/http/HttpCommunication.java @@ -21,9 +21,9 @@ package com.arangodb.internal.http; import com.arangodb.ArangoDBException; -import com.arangodb.Request; -import com.arangodb.RequestType; -import com.arangodb.Response; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.RequestType; +import com.arangodb.internal.InternalResponse; import com.arangodb.internal.net.*; import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.util.HostUtils; @@ -59,11 +59,11 @@ public void close() throws IOException { hostHandler.close(); } - public Response execute(final Request request, final HostHandle hostHandle) { + public InternalResponse execute(final InternalRequest request, final HostHandle hostHandle) { return execute(request, hostHandle, 0); } - private Response execute(final Request request, final HostHandle hostHandle, final int attemptCount) { + private InternalResponse execute(final InternalRequest request, final HostHandle hostHandle, final int attemptCount) { final AccessType accessType = RequestUtils.determineAccessType(request); Host host = hostHandler.get(hostHandle, accessType); try { @@ -75,7 +75,7 @@ private Response execute(final Request request, final HostHandle hostHandle, fin String body = request.getBody() == null ? "" : serde.toJsonString(request.getBody()); LOGGER.debug("Send Request [id={}]: {} {}", reqId, request, body); } - final Response response = connection.execute(request); + final InternalResponse response = connection.execute(request); if (LOGGER.isDebugEnabled()) { String body = response.getBody() == null ? "" : serde.toJsonString(response.getBody()); LOGGER.debug("Received Response [id={}]: {} {}", reqId, response, body); @@ -117,7 +117,7 @@ private Response execute(final Request request, final HostHandle hostHandle, fin } } - private boolean isSafe(final Request request) { + private boolean isSafe(final InternalRequest request) { RequestType type = request.getRequestType(); return type == RequestType.GET || type == RequestType.HEAD || type == RequestType.OPTIONS; } diff --git a/driver/src/main/java/com/arangodb/internal/http/HttpConnection.java b/driver/src/main/java/com/arangodb/internal/http/HttpConnection.java index 65fef09af..0a8eefac9 100644 --- a/driver/src/main/java/com/arangodb/internal/http/HttpConnection.java +++ b/driver/src/main/java/com/arangodb/internal/http/HttpConnection.java @@ -29,9 +29,9 @@ import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.util.EncodeUtils; import com.arangodb.internal.util.ResponseUtils; -import com.arangodb.Request; -import com.arangodb.RequestType; -import com.arangodb.Response; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.RequestType; +import com.arangodb.internal.InternalResponse; import io.netty.handler.ssl.ApplicationProtocolConfig; import io.netty.handler.ssl.ClientAuth; import io.netty.handler.ssl.IdentityCipherSuiteFilter; @@ -163,7 +163,7 @@ public SslContextFactory sslContextFactory() { client = WebClient.create(vertx, webClientOptions); } - private static String buildUrl(final Request request) { + private static String buildUrl(final InternalRequest request) { StringBuilder sb = new StringBuilder(); DbName dbName = request.getDbName(); if (dbName != null && !dbName.get().isEmpty()) { @@ -187,7 +187,7 @@ private static String buildUrl(final Request request) { return sb.toString(); } - private static void addHeader(final Request request, final HttpRequest httpRequest) { + private static void addHeader(final InternalRequest request, final HttpRequest httpRequest) { for (final Entry header : request.getHeaderParam().entrySet()) { httpRequest.putHeader(header.getKey(), header.getValue()); } @@ -217,10 +217,10 @@ private HttpMethod requestTypeToHttpMethod(RequestType requestType) { } } - public Response execute(final Request request) throws IOException { - CompletableFuture rfuture = new CompletableFuture<>(); + public InternalResponse execute(final InternalRequest request) throws IOException { + CompletableFuture rfuture = new CompletableFuture<>(); vertx.runOnContext(e -> doExecute(request, rfuture)); - Response resp; + InternalResponse resp; try { resp = rfuture.get(); } catch (InterruptedException e) { @@ -240,7 +240,7 @@ public Response execute(final Request request) throws IOException { return resp; } - public void doExecute(final Request request, final CompletableFuture rfuture) { + public void doExecute(final InternalRequest request, final CompletableFuture rfuture) { String path = buildUrl(request); HttpRequest httpRequest = client .request(requestTypeToHttpMethod(request.getRequestType()), path) @@ -270,8 +270,8 @@ public void doExecute(final Request request, final CompletableFuture r .onFailure(rfuture::completeExceptionally); } - private Response buildResponse(final HttpResponse httpResponse) { - final Response response = new Response(); + private InternalResponse buildResponse(final HttpResponse httpResponse) { + final InternalResponse response = new InternalResponse(); response.setResponseCode(httpResponse.statusCode()); Buffer body = httpResponse.body(); if (body != null) { @@ -286,7 +286,7 @@ private Response buildResponse(final HttpResponse httpResponse) { return response; } - protected void checkError(final Response response) { + protected void checkError(final InternalResponse response) { ResponseUtils.checkError(util, response); } diff --git a/driver/src/main/java/com/arangodb/internal/http/HttpProtocol.java b/driver/src/main/java/com/arangodb/internal/http/HttpProtocol.java index 3bdc01d74..15d35c2d4 100644 --- a/driver/src/main/java/com/arangodb/internal/http/HttpProtocol.java +++ b/driver/src/main/java/com/arangodb/internal/http/HttpProtocol.java @@ -22,8 +22,8 @@ import com.arangodb.internal.net.CommunicationProtocol; import com.arangodb.internal.net.HostHandle; -import com.arangodb.Request; -import com.arangodb.Response; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; import java.io.IOException; @@ -40,7 +40,7 @@ public HttpProtocol(final HttpCommunication httpCommunitaction) { } @Override - public Response execute(final Request request, final HostHandle hostHandle) { + public InternalResponse execute(final InternalRequest request, final HostHandle hostHandle) { return httpCommunitaction.execute(request, hostHandle); } diff --git a/driver/src/main/java/com/arangodb/internal/net/CommunicationProtocol.java b/driver/src/main/java/com/arangodb/internal/net/CommunicationProtocol.java index 799fd03d3..a7f5d2b75 100644 --- a/driver/src/main/java/com/arangodb/internal/net/CommunicationProtocol.java +++ b/driver/src/main/java/com/arangodb/internal/net/CommunicationProtocol.java @@ -20,8 +20,8 @@ package com.arangodb.internal.net; -import com.arangodb.Request; -import com.arangodb.Response; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; import java.io.Closeable; @@ -30,7 +30,7 @@ */ public interface CommunicationProtocol extends Closeable { - Response execute(final Request request, HostHandle hostHandle); + InternalResponse execute(final InternalRequest request, HostHandle hostHandle); void setJwt(String jwt); diff --git a/driver/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java b/driver/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java index d5a535249..4d111af37 100644 --- a/driver/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java +++ b/driver/src/main/java/com/arangodb/internal/net/ExtendedHostResolver.java @@ -25,8 +25,8 @@ import com.arangodb.internal.ArangoExecutorSync; import com.arangodb.internal.serde.InternalSerde; import com.arangodb.internal.util.HostUtils; -import com.arangodb.Request; -import com.arangodb.RequestType; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.RequestType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -120,7 +120,7 @@ private Collection resolveFromServer() { try { response = executor.execute( - new Request(DbName.SYSTEM, RequestType.GET, "/_api/cluster/endpoints"), + new InternalRequest(DbName.SYSTEM, RequestType.GET, "/_api/cluster/endpoints"), response1 -> { final List> tmp = arangoSerialization.deserialize(response1.getBody(), "/endpoints", diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalDeserializers.java b/driver/src/main/java/com/arangodb/internal/serde/InternalDeserializers.java index 2cd22326a..6062a86a1 100644 --- a/driver/src/main/java/com/arangodb/internal/serde/InternalDeserializers.java +++ b/driver/src/main/java/com/arangodb/internal/serde/InternalDeserializers.java @@ -8,7 +8,7 @@ import com.arangodb.entity.arangosearch.FieldLink; import com.arangodb.util.RawBytes; import com.arangodb.util.RawJson; -import com.arangodb.Response; +import com.arangodb.internal.InternalResponse; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.TreeNode; @@ -73,10 +73,10 @@ public ReplicationFactor deserialize(final JsonParser p, final DeserializationCo }; @SuppressWarnings("unchecked") - static final JsonDeserializer RESPONSE = new JsonDeserializer() { + static final JsonDeserializer RESPONSE = new JsonDeserializer() { @Override - public Response deserialize(final JsonParser p, final DeserializationContext ctxt) throws IOException { - final Response response = new Response(); + public InternalResponse deserialize(final JsonParser p, final DeserializationContext ctxt) throws IOException { + final InternalResponse response = new InternalResponse(); Iterator it = ((ArrayNode) p.readValueAsTree()).iterator(); response.setVersion(it.next().intValue()); response.setType(it.next().intValue()); diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalModule.java b/driver/src/main/java/com/arangodb/internal/serde/InternalModule.java index 5f7d465ac..40943086f 100644 --- a/driver/src/main/java/com/arangodb/internal/serde/InternalModule.java +++ b/driver/src/main/java/com/arangodb/internal/serde/InternalModule.java @@ -8,8 +8,8 @@ import com.arangodb.internal.velocystream.internal.JwtAuthenticationRequest; import com.arangodb.util.RawBytes; import com.arangodb.util.RawJson; -import com.arangodb.Request; -import com.arangodb.Response; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.module.SimpleModule; @@ -27,7 +27,7 @@ enum InternalModule implements Supplier { module.addSerializer(RawBytes.class, InternalSerializers.RAW_BYTES_SERIALIZER); module.addSerializer(AuthenticationRequest.class, InternalSerializers.AUTHENTICATION_REQUEST); module.addSerializer(JwtAuthenticationRequest.class, InternalSerializers.JWT_AUTHENTICATION_REQUEST); - module.addSerializer(Request.class, InternalSerializers.REQUEST); + module.addSerializer(InternalRequest.class, InternalSerializers.REQUEST); module.addSerializer(CollectionType.class, InternalSerializers.COLLECTION_TYPE); module.addDeserializer(RawJson.class, InternalDeserializers.RAW_JSON_DESERIALIZER); @@ -35,7 +35,7 @@ enum InternalModule implements Supplier { module.addDeserializer(CollectionStatus.class, InternalDeserializers.COLLECTION_STATUS); module.addDeserializer(CollectionType.class, InternalDeserializers.COLLECTION_TYPE); module.addDeserializer(ReplicationFactor.class, InternalDeserializers.REPLICATION_FACTOR); - module.addDeserializer(Response.class, InternalDeserializers.RESPONSE); + module.addDeserializer(InternalResponse.class, InternalDeserializers.RESPONSE); module.addDeserializer(InvertedIndexPrimarySort.Field.class, InternalDeserializers.INVERTED_INDEX_PRIMARY_SORT_FIELD); } diff --git a/driver/src/main/java/com/arangodb/internal/serde/InternalSerializers.java b/driver/src/main/java/com/arangodb/internal/serde/InternalSerializers.java index 7e9688aad..7012f67fc 100644 --- a/driver/src/main/java/com/arangodb/internal/serde/InternalSerializers.java +++ b/driver/src/main/java/com/arangodb/internal/serde/InternalSerializers.java @@ -7,7 +7,7 @@ import com.arangodb.internal.velocystream.internal.JwtAuthenticationRequest; import com.arangodb.util.RawBytes; import com.arangodb.util.RawJson; -import com.arangodb.Request; +import com.arangodb.internal.InternalRequest; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.JsonSerializer; @@ -62,9 +62,9 @@ public void serialize(JwtAuthenticationRequest value, JsonGenerator gen, gen.writeEndArray(); } }; - static final JsonSerializer REQUEST = new JsonSerializer() { + static final JsonSerializer REQUEST = new JsonSerializer() { @Override - public void serialize(Request value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + public void serialize(InternalRequest value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeStartArray(); gen.writeNumber(value.getVersion()); gen.writeNumber(value.getType()); diff --git a/driver/src/main/java/com/arangodb/internal/util/RequestUtils.java b/driver/src/main/java/com/arangodb/internal/util/RequestUtils.java index 710fd8d0f..7074cfc3b 100644 --- a/driver/src/main/java/com/arangodb/internal/util/RequestUtils.java +++ b/driver/src/main/java/com/arangodb/internal/util/RequestUtils.java @@ -21,8 +21,8 @@ package com.arangodb.internal.util; import com.arangodb.internal.net.AccessType; -import com.arangodb.Request; -import com.arangodb.RequestType; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.RequestType; /** * @author Mark Vollmary @@ -35,11 +35,11 @@ private RequestUtils() { super(); } - public static Request allowDirtyRead(final Request request) { + public static InternalRequest allowDirtyRead(final InternalRequest request) { return request.putHeaderParam(HEADER_ALLOW_DIRTY_READ, "true"); } - public static AccessType determineAccessType(final Request request) { + public static AccessType determineAccessType(final InternalRequest request) { if (request.containsHeaderParam(HEADER_ALLOW_DIRTY_READ)) { return AccessType.DIRTY_READ; } diff --git a/driver/src/main/java/com/arangodb/internal/util/ResponseUtils.java b/driver/src/main/java/com/arangodb/internal/util/ResponseUtils.java index 8ff292b4f..73030fc8c 100644 --- a/driver/src/main/java/com/arangodb/internal/util/ResponseUtils.java +++ b/driver/src/main/java/com/arangodb/internal/util/ResponseUtils.java @@ -25,7 +25,7 @@ import com.arangodb.internal.ArangoErrors; import com.arangodb.internal.net.ArangoDBRedirectException; import com.arangodb.internal.serde.InternalSerde; -import com.arangodb.Response; +import com.arangodb.internal.InternalResponse; import java.util.concurrent.TimeoutException; @@ -42,7 +42,7 @@ private ResponseUtils() { super(); } - public static void checkError(final InternalSerde util, final Response response) { + public static void checkError(final InternalSerde util, final InternalResponse response) { final int responseCode = response.getResponseCode(); if (responseCode >= ERROR_STATUS) { if (responseCode == ERROR_INTERNAL && response.containsMeta(HEADER_ENDPOINT)) { diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java b/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java index 7b3a1d917..430af425f 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java +++ b/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunication.java @@ -34,8 +34,8 @@ import com.arangodb.internal.velocystream.internal.VstConnection; import com.arangodb.velocypack.VPackSlice; import com.arangodb.velocypack.exception.VPackParserException; -import com.arangodb.Request; -import com.arangodb.Response; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -138,32 +138,32 @@ public void close() throws IOException { hostHandler.close(); } - public R execute(final Request request, final HostHandle hostHandle) { + public R execute(final InternalRequest request, final HostHandle hostHandle) { return execute(request, hostHandle, 0); } - protected R execute(final Request request, final HostHandle hostHandle, final int attemptCount) { + protected R execute(final InternalRequest request, final HostHandle hostHandle, final int attemptCount) { final C connection = connect(hostHandle, RequestUtils.determineAccessType(request)); return execute(request, connection, attemptCount); } - protected abstract R execute(final Request request, C connection); + protected abstract R execute(final InternalRequest request, C connection); - protected abstract R execute(final Request request, C connection, final int attemptCount); + protected abstract R execute(final InternalRequest request, C connection, final int attemptCount); - protected void checkError(final Response response) { + protected void checkError(final InternalResponse response) { ResponseUtils.checkError(util, response); } - protected Response createResponse(final Message message) throws VPackParserException { - final Response response = util.deserialize(message.getHead().toByteArray(), Response.class); + protected InternalResponse createResponse(final Message message) throws VPackParserException { + final InternalResponse response = util.deserialize(message.getHead().toByteArray(), InternalResponse.class); if (message.getBody() != null) { response.setBody(message.getBody().toByteArray()); } return response; } - protected final Message createMessage(final Request request) throws VPackParserException { + protected final Message createMessage(final InternalRequest request) throws VPackParserException { request.putHeaderParam("accept", "application/x-velocypack"); request.putHeaderParam("content-type", "application/x-velocypack"); final long id = mId.incrementAndGet(); diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunicationSync.java b/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunicationSync.java index d1acdbc60..837e12d50 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunicationSync.java +++ b/driver/src/main/java/com/arangodb/internal/velocystream/VstCommunicationSync.java @@ -32,8 +32,8 @@ import com.arangodb.internal.velocystream.internal.Message; import com.arangodb.internal.velocystream.internal.VstConnectionSync; import com.arangodb.velocypack.exception.VPackParserException; -import com.arangodb.Request; -import com.arangodb.Response; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,7 +42,7 @@ /** * @author Mark Vollmary */ -public class VstCommunicationSync extends VstCommunication { +public class VstCommunicationSync extends VstCommunication { private static final Logger LOGGER = LoggerFactory.getLogger(VstCommunicationSync.class); @@ -54,16 +54,16 @@ protected VstCommunicationSync(final HostHandler hostHandler, final Integer time } @Override - protected Response execute(final Request request, final VstConnectionSync connection) { + protected InternalResponse execute(final InternalRequest request, final VstConnectionSync connection) { return execute(request, connection, 0); } @Override - protected Response execute(final Request request, final VstConnectionSync connection, final int attemptCount) { + protected InternalResponse execute(final InternalRequest request, final VstConnectionSync connection, final int attemptCount) { try { final Message requestMessage = createMessage(request); final Message responseMessage = send(requestMessage, connection); - final Response response = createResponse(responseMessage); + final InternalResponse response = createResponse(responseMessage); checkError(response); return response; } catch (final VPackParserException e) { @@ -89,13 +89,13 @@ private Message send(final Message message, final VstConnectionSync connection) @Override protected void authenticate(final VstConnectionSync connection) { - Request authRequest; + InternalRequest authRequest; if (jwt != null) { authRequest = new JwtAuthenticationRequest(jwt, ENCRYPTION_JWT); } else { authRequest = new AuthenticationRequest(user, password != null ? password : "", ENCRYPTION_PLAIN); } - final Response response = execute(authRequest, connection); + final InternalResponse response = execute(authRequest, connection); checkError(response); } @@ -169,7 +169,7 @@ public Builder connectionTtl(final Long connectionTtl) { return this; } - public VstCommunication build(final InternalSerde util) { + public VstCommunication build(final InternalSerde util) { return new VstCommunicationSync(hostHandler, timeout, user, password, jwt, useSsl, sslContext, util, chunksize, maxConnections, connectionTtl); diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/VstProtocol.java b/driver/src/main/java/com/arangodb/internal/velocystream/VstProtocol.java index 729c3028b..4782cea74 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/VstProtocol.java +++ b/driver/src/main/java/com/arangodb/internal/velocystream/VstProtocol.java @@ -23,8 +23,8 @@ import com.arangodb.internal.net.CommunicationProtocol; import com.arangodb.internal.net.HostHandle; import com.arangodb.internal.velocystream.internal.VstConnectionSync; -import com.arangodb.Request; -import com.arangodb.Response; +import com.arangodb.internal.InternalRequest; +import com.arangodb.internal.InternalResponse; import java.io.IOException; @@ -33,15 +33,15 @@ */ public class VstProtocol implements CommunicationProtocol { - private final VstCommunication communication; + private final VstCommunication communication; - public VstProtocol(final VstCommunication communication) { + public VstProtocol(final VstCommunication communication) { super(); this.communication = communication; } @Override - public Response execute(final Request request, final HostHandle hostHandle) { + public InternalResponse execute(final InternalRequest request, final HostHandle hostHandle) { return communication.execute(request, hostHandle); } diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java b/driver/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java index dd48dbc4b..a7498e4ce 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java +++ b/driver/src/main/java/com/arangodb/internal/velocystream/internal/AuthenticationRequest.java @@ -21,12 +21,12 @@ package com.arangodb.internal.velocystream.internal; import com.arangodb.DbName; -import com.arangodb.Request; +import com.arangodb.internal.InternalRequest; /** * @author Mark Vollmary */ -public class AuthenticationRequest extends Request { +public class AuthenticationRequest extends InternalRequest { private final String user; private final String password; diff --git a/driver/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java b/driver/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java index f2667b125..3d9fe56f9 100644 --- a/driver/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java +++ b/driver/src/main/java/com/arangodb/internal/velocystream/internal/JwtAuthenticationRequest.java @@ -1,9 +1,9 @@ package com.arangodb.internal.velocystream.internal; import com.arangodb.DbName; -import com.arangodb.Request; +import com.arangodb.internal.InternalRequest; -public class JwtAuthenticationRequest extends Request { +public class JwtAuthenticationRequest extends InternalRequest { private final String token; private final String encryption; // "jwt" diff --git a/driver/src/test/java/com/arangodb/ArangoDBTest.java b/driver/src/test/java/com/arangodb/ArangoDBTest.java index d54647b58..9f87115ce 100644 --- a/driver/src/test/java/com/arangodb/ArangoDBTest.java +++ b/driver/src/test/java/com/arangodb/ArangoDBTest.java @@ -22,9 +22,12 @@ import com.arangodb.entity.*; import com.arangodb.internal.config.FileConfigPropertiesProvider; +import com.arangodb.internal.serde.SerdeUtils; import com.arangodb.model.*; import com.arangodb.model.LogOptions.SortOrder; +import com.arangodb.util.RawJson; import com.arangodb.util.TestUtils; +import com.fasterxml.jackson.databind.JsonNode; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; @@ -390,9 +393,20 @@ void authenticationFailUser() { @ParameterizedTest(name = "{index}") @MethodSource("arangos") - void execute(ArangoDB arangoDB) { - final Response response = arangoDB.execute(new Request(DbName.SYSTEM, RequestType.GET, "/_api/version")); - assertThat(arangoDB.getSerde().parse(response.getBody(), "/version").isTextual()).isTrue(); + void executeGetVersion(ArangoDB arangoDB) { + Request request = Request.builder() + .db(DbName.SYSTEM) + .method(Request.Method.GET) + .path("/_api/version") + .queryParam("details", "true") + .build(); + final Response response = arangoDB.execute(request, RawJson.class); + JsonNode body = SerdeUtils.INSTANCE.parseJson(response.getBody().getValue()); + assertThat(body.get("version").isTextual()).isTrue(); + assertThat(body.get("details").isObject()).isTrue(); + String header = response.getHeaders().get("x-arango-queue-time-seconds"); + assertThat(header).isNotNull(); + assertThat(response.getResponseCode()).isEqualTo(200); } @ParameterizedTest(name = "{index}") diff --git a/driver/src/test/java/com/arangodb/ArangoRouteTest.java b/driver/src/test/java/com/arangodb/ArangoRouteTest.java deleted file mode 100644 index 768175fc6..000000000 --- a/driver/src/test/java/com/arangodb/ArangoRouteTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * DISCLAIMER - * - * Copyright 2018 ArangoDB GmbH, Cologne, Germany - * - * Licensed 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. - * - * Copyright holder is ArangoDB GmbH, Cologne, Germany - */ - -package com.arangodb; - -import com.arangodb.entity.BaseDocument; -import com.arangodb.internal.ArangoRequestParam; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; - -import java.util.UUID; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.catchThrowable; - -/** - * @author Mark Vollmary - * @author Michele Rastelli - */ -class ArangoRouteTest extends BaseJunit5 { - - private static final String COLLECTION_NAME = "ArangoRouteTest_collection"; - - @BeforeAll - static void init() { - initCollections(COLLECTION_NAME); - } - - @ParameterizedTest(name = "{index}") - @MethodSource("dbs") - void get(ArangoDatabase db) { - final Response res = db.route("/_api/version").get(); - assertThat(db.arango().getSerde().parse(res.getBody(), "/version").isTextual()).isTrue(); - } - - @ParameterizedTest(name = "{index}") - @MethodSource("dbs") - void withHeader(ArangoDatabase db) { - final BaseDocument doc = new BaseDocument(UUID.randomUUID().toString()); - String rev = db.collection(COLLECTION_NAME).insertDocument(doc).getRev(); - Throwable thrown = catchThrowable(() -> - db.route("/_api/document", COLLECTION_NAME, doc.getKey()).withHeader(ArangoRequestParam.IF_NONE_MATCH - , rev).get()); - assertThat(thrown).isInstanceOf(ArangoDBException.class); - ArangoDBException e = (ArangoDBException) thrown; - assertThat(e.getResponseCode()).isEqualTo(304); - } - - @ParameterizedTest(name = "{index}") - @MethodSource("dbs") - void withParentHeader(ArangoDatabase db) { - final BaseDocument doc = new BaseDocument(UUID.randomUUID().toString()); - String rev = db.collection(COLLECTION_NAME).insertDocument(doc).getRev(); - Throwable thrown = catchThrowable(() -> - db.route("/_api/document").withHeader(ArangoRequestParam.IF_NONE_MATCH, rev).route(COLLECTION_NAME, - doc.getKey()).get()); - assertThat(thrown).isInstanceOf(ArangoDBException.class); - ArangoDBException e = (ArangoDBException) thrown; - assertThat(e.getResponseCode()).isEqualTo(304); - } - -} diff --git a/driver/src/test/java/com/arangodb/JwtAuthTest.java b/driver/src/test/java/com/arangodb/JwtAuthTest.java index c56a5fb57..34d41a751 100644 --- a/driver/src/test/java/com/arangodb/JwtAuthTest.java +++ b/driver/src/test/java/com/arangodb/JwtAuthTest.java @@ -1,9 +1,7 @@ package com.arangodb; import com.arangodb.internal.config.FileConfigPropertiesProvider; -import com.arangodb.serde.ArangoSerde; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; @@ -32,17 +30,19 @@ static void init() { } private static String getJwt(ArangoDB arangoDB) { - ArangoSerde serde = arangoDB.getSerde(); Map reqBody = new HashMap<>(); reqBody.put("username", "root"); reqBody.put("password", "test"); - Request req = new Request(DbName.SYSTEM, RequestType.POST, "/_open/auth"); - req.setBody(serde.serialize(reqBody)); + Request req = Request.builder() + .db(DbName.SYSTEM) + .method(Request.Method.POST) + .path("/_open/auth") + .body(reqBody) + .build(); - Response resp = arangoDB.execute(req); - Map respBody = serde.deserialize(resp.getBody(), Map.class); - return respBody.get("jwt"); + Response resp = arangoDB.execute(req, Map.class); + return (String) resp.getBody().get("jwt"); } @ParameterizedTest diff --git a/driver/src/test/java/com/arangodb/async/ArangoDBTest.java b/driver/src/test/java/com/arangodb/async/ArangoDBTest.java index 5aa0cfbeb..34d645582 100644 --- a/driver/src/test/java/com/arangodb/async/ArangoDBTest.java +++ b/driver/src/test/java/com/arangodb/async/ArangoDBTest.java @@ -23,10 +23,10 @@ import com.arangodb.*; import com.arangodb.entity.*; import com.arangodb.internal.config.FileConfigPropertiesProvider; +import com.arangodb.internal.serde.SerdeUtils; import com.arangodb.model.*; +import com.arangodb.util.RawJson; import com.arangodb.util.TestUtils; -import com.arangodb.Request; -import com.arangodb.RequestType; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; @@ -444,10 +444,14 @@ void authenticationFailUser() throws InterruptedException { @Test void execute() throws InterruptedException, ExecutionException { arangoDB - .execute(new Request(DbName.SYSTEM, RequestType.GET, "/_api/version")) + .execute(Request.builder() + .db(DbName.SYSTEM) + .method(Request.Method.GET) + .path("/_api/version") + .build(), RawJson.class) .whenComplete((response, ex) -> { assertThat(response.getBody()).isNotNull(); - assertThat(arangoDB.getSerde().parse(response.getBody(), "/version").isTextual()).isTrue(); + assertThat(SerdeUtils.INSTANCE.parseJson(response.getBody().getValue()).get("version").isTextual()).isTrue(); }) .get(); } @@ -458,10 +462,14 @@ void execute_acquireHostList_enabled() throws InterruptedException, ExecutionExc .loadProperties(new FileConfigPropertiesProvider()) .acquireHostList(true).build(); arangoDB - .execute(new Request(DbName.SYSTEM, RequestType.GET, "/_api/version")) + .execute(Request.builder() + .db(DbName.SYSTEM) + .method(Request.Method.GET) + .path("/_api/version") + .build(), RawJson.class) .whenComplete((response, ex) -> { assertThat(response.getBody()).isNotNull(); - assertThat(arangoDB.getSerde().parse(response.getBody(), "/version").isTextual()).isTrue(); + assertThat(SerdeUtils.INSTANCE.parseJson(response.getBody().getValue()).get("version").isTextual()).isTrue(); }) .get(); } diff --git a/driver/src/test/java/com/arangodb/async/JwtAuthTest.java b/driver/src/test/java/com/arangodb/async/JwtAuthTest.java index e0c8717cc..f821f3ea9 100644 --- a/driver/src/test/java/com/arangodb/async/JwtAuthTest.java +++ b/driver/src/test/java/com/arangodb/async/JwtAuthTest.java @@ -1,13 +1,7 @@ package com.arangodb.async; -import com.arangodb.ArangoDB; -import com.arangodb.ArangoDBException; -import com.arangodb.DbName; +import com.arangodb.*; import com.arangodb.internal.config.FileConfigPropertiesProvider; -import com.arangodb.serde.ArangoSerde; -import com.arangodb.Request; -import com.arangodb.RequestType; -import com.arangodb.Response; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; @@ -35,17 +29,19 @@ static void init() { } private static String getJwt(ArangoDB arangoDB) { - ArangoSerde serde = arangoDB.getSerde(); Map reqBody = new HashMap<>(); reqBody.put("username", "root"); reqBody.put("password", "test"); - Request req = new Request(DbName.SYSTEM, RequestType.POST, "/_open/auth"); - req.setBody(serde.serialize(reqBody)); + Request req = Request.builder() + .db(DbName.SYSTEM) + .method(Request.Method.POST) + .path("/_open/auth") + .body(reqBody) + .build(); - Response resp = arangoDB.execute(req); - Map respBody = serde.deserialize(resp.getBody(), Map.class); - return respBody.get("jwt"); + Response resp = arangoDB.execute(req, Map.class); + return (String) resp.getBody().get("jwt"); } @AfterEach diff --git a/driver/src/test/java/perf/SyncBenchmarkTest.java b/driver/src/test/java/perf/SyncBenchmarkTest.java index fceb46685..f30ef331a 100644 --- a/driver/src/test/java/perf/SyncBenchmarkTest.java +++ b/driver/src/test/java/perf/SyncBenchmarkTest.java @@ -4,7 +4,6 @@ import com.arangodb.DbName; import com.arangodb.Protocol; import com.arangodb.Request; -import com.arangodb.RequestType; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; @@ -47,12 +46,16 @@ void getVersionWithDetails(Protocol protocol) { ArangoDB adb = new ArangoDB.Builder().useProtocol(protocol).build(); Benchmark benchmark = new Benchmark(warmupDurationSeconds, numberOfRequests) { - private final Request request = new Request(DbName.SYSTEM, RequestType.GET, - "/_api/version").putQueryParam("details", true); + private final Request request = Request.builder() + .db(DbName.SYSTEM) + .method(Request.Method.GET) + .path("/_api/version") + .queryParam("details", "true") + .build(); @Override protected void sendRequest() { - adb.execute(request); + adb.execute(request, Void.class); } @Override