private void retrieveThingsAndSendResult(final List<String> thingIds, @Nullable final JsonFieldSelector selectedFields, final Command<?> command, final ActorRef resultReceiver) { final DittoHeaders dittoHeaders = command.getDittoHeaders(); final CompletionStage<?> commandResponseSource = Source.from(thingIds) .filter(Objects::nonNull) .filterNot(String::isEmpty) .filter(thingId -> THING_ID_PATTERN.matcher(thingId).matches()) .map(thingId -> { final Command<?> toBeWrapped; if (command instanceof RetrieveThings) { toBeWrapped = Optional.ofNullable(selectedFields) .map(sf -> RetrieveThing.getBuilder(thingId, dittoHeaders) .withSelectedFields(sf) .build()) .orElse(RetrieveThing.of(thingId, dittoHeaders)); } else { toBeWrapped = Optional.ofNullable(selectedFields) .map(sf -> SudoRetrieveThing.of(thingId, sf, dittoHeaders)) .orElse(SudoRetrieveThing.of(thingId, dittoHeaders)); } return ConciergeWrapper.wrapForEnforcer(toBeWrapped); }) .ask(calculateParallelism(thingIds), targetActor, Jsonifiable.class, Timeout.apply(retrieveSingleThingTimeout.toMillis(), TimeUnit.MILLISECONDS)) .log("command-response", log) .runWith(StreamRefs.sourceRef(), actorMaterializer); PatternsCS.pipe(commandResponseSource, aggregatorDispatcher) .to(resultReceiver); }
@Override public RetrieveThingLiveCommand setDittoHeaders(final DittoHeaders dittoHeaders) { final RetrieveThing twinCommand = RetrieveThing.getBuilder(getThingId(), dittoHeaders) .withSelectedFields(getSelectedFields().orElse(null)) .build(); return of(twinCommand); }
@Override public RetrieveThingLiveCommand setDittoHeaders(final DittoHeaders dittoHeaders) { final RetrieveThing twinCommand = RetrieveThing.getBuilder(getThingId(), dittoHeaders) .withSelectedFields(getSelectedFields().orElse(null)) .build(); return of(twinCommand); }
.build(); final RetrieveThing retrieveThingV1 = RetrieveThing.getBuilder(retrieveThing.getThingId(), dittoHeaders) .withSelectedFields(jsonFieldSelectorBuilder.build()) .build(); PatternsCS.ask(thingsShardRegion, retrieveThingV1, getAskTimeout().toMillis())
.withSelectedFields(selectedFieldsFrom(adaptable)) .build());
.withSelectedFields(selectedFieldsFrom(adaptable)) .build());
private Route thingsEntry(final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId) { return pathEndOrSingleSlash(() -> route( get(() -> // GET /things/things/<thingId>?fields=<fieldsString> parameterOptional(ThingsParameter.FIELDS.toString(), fieldsString -> handlePerRequest(ctx, RetrieveThing.getBuilder(thingId, dittoHeaders) .withSelectedFields(calculateSelectedFields(fieldsString).orElse(null)) .build()) ) ), put(() -> // PUT /things/things/<thingId> extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, thingJson -> ModifyThing.of(thingId, ThingsModelFactory.newThing( createThingJsonObjectForPut(thingJson, thingId)), createInlinePolicyJson(thingJson), getCopyPolicyFrom(thingJson), dittoHeaders)) ) ), delete(() -> // DELETE /things/things/<thingId> handlePerRequest(ctx, DeleteThing.of(thingId, dittoHeaders)) ) ) ); }
private CompletionStage<String> handleThingPolicyIdReference(final ReferencePlaceholder referencePlaceholder, final DittoHeaders dittoHeaders) { final RetrieveThing retrieveThingCommand = RetrieveThing.getBuilder(referencePlaceholder.getReferencedEntityId(), dittoHeaders) .withSelectedFields(referencePlaceholder.getReferencedField().toFieldSelector()) .build(); return PatternsCS.ask(conciergeForwarderActor, retrieveThingCommand, retrieveEntityTimeoutDuration) .thenApply(response -> this.handleRetrieveThingResponse(response, referencePlaceholder, dittoHeaders)); }
@Override public RetrieveThing setDittoHeaders(final DittoHeaders dittoHeaders) { return getBuilder(thingId, dittoHeaders) .withSelectedFields(selectedFields) .withSnapshotRevision(snapshotRevision) .build(); }
@Override public RetrieveThing setDittoHeaders(final DittoHeaders dittoHeaders) { return getBuilder(thingId, dittoHeaders) .withSelectedFields(selectedFields) .withSnapshotRevision(snapshotRevision) .build(); }