@Override public JsonPointer createPointer(String jsonPointer) { return new JsonPointerImpl(jsonPointer); }
/** * Replaces the value at the referenced location in the specified * {@code target} with the specified {@code value}. * * @param target the target referenced by this {@code JsonPointer} * @param value the value to be stored at the referenced location * @return the transformed {@code target} after the value is replaced. * @throws NullPointerException if {@code target} is {@code null} * @throws JsonException if the referenced value does not exist, * or if the reference is the target. */ @Override public JsonStructure replace(JsonStructure target, JsonValue value) { return execute(NodeReference::replace, target, value); }
/** * Returns {@code true} if there is a value at the referenced location in the specified {@code target}. * * @param target the target referenced by this {@code JsonPointer} * @return {@code true} if this pointer points to a value in a specified {@code target}. */ @Override public boolean containsValue(JsonStructure target) { NodeReference[] refs = getReferences(target); return refs[0].contains(); }
int index = getIndex(tokens[i]); JsonArray array = (JsonArray) value; references[s-i-1] = NodeReference.of(array, index);
int index = getIndex(tokens[i]); JsonArray array = (JsonArray) value; references[s-i-1] = NodeReference.of(array, index);
/** * Returns the value at the referenced location in the specified {@code target} * * @param target the target referenced by this {@code JsonPointer} * @return the referenced value in the target. * @throws NullPointerException if {@code target} is null * @throws JsonException if the referenced value does not exist */ @Override public JsonValue getValue(JsonStructure target) { NodeReference[] refs = getReferences(target); return refs[0].get(); }
/** * Adds or replaces a value at the referenced location in the specified * {@code target} with the specified {@code value}. * <ol> * <li>If the reference is the target (empty JSON Pointer string), * the specified {@code value}, which must be the same type as * specified {@code target}, is returned.</li> * <li>If the reference is an array element, the specified {@code value} is inserted * into the array, at the referenced index. The value currently at that location, and * any subsequent values, are shifted to the right (adds one to the indices). * Index starts with 0. If the reference is specified with a "-", or if the * index is equal to the size of the array, the value is appended to the array.</li> * <li>If the reference is a name/value pair of a {@code JsonObject}, and the * referenced value exists, the value is replaced by the specified {@code value}. * If the value does not exist, a new name/value pair is added to the object.</li> * </ol> * * @param target the target referenced by this {@code JsonPointer} * @param value the value to be added * @return the transformed {@code target} after the value is added. * @throws NullPointerException if {@code target} is {@code null} * @throws JsonException if the reference is an array element and * the index is out of range ({@code index < 0 || index > array size}), * or if the pointer contains references to non-existing objects or arrays. */ @Override public JsonStructure add(JsonStructure target, JsonValue value) { return execute(NodeReference::add, target, value); }
@Override public JsonPointer createPointer(String jsonPointer) { return new JsonPointerImpl(jsonPointer); }
int index = getIndex(tokens[i]); JsonArray array = (JsonArray) value; references[s-i-1] = NodeReference.of(array, index);
/** * Executes the operation * @param op a {code BiFunction} used to specify the operation to execute on * the leaf node of the Json Pointer * @param target the target JsonStructure for this JsonPointer * @param value the JsonValue for add and replace, can be null for getvalue and remove */ private JsonStructure execute(BiFunction<NodeReference, JsonValue, JsonStructure> op, JsonStructure target, JsonValue value) { NodeReference[] refs = getReferences(target); JsonStructure result = op.apply(refs[0], value); for (int i = 1; i < refs.length; i++) { result = refs[i].replace(result); } return result; }
/** * Removes the value at the reference location in the specified {@code target} * * @param target the target referenced by this {@code JsonPointer} * @return the transformed {@code target} after the value is removed. * @throws NullPointerException if {@code target} is {@code null} * @throws JsonException if the referenced value does not exist, * or if the reference is the target. */ @Override public JsonStructure remove(JsonStructure target) { return execute((r,v)->r.remove(), target, null); }
@Override public JsonPointer createPointer(String jsonPointer) { return new JsonPointerImpl(jsonPointer); }
int index = getIndex(tokens[i]); JsonArray array = (JsonArray) value; references[s-i-1] = NodeReference.of(array, index);
/** * Returns {@code true} if there is a value at the referenced location in the specified {@code target}. * * @param target the target referenced by this {@code JsonPointer} * @return {@code true} if this pointer points to a value in a specified {@code target}. */ @Override public boolean containsValue(JsonStructure target) { NodeReference[] refs = getReferences(target); return refs[0].contains(); }
/** * Replaces the value at the referenced location in the specified * {@code target} with the specified {@code value}. * * @param target the target referenced by this {@code JsonPointer} * @param value the value to be stored at the referenced location * @return the transformed {@code target} after the value is replaced. * @throws NullPointerException if {@code target} is {@code null} * @throws JsonException if the referenced value does not exist, * or if the reference is the target. */ @Override public JsonStructure replace(JsonStructure target, JsonValue value) { return execute(NodeReference::replace, target, value); }
@Override public JsonPointer createPointer(String jsonPointer) { return new JsonPointerImpl(jsonPointer); }
int index = getIndex(tokens[i]); JsonArray array = (JsonArray) value; references[s-i-1] = NodeReference.of(array, index);
/** * Returns the value at the referenced location in the specified {@code target} * * @param target the target referenced by this {@code JsonPointer} * @return the referenced value in the target. * @throws NullPointerException if {@code target} is null * @throws JsonException if the referenced value does not exist */ @Override public JsonValue getValue(JsonStructure target) { NodeReference[] refs = getReferences(target); return refs[0].get(); }
/** * Adds or replaces a value at the referenced location in the specified * {@code target} with the specified {@code value}. * <ol> * <li>If the reference is the target (empty JSON Pointer string), * the specified {@code value}, which must be the same type as * specified {@code target}, is returned.</li> * <li>If the reference is an array element, the specified {@code value} is inserted * into the array, at the referenced index. The value currently at that location, and * any subsequent values, are shifted to the right (adds one to the indices). * Index starts with 0. If the reference is specified with a "-", or if the * index is equal to the size of the array, the value is appended to the array.</li> * <li>If the reference is a name/value pair of a {@code JsonObject}, and the * referenced value exists, the value is replaced by the specified {@code value}. * If the value does not exist, a new name/value pair is added to the object.</li> * </ol> * * @param target the target referenced by this {@code JsonPointer} * @param value the value to be added * @return the transformed {@code target} after the value is added. * @throws NullPointerException if {@code target} is {@code null} * @throws JsonException if the reference is an array element and * the index is out of range ({@code index < 0 || index > array size}), * or if the pointer contains references to non-existing objects or arrays. */ @Override public JsonStructure add(JsonStructure target, JsonValue value) { return execute(NodeReference::add, target, value); }
@Override public JsonPointer createPointer(String jsonPointer) { return new JsonPointerImpl(jsonPointer); }