@Override default JsonPointer getResourcePath() { // return empty resource path for SudoCommands as this path is currently not needed for SudoCommands: return JsonPointer.empty(); }
@Override public String toString() { return jsonPointer.toString(); } }
private static JsonPointer transformerPointer(@Nullable final String serviceName, @Nullable final Integer instance) { JsonPointer newPointer = JsonPointer.empty(); if (serviceName != null) { newPointer = newPointer.append(JsonPointer.of(serviceName)); } if (instance != null) { newPointer = newPointer.append(JsonPointer.of(instance.toString())); } return newPointer; }
@Override default JsonPointer getResourcePath() { final Message<?> message = getMessage(); final String box = message.getDirection() == MessageDirection.TO ? INBOX_PREFIX : OUTBOX_PREFIX; final JsonPointer pathSuffix = JsonPointer.empty() .addLeaf(JsonKey.of(box)) .addLeaf(JsonKey.of(MESSAGES_PREFIX)) .addLeaf(JsonKey.of(message.getSubject())); final JsonPointer path = message.getFeatureId().map(fId -> JsonPointer.empty() .addLeaf(JsonKey.of(FEATURES_PREFIX)) .addLeaf(JsonKey.of(fId))) .orElse(JsonPointer.empty()); return path.append(pathSuffix); }
@Override default JsonPointer getResourcePath() { final Message<?> message = getMessage(); final String box = message.getDirection() == MessageDirection.TO ? MessageCommand.INBOX_PREFIX : MessageCommand.OUTBOX_PREFIX; final JsonPointer pathSuffix = JsonFactory.newPointer(JsonKey.of(box), JsonKey.of(MessageCommand.MESSAGES_PREFIX), JsonKey.of(message.getSubject())); final JsonPointer path = message.getFeatureId() .map(fId -> JsonFactory.newPointer(JsonKey.of(MessageCommand.FEATURES_PREFIX), JsonKey.of(fId))) .orElse(JsonPointer.empty()); return path.append(pathSuffix); }
@Override public JsonPointer getResourcePath() { final String path = "/features/" + featureId + "/properties" + propertyPointer; return JsonPointer.of(path); }
@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; }
if (ROOT_RESOURCE.equals(resource.toString())) { nodeChildOptional.ifPresent( policyTreeNode1 -> traverseSubtreeForPermissionAccess(permission, resource, type, grantedResources, revokedResources, level, true); } else { resource.get(level).ifPresent(jsonKey -> policyTreeNode.getChild(jsonKey.toString()) .ifPresent(child -> traverseSubtreeForPermissionAccess(permission, resource, type, child, grantedResources, revokedResources, level + 1, true))); final Optional<JsonKey> jsonKeyOptional = resource.get(level); if (followingResource && jsonKeyOptional.isPresent()) { policyTreeNode.getChild(jsonKeyOptional.get().toString()) policyTreeNode.getChildren() .forEach((s, child) -> traverseSubtreeForPermissionAccess(permission, resource.addLeaf(JsonKey.of(s)), type, child, grantedResources, revokedResources, level + 1, false));
@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 JsonPointer append(final JsonPointer pointer) { return jsonPointer.append(pointer); }
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; }
@Override public boolean isEmpty() { return jsonPointer.isEmpty(); }
@Override public JsonPointer addLeaf(final JsonKey key) { return jsonPointer.addLeaf(key); }
/** * Converts a {@link ResourceKey} to an iterator of JSON keys by prepending the resource type to the resource path. * * @param resourceKey The resource key to convert. * @return The converted JSON key iterator. * @throws NullPointerException if {@code resourceKey} is {@code null}. */ static Iterator<JsonKey> getJsonKeyIterator(final ResourceKey resourceKey) { checkNotNull(resourceKey, "resource key to convert"); return JsonFactory.newPointer(resourceKey.getResourceType()).append(resourceKey.getResourcePath()).iterator(); }
@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<JsonKey> getRoot() { return jsonPointer.getRoot(); }
@Override public ImmutableJsonPointer append(final JsonPointer subPointer) { checkSubPointer(subPointer); final ImmutableJsonPointer result; if (subPointer.isEmpty()) { result = this; } else { final List<JsonKey> newJsonKeys = new ArrayList<>(jsonKeyHierarchy); subPointer.forEach(newJsonKeys::add); result = newInstance(newJsonKeys); } return result; }