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; }
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 Optional<JsonValue> rootKeyValue = getValueForKey(rootKey); final Optional<JsonFieldDefinition> rootKeyDefinition = getDefinitionForKey(rootKey); if (1 >= pointer.getLevelCount()) {
final Optional<JsonValue> rootKeyValue = getValueForKey(rootKey); final Optional<JsonFieldDefinition> rootKeyDefinition = getDefinitionForKey(rootKey); if (1 >= pointer.getLevelCount()) {