protected static HttpStatusCode statusCodeFrom(final Adaptable adaptable) { return adaptable.getPayload().getStatus().orElse(null); }
protected static HttpStatusCode statusCodeFrom(final Adaptable adaptable) { return adaptable.getPayload().getStatus().orElse(null); }
protected static boolean isCreated(final Adaptable adaptable) { return adaptable.getPayload().getStatus() .map(HttpStatusCode.CREATED::equals) .orElseThrow(() -> JsonParseException.newBuilder().build()); }
protected static boolean isCreated(final Adaptable adaptable) { return adaptable.getPayload().getStatus() .map(HttpStatusCode.CREATED::equals) .orElseThrow(() -> JsonParseException.newBuilder().build()); }
@Override public Optional<ExternalMessage> map(final Adaptable adaptable) { final Optional<ExternalMessage> mappedOpt = delegate.map(adaptable); return mappedOpt.map(mapped -> { final ExternalMessageBuilder messageBuilder = ExternalMessageFactory.newExternalMessageBuilder(mapped); messageBuilder.asResponse(adaptable.getPayload().getStatus().isPresent()); adaptable.getHeaders() .map(h -> h.get(ExternalMessage.REPLY_TO_HEADER)) .ifPresent( replyTo -> messageBuilder.withAdditionalHeaders(ExternalMessage.REPLY_TO_HEADER, replyTo)); return messageBuilder.build(); }); }
@Override public Optional<ExternalMessage> map(final Adaptable adaptable) { final Optional<ExternalMessage> mappedOpt = delegate.map(adaptable); return mappedOpt.map(mapped -> { final ExternalMessageBuilder messageBuilder = ExternalMessageFactory.newExternalMessageBuilder(mapped); messageBuilder.asResponse(adaptable.getPayload().getStatus().isPresent()); adaptable.getHeaders() .map(h -> h.get(ExternalMessage.REPLY_TO_HEADER)) .ifPresent( replyTo -> messageBuilder.withAdditionalHeaders(ExternalMessage.REPLY_TO_HEADER, replyTo)); return messageBuilder.build(); }); }
private Signal<?> processCommandResponseSignalFromAdaptable(final Adaptable adaptable, final TopicPath topicPath) { final Optional<HttpStatusCode> status = adaptable.getPayload().getStatus(); final boolean isErrorResponse = status.isPresent() && status.get().toInt() >= HttpStatusCode.BAD_REQUEST.toInt(); if (TopicPath.Action.RETRIEVE.equals(topicPath.getAction().orElse(null))) { return isErrorResponse ? thingErrorResponseFromAdaptable(adaptable) : thingQueryCommandResponseAdapter.fromAdaptable(adaptable); } else { return isErrorResponse ? thingErrorResponseFromAdaptable(adaptable) : thingModifyCommandResponseAdapter.fromAdaptable(adaptable); } }
private Signal<?> processCommandResponseSignalFromAdaptable(final Adaptable adaptable, final TopicPath topicPath) { final Optional<HttpStatusCode> status = adaptable.getPayload().getStatus(); final boolean isErrorResponse = status.isPresent() && status.get().toInt() >= HttpStatusCode.BAD_REQUEST.toInt(); if (TopicPath.Action.RETRIEVE.equals(topicPath.getAction().orElse(null))) { return isErrorResponse ? thingErrorResponseFromAdaptable(adaptable) : thingQueryCommandResponseAdapter.fromAdaptable(adaptable); } else { return isErrorResponse ? thingErrorResponseFromAdaptable(adaptable) : thingModifyCommandResponseAdapter.fromAdaptable(adaptable); } }
@Override public Optional<ExternalMessage> map(final Adaptable adaptable) { final Map<String, String> headers = new LinkedHashMap<>(adaptable.getHeaders().orElse(DittoHeaders.empty())); final String jsonString = ProtocolFactory.wrapAsJsonifiableAdaptable(adaptable).toJsonString(); final boolean isError = TopicPath.Criterion.ERRORS.equals(adaptable.getTopicPath().getCriterion()); final boolean isResponse = adaptable.getPayload().getStatus().isPresent(); return Optional.of( ExternalMessageFactory.newExternalMessageBuilder(headers) .withTopicPath(adaptable.getTopicPath()) .withText(jsonString) .asResponse(isResponse) .asError(isError) .build()); }
@Override public Optional<ExternalMessage> map(final Adaptable adaptable) { final Map<String, String> headers = new LinkedHashMap<>(adaptable.getHeaders().orElse(DittoHeaders.empty())); final String jsonString = ProtocolFactory.wrapAsJsonifiableAdaptable(adaptable).toJsonString(); final boolean isError = TopicPath.Criterion.ERRORS.equals(adaptable.getTopicPath().getCriterion()); final boolean isResponse = adaptable.getPayload().getStatus().isPresent(); return Optional.of( ExternalMessageFactory.newExternalMessageBuilder(headers) .withTopicPath(adaptable.getTopicPath()) .withText(jsonString) .asResponse(isResponse) .asError(isError) .build()); }
@Nullable private Signal<?> signalFromAdaptable(final Adaptable adaptable, final TopicPath topicPath) { if (TopicPath.Criterion.COMMANDS.equals(topicPath.getCriterion())) { if (adaptable.getPayload().getStatus().isPresent()) { // this was a command response: return processCommandResponseSignalFromAdaptable(adaptable, topicPath); } else if (TopicPath.Action.RETRIEVE.equals(topicPath.getAction().orElse(null))) { return thingQueryCommandAdapter.fromAdaptable(adaptable); } else { return thingModifyCommandAdapter.fromAdaptable(adaptable); } } else if (TopicPath.Criterion.EVENTS.equals(topicPath.getCriterion())) { return thingEventAdapter.fromAdaptable(adaptable); } else if (TopicPath.Criterion.ERRORS.equals(topicPath.getCriterion())) { return thingErrorResponseFromAdaptable(adaptable); } return null; }
@Nullable private Signal<?> signalFromAdaptable(final Adaptable adaptable, final TopicPath topicPath) { if (TopicPath.Criterion.COMMANDS.equals(topicPath.getCriterion())) { if (adaptable.getPayload().getStatus().isPresent()) { // this was a command response: return processCommandResponseSignalFromAdaptable(adaptable, topicPath); } else if (TopicPath.Action.RETRIEVE.equals(topicPath.getAction().orElse(null))) { return thingQueryCommandAdapter.fromAdaptable(adaptable); } else { return thingModifyCommandAdapter.fromAdaptable(adaptable); } } else if (TopicPath.Criterion.EVENTS.equals(topicPath.getCriterion())) { return thingEventAdapter.fromAdaptable(adaptable); } else if (TopicPath.Criterion.ERRORS.equals(topicPath.getCriterion())) { return thingErrorResponseFromAdaptable(adaptable); } return null; }
adaptable.getPayload().getPath().getFeatureId().ifPresent(featureId -> dittoHeadersBuilder.putHeader(FEATURE_ID.getKey(), featureId)); adaptable.getPayload().getStatus().ifPresent(statusCode -> dittoHeadersBuilder.putHeader(STATUS_CODE.getKey(), String.valueOf(statusCode.toInt()))); return dittoHeadersBuilder.build();
adaptable.getPayload().getPath().getFeatureId().ifPresent(featureId -> dittoHeadersBuilder.putHeader(FEATURE_ID.getKey(), featureId)); adaptable.getPayload().getStatus().ifPresent(statusCode -> dittoHeadersBuilder.putHeader(STATUS_CODE.getKey(), String.valueOf(statusCode.toInt()))); return dittoHeadersBuilder.build();
private Signal<?> fromLiveAdaptable(final Adaptable adaptable) { final TopicPath topicPath = adaptable.getTopicPath(); final Signal<?> liveSignal; if (TopicPath.Criterion.MESSAGES.equals(topicPath.getCriterion())) { // /things/live/messages final boolean isResponse = adaptable.getPayload().getStatus().isPresent(); if (isResponse) { liveSignal = messageCommandResponseAdapter.fromAdaptable(adaptable); } else { liveSignal = messageCommandAdapter.fromAdaptable(adaptable); } } else { liveSignal = signalFromAdaptable(adaptable, topicPath); // /things/live/(commands|events) } if (liveSignal != null) { final DittoHeadersBuilder enhancedHeadersBuilder = liveSignal.getDittoHeaders() .toBuilder() .channel(TopicPath.Channel.LIVE.getName()); return liveSignal.setDittoHeaders(enhancedHeadersBuilder.build()); } else { throw UnknownTopicPathException.newBuilder(topicPath).build(); } }
private Signal<?> fromLiveAdaptable(final Adaptable adaptable) { final TopicPath topicPath = adaptable.getTopicPath(); final Signal<?> liveSignal; if (TopicPath.Criterion.MESSAGES.equals(topicPath.getCriterion())) { // /things/live/messages final boolean isResponse = adaptable.getPayload().getStatus().isPresent(); if (isResponse) { liveSignal = messageCommandResponseAdapter.fromAdaptable(adaptable); } else { liveSignal = messageCommandAdapter.fromAdaptable(adaptable); } } else { liveSignal = signalFromAdaptable(adaptable, topicPath); // /things/live/(commands|events) } if (liveSignal != null) { final DittoHeadersBuilder enhancedHeadersBuilder = liveSignal.getDittoHeaders() .toBuilder() .channel(TopicPath.Channel.LIVE.getName()); return liveSignal.setDittoHeaders(enhancedHeadersBuilder.build()); } else { throw UnknownTopicPathException.newBuilder(topicPath).build(); } }