@Override public Optional<JsonKey> getLeaf() { return jsonPointer.getLeaf(); }
@Override public Optional<JsonKey> getLeaf() { return jsonPointer.getLeaf(); }
private static String leafValue(final JsonPointer path) { return path.getLeaf().orElseThrow(() -> UnknownPathException.newBuilder(path).build()).toString(); }
private static String leafValue(final JsonPointer path) { return path.getLeaf().orElseThrow(() -> UnknownPathException.newBuilder(path).build()).toString(); }
@Override public <T> JsonObject set(final JsonFieldDefinition<T> fieldDefinition, @Nullable final T value) { requireNonNull(fieldDefinition, "The JSON field definition to set the value for must not be null!"); final JsonPointer pointer = fieldDefinition.getPointer(); final JsonKey leafKey = pointer.getLeaf().orElseThrow(() -> { final String msgTemplate = "The pointer of the field definition <{0}> must not be empty!"; return new IllegalArgumentException(MessageFormat.format(msgTemplate, fieldDefinition)); }); final JsonField field = JsonFactory.newField(leafKey, JsonFactory.getAppropriateValue(value), fieldDefinition); return setFieldInHierarchy(this, pointer, field); }
@Override public <T> JsonObjectBuilder set(final JsonFieldDefinition<T> fieldDefinition, @Nullable final T value, final Predicate<JsonField> predicate) { requireNonNull(fieldDefinition, "The definition of the JSON field to set the value for must not be null!"); checkPredicate(predicate); final JsonPointer pointer = fieldDefinition.getPointer(); pointer.getLeaf() .map(leafKey -> JsonFactory.newField(leafKey, JsonFactory.getAppropriateValue(value), fieldDefinition)) .filter(predicate) .ifPresent(jsonField -> setFieldInHierarchy(this, pointer, jsonField)); return this; }
@Override public <T> JsonObject set(final JsonFieldDefinition<T> fieldDefinition, @Nullable final T value) { requireNonNull(fieldDefinition, "The JSON field definition to set the value for must not be null!"); final JsonPointer pointer = fieldDefinition.getPointer(); final JsonKey leafKey = pointer.getLeaf().orElseThrow(() -> { final String msgTemplate = "The pointer of the field definition <{0}> must not be empty!"; return new IllegalArgumentException(MessageFormat.format(msgTemplate, fieldDefinition)); }); final JsonField field = JsonField.newInstance(leafKey, JsonValue.of(value), fieldDefinition); return setFieldInHierarchy(this, pointer, field); }
@Override public <T> JsonObjectBuilder set(final JsonFieldDefinition<T> fieldDefinition, @Nullable final T value, final Predicate<JsonField> predicate) { requireNonNull(fieldDefinition, "The definition of the JSON field to set the value for must not be null!"); checkPredicate(predicate); final JsonPointer pointer = fieldDefinition.getPointer(); pointer.getLeaf() .map(leafKey -> JsonFactory.newField(leafKey, JsonFactory.getAppropriateValue(value), fieldDefinition)) .filter(predicate) .ifPresent(jsonField -> setFieldInHierarchy(this, pointer, jsonField)); return this; }
@Override public ImmutableJsonObjectBuilder set(final CharSequence key, final JsonValue value, final Predicate<JsonField> predicate) { final JsonPointer pointer = JsonFactory.getNonEmptyPointer(key); checkValue(value); checkPredicate(predicate); pointer.getLeaf() .map(leafKey -> JsonFactory.newField(leafKey, value)) .filter(predicate) .ifPresent(jsonField -> setFieldInHierarchy(this, pointer, jsonField)); return this; }
@Override public JsonObject setValue(final CharSequence key, final JsonValue value) { final JsonPointer pointer = JsonFactory.getNonEmptyPointer(key); final JsonKey leafKey = pointer.getLeaf().orElse(ROOT_KEY); final Optional<JsonFieldDefinition> keyDefinition = getDefinitionForKey(leafKey); return setFieldInHierarchy(this, pointer, JsonFactory.newField(leafKey, value, keyDefinition.orElse(null))); }
@Override public JsonObject setValue(final CharSequence key, final JsonValue value) { final JsonPointer pointer = JsonFactory.getNonEmptyPointer(key); final JsonKey leafKey = pointer.getLeaf().orElse(ROOT_KEY); final Optional<JsonFieldDefinition> keyDefinition = getDefinitionForKey(leafKey); return setFieldInHierarchy(this, pointer, JsonField.newInstance(leafKey, value, keyDefinition.orElse(null))); }
@Override public ImmutableJsonObjectBuilder set(final CharSequence key, final JsonValue value, final Predicate<JsonField> predicate) { final JsonPointer pointer = JsonFactory.getNonEmptyPointer(key); checkValue(value); checkPredicate(predicate); pointer.getLeaf() .map(leafKey -> JsonFactory.newField(leafKey, value)) .filter(predicate) .ifPresent(jsonField -> setFieldInHierarchy(this, pointer, jsonField)); return this; }
/** * Verifies that the actual JSON pointer has the specified leaf. * * @param expectedLeaf the expected leaf of the actual JSON pointer. * @return this assert to allow method chaining. */ public JsonPointerAssert hasLeaf(final JsonKey expectedLeaf) { isNotNull(); final Optional<JsonKey> actualLeaf = actual.getLeaf(); Assertions.assertThat(actualLeaf) .overridingErrorMessage("Expected <%s> to have leaf <%s> but it had <%s>", actual, expectedLeaf, actualLeaf.orElse(null)) .contains(expectedLeaf); return myself; }