@Override public JsonPointer nextLevel() { return jsonPointer.nextLevel(); }
@Override public JsonPointer nextLevel() { return jsonPointer.nextLevel(); }
@Override public Optional<String> getFeatureId() { return jsonPointer.getRoot() .filter(FEATURES::equals) .map(features -> jsonPointer.nextLevel()) .flatMap(JsonPointer::getRoot) .map(JsonKey::toString); }
@Override public Optional<String> getFeatureId() { return jsonPointer.getRoot() .filter(FEATURES::equals) .map(features -> jsonPointer.nextLevel()) .flatMap(JsonPointer::getRoot) .map(JsonKey::toString); }
@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; }
private Optional<JsonValue> getValueForPointer(final JsonPointer pointer) { final Optional<JsonValue> result; final JsonKey rootKey = pointer.getRoot().orElse(ROOT_KEY); final int levelCount = pointer.getLevelCount(); if (0 == levelCount) { result = Optional.of(this); } else if (1 == levelCount) { // same as getting a value for a key result = getValueForKey(rootKey); } else { result = getValueForKey(rootKey) .filter(JsonValue::isObject) .map(JsonValue::asObject) .flatMap(jsonObject -> jsonObject.getValue(pointer.nextLevel())); } return result; }
private Optional<JsonValue> getValueForPointer(final JsonPointer pointer) { final Optional<JsonValue> result; final JsonKey rootKey = pointer.getRoot().orElse(ROOT_KEY); final int levelCount = pointer.getLevelCount(); if (0 == levelCount) { result = Optional.of(this); } else if (1 == levelCount) { // same as getting a value for a key result = getValueForKey(rootKey); } else { result = getValueForKey(rootKey) .filter(JsonValue::isObject) .map(JsonValue::asObject) .flatMap(jsonObject -> jsonObject.getValue(pointer.nextLevel())); } return result; }
@Override public boolean contains(final CharSequence key) { requireNonNull(key, "The key or pointer to check the existence of a value for must not be null!"); final boolean result; final JsonPointer pointer = JsonFactory.newPointer(key); if (1 >= pointer.getLevelCount()) { result = pointer.getRoot().map(this::containsKey).orElse(false); } else { result = pointer.getRoot() .flatMap(this::getValueForKey) .map(jsonValue -> !jsonValue.isObject() || jsonValue.asObject().contains(pointer.nextLevel())) // Recursion .orElse(false); } return result; }
private static JsonObject setFieldInHierarchy(final JsonObject target, final JsonPointer pointer, final JsonField jsonField) { if (1 >= pointer.getLevelCount()) { return target.set(jsonField); } final JsonKey rootKey = pointer.getRoot().orElse(ROOT_KEY); final JsonObject newTarget = target.getValue(rootKey) .filter(JsonValue::isObject) .filter(jsonValue -> !jsonValue.isNull()) .map(JsonValue::asObject) .orElseGet(ImmutableJsonObject::empty); // let the recursion begin ]:-) return target.setValue(rootKey, setFieldInHierarchy(newTarget, pointer.nextLevel(), jsonField)); }
@Override public boolean contains(final CharSequence key) { requireNonNull(key, "The key or pointer to check the existence of a value for must not be null!"); final boolean result; final JsonPointer pointer = JsonPointer.of(key); if (1 >= pointer.getLevelCount()) { result = pointer.getRoot().map(this::containsKey).orElse(false); } else { result = pointer.getRoot() .flatMap(this::getValueForKey) .map(jsonValue -> !jsonValue.isObject() || jsonValue.asObject().contains(pointer.nextLevel())) // Recursion .orElse(false); } return result; }
private static JsonObject setFieldInHierarchy(final JsonObject target, final JsonPointer pointer, final JsonField jsonField) { if (1 >= pointer.getLevelCount()) { return target.set(jsonField); } final JsonKey rootKey = pointer.getRoot().orElse(ROOT_KEY); final JsonObject newTarget = target.getValue(rootKey) .filter(JsonValue::isObject) .filter(jsonValue -> !jsonValue.isNull()) .map(JsonValue::asObject) .orElseGet(ImmutableJsonObject::empty); // let the recursion begin ]:-) return target.setValue(rootKey, setFieldInHierarchy(newTarget, pointer.nextLevel(), jsonField)); }
private JsonObject removeForPointer(final JsonPointer pointer) { final JsonObject result; final JsonKey rootKey = pointer.getRoot().orElse(ROOT_KEY); final Optional<JsonFieldDefinition> rootKeyDefinition = getDefinitionForKey(rootKey); if (pointer.isEmpty()) { result = this; } else if (1 == pointer.getLevelCount()) { result = removeValueForKey(rootKey); } else { final JsonPointer nextPointerLevel = pointer.nextLevel(); final Predicate<JsonObject> containsNextLevelRootKey = jsonObject -> nextPointerLevel.getRoot() .map(jsonObject::contains) .orElse(false); result = getValueForKey(rootKey) .filter(JsonValue::isObject) .map(JsonValue::asObject) .filter(containsNextLevelRootKey) .map(jsonObject -> jsonObject.remove(nextPointerLevel)) // Recursion .map(withoutValue -> JsonFactory.newField(rootKey, withoutValue, rootKeyDefinition.orElse(null))) .map(this::set) .orElse(this); } return result; }
private JsonObject removeForPointer(final JsonPointer pointer) { final JsonObject result; final JsonKey rootKey = pointer.getRoot().orElse(ROOT_KEY); final Optional<JsonFieldDefinition> rootKeyDefinition = getDefinitionForKey(rootKey); if (pointer.isEmpty()) { result = this; } else if (1 == pointer.getLevelCount()) { result = removeValueForKey(rootKey); } else { final JsonPointer nextPointerLevel = pointer.nextLevel(); final Predicate<JsonObject> containsNextLevelRootKey = jsonObject -> nextPointerLevel.getRoot() .map(jsonObject::contains) .orElse(false); result = getValueForKey(rootKey) .filter(JsonValue::isObject) .map(JsonValue::asObject) .filter(containsNextLevelRootKey) .map(jsonObject -> jsonObject.remove(nextPointerLevel)) // Recursion .map(withoutValue -> JsonField.newInstance(rootKey, withoutValue, rootKeyDefinition.orElse(null))) .map(this::set) .orElse(this); } return result; }
final JsonPointer nextPointerLevel = pointer.nextLevel(); final Predicate<JsonObject> containsNextLevelRootKey = jsonObject -> nextPointerLevel.getRoot() .filter(jsonObject::contains)
return newChild; }); addResourceSubTree(node, resource, path.nextLevel());
private ImmutableJsonObjectBuilder remove(final JsonPointer pointer) { pointer.getRoot() .map(JsonKey::toString) .map(fields::get) .ifPresent(jsonField -> { final JsonValue rootValue = jsonField.getValue(); final JsonPointer nextPointerLevel = pointer.nextLevel(); if (rootValue.isObject() && !nextPointerLevel.isEmpty()) { JsonObject rootObject = rootValue.asObject(); rootObject = rootObject.remove(nextPointerLevel); set(JsonFactory.newField(jsonField.getKey(), rootObject, jsonField.getDefinition().orElse(null))); } else { fields.remove(jsonField.getKeyName()); } }); return this; }
private ImmutableJsonObjectBuilder remove(final JsonPointer pointer) { pointer.getRoot() .map(JsonKey::toString) .map(fields::get) .ifPresent(jsonField -> { final JsonValue rootValue = jsonField.getValue(); final JsonPointer nextPointerLevel = pointer.nextLevel(); if (rootValue.isObject() && !nextPointerLevel.isEmpty()) { JsonObject rootObject = rootValue.asObject(); rootObject = rootObject.remove(nextPointerLevel); set(JsonFactory.newField(jsonField.getKey(), rootObject, jsonField.getDefinition().orElse(null))); } else { fields.remove(jsonField.getKeyName()); } }); return this; }
private static JsonObjectBuilder setFieldInHierarchy(final ImmutableJsonObjectBuilder target, final JsonPointer pointer, final JsonField field) { if (1 >= pointer.getLevelCount()) { return target.set(field); } final JsonKey rootKey = pointer.getRoot().orElse(ROOT_KEY); final ImmutableJsonObjectBuilder newTarget = newInstance(); final JsonField rootJsonField = target.fields.get(rootKey.toString()); if (null != rootJsonField) { final JsonValue rootValue = rootJsonField.getValue(); if (rootValue.isObject() && !rootValue.isNull()) { newTarget.setAll(rootValue.asObject()); } } // let the recursion begin >:-( final JsonObject jsonObject = setFieldInHierarchy(newTarget, pointer.nextLevel(), field).build(); return target.set(rootKey, jsonObject); }
private static JsonObjectBuilder setFieldInHierarchy(final ImmutableJsonObjectBuilder target, final JsonPointer pointer, final JsonField field) { if (1 >= pointer.getLevelCount()) { return target.set(field); } final JsonKey rootKey = pointer.getRoot().orElse(ROOT_KEY); final ImmutableJsonObjectBuilder newTarget = newInstance(); final JsonField rootJsonField = target.fields.get(rootKey.toString()); if (null != rootJsonField) { final JsonValue rootValue = rootJsonField.getValue(); if (rootValue.isObject() && !rootValue.isNull()) { newTarget.setAll(rootValue.asObject()); } } // let the recursion begin >:-( final JsonObject jsonObject = setFieldInHierarchy(newTarget, pointer.nextLevel(), field).build(); return target.set(rootKey, jsonObject); }