package org.arangodb.objectmapper.http; import java.io.InputStream; import org.arangodb.objectmapper.ArangoDb4JException; /** * Original file from "Java API for CouchDB http://www.ektorp.org" * * @author henrik lundgren * */ public class RestHandler { private final ArangoDbHttpClient client; public RestHandler(ArangoDbHttpClient client) { this.client = client; } public ArangoDbHttpClient getClient() { return client; } public <T> T get(String path, ResponseCallback<T> callback) throws ArangoDb4JException { ArangoDbHttpResponse hr = client.get(path); return handleResponse(callback, hr); } public void put(String path) throws ArangoDb4JException { handleVoidResponse(client.put(path)); } public <T> T put(String path, String content, ResponseCallback<T> callback) throws ArangoDb4JException { return handleResponse(callback, client.put(path, content)); } public void put(String path, String content) throws ArangoDb4JException { handleVoidResponse(client.put(path, content)); } public void put(String path, InputStream data, String contentType, long contentLength) throws ArangoDb4JException { handleVoidResponse(client.put(path, data, contentType, contentLength)); } public <T> T put(String path, InputStream data, String contentType, long contentLength, ResponseCallback<T> callback) throws ArangoDb4JException { return handleResponse(callback, client.put(path, data, contentType, contentLength)); } public <T> T post(String path, String content, ResponseCallback<T> callback) throws ArangoDb4JException { return handleResponse(callback, client.post(path, content)); } public <T> T post(String path, InputStream content, ResponseCallback<T> callback) throws ArangoDb4JException { return handleResponse(callback, client.post(path, content)); } public <T> T patch(String path, String content, ResponseCallback<T> callback) throws ArangoDb4JException { return handleResponse(callback, client.patch(path, content)); } public <T> T patch(String path, InputStream content, ResponseCallback<T> callback) throws ArangoDb4JException { return handleResponse(callback, client.patch(path, content)); } public <T> T delete(String path, ResponseCallback<T> callback) throws ArangoDb4JException { return handleResponse(callback, client.delete(path)); } public void delete(String path) throws ArangoDb4JException { handleVoidResponse(client.delete(path)); } public <T> T head(String path, ResponseCallback<T> callback) throws ArangoDb4JException { return handleResponse(callback, client.head(path)); } private void handleVoidResponse(ArangoDbHttpResponse hr) throws ArangoDb4JException { if (hr == null) return; try { if (!hr.isSuccessful()) { new ResponseCallback<Void>().error(hr); } } finally { hr.releaseConnection(); } } private <T> T handleResponse(ResponseCallback<T> callback, ArangoDbHttpResponse hr) throws ArangoDb4JException { try { return hr.isSuccessful() ? callback.success(hr) : callback.error(hr); } catch (ArangoDb4JException e) { throw e; } finally { hr.releaseConnection(); } } }