@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)); }
protected static Feature featureFrom(final Adaptable adaptable) { return adaptable.getPayload() .getValue() .map(JsonValue::asObject) .map(jsonObject -> ThingsModelFactory.newFeatureBuilder(jsonObject) .useId(featureIdFrom(adaptable)) .build()) .orElseThrow(() -> JsonParseException.newBuilder().build()); }
protected static AuthorizationSubject authorizationSubjectFrom(final Adaptable adaptable) { return AuthorizationSubject.newInstance(leafValue(adaptable.getPayload().getPath())); }
@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)); }
/** * Add to headers any information that will be missing from topic path. * * @param filteredHeaders headers read from external headers. * @param topicPath topic path of an adaptable. * @return filteredHeaders with extra information from topicPath. */ private static DittoHeaders addTopicPathInfo(final DittoHeaders filteredHeaders, final TopicPath topicPath) { final DittoHeaders extraInfo = mapTopicPathToHeaders(topicPath); return extraInfo.isEmpty() ? filteredHeaders : filteredHeaders.toBuilder().putHeaders(extraInfo).build(); }
@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)); }
/** * Add to headers any information that will be missing from topic path. * * @param filteredHeaders headers read from external headers. * @param topicPath topic path of an adaptable. * @return filteredHeaders with extra information from topicPath. */ private static DittoHeaders addTopicPathInfo(final DittoHeaders filteredHeaders, final TopicPath topicPath) { final DittoHeaders extraInfo = mapTopicPathToHeaders(topicPath); return extraInfo.isEmpty() ? filteredHeaders : filteredHeaders.toBuilder().putHeaders(extraInfo).build(); }
protected static AuthorizationSubject authorizationSubjectFrom(final Adaptable adaptable) { return AuthorizationSubject.newInstance(leafValue(adaptable.getPayload().getPath())); }
@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)); }
protected static Feature featureFrom(final Adaptable adaptable) { return adaptable.getPayload() .getValue() .map(JsonValue::asObject) .map(jsonObject -> ThingsModelFactory.newFeatureBuilder(jsonObject) .useId(featureIdFrom(adaptable)) .build()) .orElseThrow(() -> JsonParseException.newBuilder().build()); }
protected static AclEntry aclEntryFrom(final Adaptable adaptable) { return adaptable.getPayload() .getValue() .map(permissions -> AccessControlListModelFactory .newAclEntry(leafValue(adaptable.getPayload().getPath()), permissions)) .orElseThrow(() -> JsonParseException.newBuilder().build()); }
protected static AclEntry aclEntryFrom(final Adaptable adaptable) { return adaptable.getPayload() .getValue() .map(permissions -> AccessControlListModelFactory .newAclEntry(leafValue(adaptable.getPayload().getPath()), permissions)) .orElseThrow(() -> JsonParseException.newBuilder().build()); }