@Override public JsonifiableAdaptable setDittoHeaders(@Nonnull final DittoHeaders dittoHeaders) { return new ImmutableJsonifiableAdaptable(delegateAdaptable.setDittoHeaders(dittoHeaders)); } }
@Override public JsonifiableAdaptable setDittoHeaders(@Nonnull final DittoHeaders dittoHeaders) { return new ImmutableJsonifiableAdaptable(delegateAdaptable.setDittoHeaders(dittoHeaders)); } }
@Override public final Adaptable toAdaptable(final T signal, final TopicPath.Channel channel) { final Adaptable adaptable = constructAdaptable(signal, channel); final Map<String, String> externalHeaders = headerTranslator.toExternalHeaders(adaptable.getDittoHeaders()); return adaptable.setDittoHeaders(DittoHeaders.of(externalHeaders)); }
@Override public final Adaptable toAdaptable(final T signal, final TopicPath.Channel channel) { final Adaptable adaptable = constructAdaptable(signal, channel); final Map<String, String> externalHeaders = headerTranslator.toExternalHeaders(adaptable.getDittoHeaders()); return adaptable.setDittoHeaders(DittoHeaders.of(externalHeaders)); }
@Override public final T fromAdaptable(final Adaptable externalAdaptable) { checkNotNull(externalAdaptable, "Adaptable"); // get type from external adaptable before header filtering in case some headers exist for external messages // but not internally in Ditto. final String type = getType(externalAdaptable); // filter headers by header translator, then inject any missing information from topic path final DittoHeaders externalHeaders = externalAdaptable.getHeaders().orElse(DittoHeaders.empty()); final DittoHeaders filteredHeaders = addTopicPathInfo( headerTranslator.fromExternalHeaders(externalHeaders), externalAdaptable.getTopicPath()); final Adaptable adaptable = externalAdaptable.setDittoHeaders(filteredHeaders); final JsonifiableMapper<T> jsonifiableMapper = mappingStrategies.get(type); if (null == jsonifiableMapper) { throw UnknownTopicPathException.newBuilder(adaptable.getTopicPath()).build(); } return DittoJsonException.wrapJsonRuntimeException(() -> jsonifiableMapper.map(adaptable)); }
@Override public final T fromAdaptable(final Adaptable externalAdaptable) { checkNotNull(externalAdaptable, "Adaptable"); // get type from external adaptable before header filtering in case some headers exist for external messages // but not internally in Ditto. final String type = getType(externalAdaptable); // filter headers by header translator, then inject any missing information from topic path final DittoHeaders externalHeaders = externalAdaptable.getHeaders().orElse(DittoHeaders.empty()); final DittoHeaders filteredHeaders = addTopicPathInfo( headerTranslator.fromExternalHeaders(externalHeaders), externalAdaptable.getTopicPath()); final Adaptable adaptable = externalAdaptable.setDittoHeaders(filteredHeaders); final JsonifiableMapper<T> jsonifiableMapper = mappingStrategies.get(type); if (null == jsonifiableMapper) { throw UnknownTopicPathException.newBuilder(adaptable.getTopicPath()).build(); } return DittoJsonException.wrapJsonRuntimeException(() -> jsonifiableMapper.map(adaptable)); }