private List<KnapsackState> get(String name) throws IOException { ImmutableList.Builder<KnapsackState> builder = ImmutableList.builder(); try { logger.debug("get knapsack states: {}", name); final Client client = injector.getInstance(Client.class); createIndexIfNotExist(client); GetResponse getResponse = client.prepareGet(INDEX_NAME, MAPPING_NAME, name).execute().actionGet(); if (!getResponse.isExists()) { return builder.build(); } XContentParser parser = xContent(JSON).createParser(getResponse.getSourceAsBytes()); while (parser.nextToken() != START_ARRAY) { // forward } while (parser.nextToken() != END_ARRAY) { KnapsackState state = new KnapsackState(); builder.add(state.fromXContent(parser)); } return builder.build(); } catch (Throwable t) { logger.error("get settings failed", t); return null; } }
private static XContentBuilder generate(List<KnapsackState> values) throws IOException { XContentBuilder builder = jsonBuilder(); builder.startObject(); builder.startArray("array"); for (KnapsackState value : values) { value.toXContent(builder, EMPTY_PARAMS); } builder.endArray(); builder.endObject(); return builder; }
private void remove(String name, List<KnapsackState> values, KnapsackState targetValue) throws IOException { logger.debug("remove: {} -> {}", name, values); ImmutableList.Builder<KnapsackState> updatedValues = ImmutableList.builder(); for (KnapsackState value : values) { if (!value.equals(targetValue)) { updatedValues.add(value); } } put(name, generate(updatedValues.build())); }