@Override public Optional<Adaptable> apply(final ExternalMessage message) { return Optional.ofNullable( message.getTextPayload() .orElseGet(() -> message.getBytePayload() .map(b -> StandardCharsets.UTF_8.decode(b).toString()) .orElse(null)) ).map(plainString -> DittoJsonException.wrapJsonRuntimeException(() -> { final JsonObject jsonObject = JsonFactory.readFrom(plainString).asObject(); return ProtocolFactory.jsonifiableAdaptableFromJson(jsonObject); })); } }
/** * Returns a mutable builder to create immutable {@code Adaptable} instances for a given {@code topicPath}. * * @param topicPath the topic path. * @return the builder. * @throws NullPointerException if {@code topicPath} is {@code null}. */ static AdaptableBuilder newBuilder(final TopicPath topicPath) { return ProtocolFactory.newAdaptableBuilder(topicPath); }
@Override public JsonObject toJson() { return toJson(getHeaders().orElse(ProtocolFactory.emptyHeaders())); }
@Override public Optional<Adaptable> map(final ExternalMessage message) { final String payload = extractPayloadAsString(message); final JsonifiableAdaptable jsonifiableAdaptable = DittoJsonException.wrapJsonRuntimeException(() -> ProtocolFactory.jsonifiableAdaptableFromJson(JsonFactory.newObject(payload)) ); final DittoHeaders mergedHeaders = mergeHeaders(message, jsonifiableAdaptable); return Optional.of( ProtocolFactory.newAdaptableBuilder(jsonifiableAdaptable).withHeaders(mergedHeaders).build()); }
private static Adaptable handleSingleRetrieve(final ThingQueryCommand<?> command, final TopicPath.Channel channel) { final TopicPathBuilder topicPathBuilder = ProtocolFactory.newTopicPathBuilder(command.getThingId()); final CommandsTopicPathBuilder commandsTopicPathBuilder; commandsTopicPathBuilder = fromTopicPathBuilderWithChannel(topicPathBuilder, channel); final String commandName = command.getClass().getSimpleName().toLowerCase(); if (!commandName.startsWith(TopicPath.Action.RETRIEVE.toString())) { throw UnknownCommandException.newBuilder(commandName).build(); } final PayloadBuilder payloadBuilder = Payload.newBuilder(command.getResourcePath()); command.getSelectedFields().ifPresent(payloadBuilder::withFields); return Adaptable.newBuilder(commandsTopicPathBuilder.retrieve().build()) .withPayload(payloadBuilder.build()) .withHeaders(ProtocolFactory.newHeadersWithDittoContentType(command.getDittoHeaders())) .build(); }
@Override public Optional<ExternalMessage> apply(final Adaptable adaptable) { final JsonifiableAdaptable jsonifiableAdaptable = ProtocolFactory.wrapAsJsonifiableAdaptable(adaptable); final ExternalMessageBuilder messageBuilder = ExternalMessageFactory.newExternalMessageBuilder( adaptable.getHeaders().orElseGet(adaptable::getDittoHeaders)) .withTopicPath(adaptable.getTopicPath()); messageBuilder.withAdditionalHeaders(ExternalMessage.CONTENT_TYPE_HEADER, DittoConstants.DITTO_PROTOCOL_CONTENT_TYPE); messageBuilder.withText(jsonifiableAdaptable.toJsonString()); return Optional.of(messageBuilder.build()); }
if (commandResponse instanceof RetrieveThingsResponse) { final String namespace = ((WithNamespace) commandResponse).getNamespace().orElse("_"); topicPathBuilder = ProtocolFactory.newTopicPathBuilderFromNamespace(namespace); } else { topicPathBuilder = ProtocolFactory.newTopicPathBuilder(commandResponse.getId()); .withHeaders(ProtocolFactory.newHeadersWithDittoContentType(commandResponse.getDittoHeaders())) .build();
private static Adaptable handleMultipleRetrieve(final RetrieveThings command, final TopicPath.Channel channel) { final String commandName = command.getClass().getSimpleName().toLowerCase(); if (!commandName.startsWith(TopicPath.Action.RETRIEVE.toString())) { throw UnknownCommandException.newBuilder(commandName).build(); } final String namespace = command.getNamespace().orElse("_"); final TopicPathBuilder topicPathBuilder = ProtocolFactory.newTopicPathBuilderFromNamespace(namespace); final CommandsTopicPathBuilder commandsTopicPathBuilder = fromTopicPathBuilderWithChannel(topicPathBuilder, channel); final PayloadBuilder payloadBuilder = Payload.newBuilder(command.getResourcePath()); command.getSelectedFields().ifPresent(payloadBuilder::withFields); payloadBuilder.withValue(createIdsPayload(command.getThingIds())); return Adaptable.newBuilder(commandsTopicPathBuilder.retrieve().build()) .withPayload(payloadBuilder.build()) .withHeaders(ProtocolFactory.newHeadersWithDittoContentType(command.getDittoHeaders())) .build(); }
/** * Returns a mutable builder to create immutable {@code Payload} instances for a given {@code path}. * * @param path the path. * @return the builder. * @throws NullPointerException if {@code path} is {@code null}. */ static PayloadBuilder newBuilder(final JsonPointer path) { return ProtocolFactory.newPayloadBuilder(path); }
/** * Returns a new {@code Payload} from the specified {@code jsonString}. * * @param jsonString the JSON string. * @return the payload. * @throws NullPointerException if {@code jsonString} is {@code null}. * @throws IllegalArgumentException if {@code jsonString} is empty. * @throws org.eclipse.ditto.json.JsonParseException if {@code jsonString} does not contain a JSON object. */ public static Payload newPayload(final String jsonString) { return newPayload(JsonFactory.newObject(jsonString)); }
/** * Returns a mutable builder to create immutable {@code TopicPath} instances for a given {@code thingId}. * * @param thingId the identifier of the {@code Thing}. * @return the builder. * @throws NullPointerException if {@code thingId} is {@code null}. */ static TopicPathBuilder newBuilder(final String thingId) { return ProtocolFactory.newTopicPathBuilder(thingId); }
@Override public JsonObject toJson(final DittoHeaders specificHeaders) { final JsonObjectBuilder jsonObjectBuilder = JsonFactory.newObjectBuilder(); if (!getTopicPath().equals(ProtocolFactory.emptyTopicPath())) { jsonObjectBuilder.set(JsonFields.TOPIC, getTopicPath().getPath()); } return jsonObjectBuilder .set(JsonFields.HEADERS, specificHeaders.toJson()) .setAll(getPayload().toJson()) .build(); }
@Override public Optional<Adaptable> map(final ExternalMessage message) { final String payload = extractPayloadAsString(message); final JsonifiableAdaptable jsonifiableAdaptable = DittoJsonException.wrapJsonRuntimeException(() -> ProtocolFactory.jsonifiableAdaptableFromJson(JsonFactory.newObject(payload)) ); final DittoHeaders mergedHeaders = mergeHeaders(message, jsonifiableAdaptable); return Optional.of( ProtocolFactory.newAdaptableBuilder(jsonifiableAdaptable).withHeaders(mergedHeaders).build()); }
private static Adaptable handleSingleRetrieve(final ThingQueryCommand<?> command, final TopicPath.Channel channel) { final TopicPathBuilder topicPathBuilder = ProtocolFactory.newTopicPathBuilder(command.getThingId()); final CommandsTopicPathBuilder commandsTopicPathBuilder; commandsTopicPathBuilder = fromTopicPathBuilderWithChannel(topicPathBuilder, channel); final String commandName = command.getClass().getSimpleName().toLowerCase(); if (!commandName.startsWith(TopicPath.Action.RETRIEVE.toString())) { throw UnknownCommandException.newBuilder(commandName).build(); } final PayloadBuilder payloadBuilder = Payload.newBuilder(command.getResourcePath()); command.getSelectedFields().ifPresent(payloadBuilder::withFields); return Adaptable.newBuilder(commandsTopicPathBuilder.retrieve().build()) .withPayload(payloadBuilder.build()) .withHeaders(ProtocolFactory.newHeadersWithDittoContentType(command.getDittoHeaders())) .build(); }
@Override public Optional<ExternalMessage> apply(final Adaptable adaptable) { final JsonifiableAdaptable jsonifiableAdaptable = ProtocolFactory.wrapAsJsonifiableAdaptable(adaptable); final ExternalMessageBuilder messageBuilder = ExternalMessageFactory.newExternalMessageBuilder( adaptable.getHeaders().orElseGet(adaptable::getDittoHeaders)) .withTopicPath(adaptable.getTopicPath()); messageBuilder.withAdditionalHeaders(ExternalMessage.CONTENT_TYPE_HEADER, DittoConstants.DITTO_PROTOCOL_CONTENT_TYPE); messageBuilder.withText(jsonifiableAdaptable.toJsonString()); return Optional.of(messageBuilder.build()); }
if (commandResponse instanceof RetrieveThingsResponse) { final String namespace = ((WithNamespace) commandResponse).getNamespace().orElse("_"); topicPathBuilder = ProtocolFactory.newTopicPathBuilderFromNamespace(namespace); } else { topicPathBuilder = ProtocolFactory.newTopicPathBuilder(commandResponse.getId()); .withHeaders(ProtocolFactory.newHeadersWithDittoContentType(commandResponse.getDittoHeaders())) .build();
private static Adaptable handleMultipleRetrieve(final RetrieveThings command, final TopicPath.Channel channel) { final String commandName = command.getClass().getSimpleName().toLowerCase(); if (!commandName.startsWith(TopicPath.Action.RETRIEVE.toString())) { throw UnknownCommandException.newBuilder(commandName).build(); } final String namespace = command.getNamespace().orElse("_"); final TopicPathBuilder topicPathBuilder = ProtocolFactory.newTopicPathBuilderFromNamespace(namespace); final CommandsTopicPathBuilder commandsTopicPathBuilder = fromTopicPathBuilderWithChannel(topicPathBuilder, channel); final PayloadBuilder payloadBuilder = Payload.newBuilder(command.getResourcePath()); command.getSelectedFields().ifPresent(payloadBuilder::withFields); payloadBuilder.withValue(createIdsPayload(command.getThingIds())); return Adaptable.newBuilder(commandsTopicPathBuilder.retrieve().build()) .withPayload(payloadBuilder.build()) .withHeaders(ProtocolFactory.newHeadersWithDittoContentType(command.getDittoHeaders())) .build(); }
/** * Returns a mutable builder to create immutable {@code Payload} without a {@code path}. * * @return the builder. */ static PayloadBuilder newBuilder() { return ProtocolFactory.newPayloadBuilder(); }
/** * Returns a new {@code Payload} from the specified {@code jsonString}. * * @param jsonString the JSON string. * @return the payload. * @throws NullPointerException if {@code jsonString} is {@code null}. * @throws IllegalArgumentException if {@code jsonString} is empty. * @throws org.eclipse.ditto.json.JsonParseException if {@code jsonString} does not contain a JSON object. */ public static Payload newPayload(final String jsonString) { return newPayload(JsonFactory.newObject(jsonString)); }
/** * Returns a mutable builder to create immutable {@code TopicPath} instances for a given {@code thingId}. * * @param thingId the identifier of the {@code Thing}. * @return the builder. * @throws NullPointerException if {@code thingId} is {@code null}. */ static TopicPathBuilder newBuilder(final String thingId) { return ProtocolFactory.newTopicPathBuilder(thingId); }