@Override public Optional<JsonKey> getRoot() { return jsonPointer.getRoot(); }
@Override public Optional<JsonKey> getRoot() { return jsonPointer.getRoot(); }
@Override public Optional<MessageDirection> getDirection() { return jsonPointer.getRoot() .flatMap(ImmutableMessagePath::jsonKeyToDirection) .map(Optional::of) .orElseGet(() -> jsonPointer.getRoot() .filter(FEATURES::equals) .flatMap(features -> jsonPointer.get(2)) .flatMap(ImmutableMessagePath::jsonKeyToDirection)); }
@Override public Optional<MessageDirection> getDirection() { return jsonPointer.getRoot() .flatMap(ImmutableMessagePath::jsonKeyToDirection) .map(Optional::of) .orElseGet(() -> jsonPointer.getRoot() .filter(FEATURES::equals) .flatMap(features -> jsonPointer.get(2)) .flatMap(ImmutableMessagePath::jsonKeyToDirection)); }
@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); }
/** * Check if inlined policy should be retrieved together with the thing. * * @param command the thing query command. * @return whether it is necessary to retrieve the thing's policy. */ private static boolean shouldRetrievePolicyWithThing(final ThingCommand command) { final RetrieveThing retrieveThing = (RetrieveThing) command; final boolean isNotV1 = JsonSchemaVersion.V_1 != command.getImplementedSchemaVersion(); return isNotV1 && retrieveThing.getSelectedFields().filter(selector -> selector.getPointers().stream().anyMatch(jsonPointer -> jsonPointer.getRoot() .filter(jsonKey -> Policy.INLINED_FIELD_NAME.equals(jsonKey.toString())) .isPresent())) .isPresent(); }
@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; }
@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; }
@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 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 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 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 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; }
/** * Verifies that the actual JSON pointer has the specified root. * * @param expectedRoot the expected root of the actual JSON pointer. * @return this assert to allow method chaining. */ public JsonPointerAssert hasRoot(final JsonKey expectedRoot) { isNotNull(); final Optional<JsonKey> actualRoot = actual.getRoot(); Assertions.assertThat(actualRoot) .overridingErrorMessage("Expected <%s> to have root <%s> but it had <%s>", actual, expectedRoot, actualRoot.orElse(null)) .contains(expectedRoot); return myself; }
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); }