@Override public ConsulClient getValuesWithOptions(String keyPrefix, BlockingQueryOptions options, Handler<AsyncResult<KeyValueList>> resultHandler) { Query query = Query.of("recurse", true).put(options); request(KV_VALID_CODES, HttpMethod.GET, "/v1/kv/" + urlEncode(keyPrefix), query, null, resultHandler, resp -> { if (resp.statusCode() == HttpResponseStatus.NOT_FOUND.code()) { return new KeyValueList(); } else { List<KeyValue> list = resp.bodyAsJsonArray().stream().map(obj -> KVParser.parse((JsonObject) obj)).collect(Collectors.toList()); return new KeyValueList().setList(list).setIndex(Long.parseLong(resp.headers().get(INDEX_HEADER))); } }); return this; }
@Test public void testKeyValueListCopy() { List<KeyValue> list = new ArrayList<>(); list.add(randomKeyValue()); list.add(randomKeyValue()); KeyValueList kvList = new KeyValueList() .setList(list) .setIndex(randomLong()); checkKeyValueList(kvList, new KeyValueList(kvList)); checkKeyValueList(kvList, new KeyValueList(kvList.toJson())); List<KeyValue> shuffled = new ArrayList<>(); shuffled.add(list.get(1)); shuffled.add(list.get(0)); KeyValueList kvShuffled = new KeyValueList() .setList(shuffled) .setIndex(kvList.getIndex()); checkKeyValueList(kvList, kvShuffled); }