@Override public Optional<JsonField> getField(final CharSequence key) { return wrapped.getField(key); }
@Override public Optional<JsonField> getField(final CharSequence key) { return wrapped.getField(key); }
@Override public Optional<JsonField> getField(final CharSequence key) { return wrapped.getField(key); }
@Override public Optional<JsonField> getField(final CharSequence key) { return wrapped.getField(key); }
@Override public Optional<JsonField> getField(final CharSequence key) { requireNonNull(key, "The key or pointer of the field to be retrieved must not be null!"); final JsonPointer pointer = JsonFactory.newPointer(key); Optional<JsonField> result = pointer.getRoot() .map(JsonKey::toString) .map(fields::get); if (1 < pointer.getLevelCount()) { result = result.map(JsonField::getValue) .filter(JsonValue::isObject) .map(JsonValue::asObject) .flatMap(jsonObject -> jsonObject.getField(pointer.nextLevel())); // Recursion } return result; }
@Override public Optional<JsonField> getField(final CharSequence key) { requireNonNull(key, "The key or pointer of the field to be retrieved must not be null!"); final JsonPointer pointer = JsonPointer.of(key); Optional<JsonField> result = pointer.getRoot() .map(JsonKey::toString) .map(fieldMap::getOrNull); if (1 < pointer.getLevelCount()) { result = result.map(JsonField::getValue) .filter(JsonValue::isObject) .map(JsonValue::asObject) .flatMap(jsonObject -> jsonObject.getField(pointer.nextLevel())); // Recursion } return result; }
@SuppressWarnings("unchecked") private static JsonObject filterByTrie(final JsonObject self, final JsonFieldSelectorTrie trie) { if (trie.isEmpty()) { return self; } final JsonObjectBuilder builder = JsonFactory.newObjectBuilder(); for (final JsonKey key : trie.getKeys()) { self.getField(key).ifPresent(child -> { final JsonValue childValue = child.getValue(); final JsonValue filteredChildValue = childValue.isObject() ? filterByTrie(childValue.asObject(), trie.descend(key)) : childValue; final Optional<JsonFieldDefinition> childFieldDefinition = child.getDefinition(); if (childFieldDefinition.isPresent()) { builder.set(childFieldDefinition.get(), filteredChildValue); } else { builder.set(key, filteredChildValue); } }); } return builder.build(); }
@SuppressWarnings("unchecked") private static JsonObject filterByTrie(final JsonObject self, final JsonFieldSelectorTrie trie) { if (trie.isEmpty()) { return self; } final JsonObjectBuilder builder = JsonObject.newBuilder(); for (final JsonKey key : trie.getKeys()) { self.getField(key).ifPresent(child -> { final JsonValue childValue = child.getValue(); final JsonValue filteredChildValue = childValue.isObject() ? filterByTrie(childValue.asObject(), trie.descend(key)) : childValue; final Optional<JsonFieldDefinition> childFieldDefinition = child.getDefinition(); if (childFieldDefinition.isPresent()) { builder.set(childFieldDefinition.get(), filteredChildValue); } else { builder.set(key, filteredChildValue); } }); } return builder.build(); }
private void isEqualTo(final Iterable<JsonField> expectedFields, final boolean compareFieldDefinitions) { isNotNull(); final Collection<JsonField> missingFields = new ArrayList<>(); for (final JsonField expectedField : expectedFields) { final Optional<JsonField> actualFieldOptional = actual.getField(expectedField.getKey()); if (!actualFieldOptional.isPresent()) { missingFields.add(expectedField); } else { compareFields(expectedField, actualFieldOptional.get(), compareFieldDefinitions); } } Assertions.assertThat(missingFields) .overridingErrorMessage("Expected JSON object to contain \n<%s> but it did not contain \n<%s>", expectedFields, missingFields) .isEmpty(); final Collection<JsonField> unexpectedActualFields = new ArrayList<>(); for (final JsonField actualField : actual) { final Optional<JsonField> expectedFieldOptional = getField(expectedFields, actualField.getKey()); if (!expectedFieldOptional.isPresent()) { unexpectedActualFields.add(actualField); } } Assertions.assertThat(unexpectedActualFields) .overridingErrorMessage("Expected JSON object not to contain\n<%s> but it did", unexpectedActualFields) .isEmpty(); }