/** * @param response The {@link HttpResponse} * @return {@link Response} */ private Response getResponse(HttpResponse response) throws CouchDbException { InputStreamReader reader = new InputStreamReader(getStream(response), Charsets.UTF_8); return getGson().fromJson(reader, Response.class); }
/** * Performs a HTTP GET request. * @return {@link InputStream} */ InputStream get(HttpGet httpGet) { HttpResponse response = executeRequest(httpGet); return getStream(response); }
/** * @param response The {@link HttpResponse} * @return {@link Response} */ private List<Response> getResponseList(HttpResponse response) throws CouchDbException { InputStream instream = getStream(response); Reader reader = new InputStreamReader(instream, Charsets.UTF_8); return getGson().fromJson(reader, new TypeToken<List<Response>>(){}.getType()); }
/** * Queries a view as an {@link InputStream} * <p>The stream should be properly closed after usage, as to avoid connection leaks. * @return The result as an {@link InputStream}. */ public InputStream queryForStream() { URI uri = uriBuilder.build(); if(allDocsKeys != null) { // bulk docs return getStream(dbc.post(uri, allDocsKeys)); } return dbc.get(uri); }
/** * Find documents using a declarative JSON querying syntax. * @param <T> The class type. * @param jsonQuery The JSON query string. * @param classOfT The class of type T. * @return The result of the query as a {@code List<T> } * @throws CouchDbException If the query failed to execute or the request is invalid. */ public <T> List<T> findDocs(String jsonQuery, Class<T> classOfT) { assertNotEmpty(jsonQuery, "jsonQuery"); HttpResponse response = null; try { response = post(buildUri(getDBUri()).path("_find").build(), jsonQuery); Reader reader = new InputStreamReader(getStream(response), Charsets.UTF_8); JsonArray jsonArray = new JsonParser().parse(reader) .getAsJsonObject().getAsJsonArray("docs"); List<T> list = new ArrayList<T>(); for (JsonElement jsonElem : jsonArray) { JsonElement elem = jsonElem.getAsJsonObject(); T t = this.gson.fromJson(elem, classOfT); list.add(t); } return list; } finally { close(response); } }
/** * Triggers a replication request. * @return {@link ReplicationResult} */ public ReplicationResult trigger() { assertNotEmpty(source, "Source"); assertNotEmpty(target, "Target"); HttpResponse response = null; try { JsonObject json = createJson(); if(log.isDebugEnabled()) { log.debug(json); } final URI uri = buildUri(dbc.getBaseUri()).path("_replicate").build(); response = dbc.post(uri, json.toString()); final InputStreamReader reader = new InputStreamReader(getStream(response), Charsets.UTF_8); return dbc.getGson().fromJson(reader, ReplicationResult.class); } finally { close(response); } }
/** * Invokes an Update Handler. * <pre> * Params params = new Params() * .addParam("field", "foo") * .addParam("value", "bar"); * String output = dbClient.invokeUpdateHandler("designDoc/update1", "docId", params); * </pre> * @param updateHandlerUri The Update Handler URI, in the format: <code>designDoc/update1</code> * @param docId The document id to update. * @param params The query parameters as {@link Params}. * @return The output of the request. */ public String invokeUpdateHandler(String updateHandlerUri, String docId, Params params) { assertNotEmpty(updateHandlerUri, "uri"); assertNotEmpty(docId, "docId"); final String[] v = updateHandlerUri.split("/"); final String path = String.format("_design/%s/_update/%s/", v[0], v[1]); final URI uri = buildUri(getDBUri()).path(path).path(docId).query(params).build(); final HttpResponse response = executeRequest(new HttpPut(uri)); return streamToString(getStream(response)); }