private Route routePiggyback(final RequestContext ctx, @Nullable final String serviceName, @Nullable final Integer instance, final DittoHeaders dittoHeaders) { return post(() -> extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, piggybackCommandJson -> { final JsonObject parsedJson = JsonFactory.readFrom(piggybackCommandJson).asObject(); return ExecutePiggybackCommand.of(serviceName, instance, parsedJson.getValueOrThrow( ExecutePiggybackCommand.JSON_TARGET_ACTORSELECTION), parsedJson.getValueOrThrow( ExecutePiggybackCommand.JSON_PIGGYBACK_COMMAND), parsedJson.getValue("headers") .filter(JsonValue::isObject) .map(JsonValue::asObject) .map(DittoHeaders::newBuilder) .map(head -> head.putHeaders(dittoHeaders)) .map(DittoHeadersBuilder::build) .orElse(dittoHeaders)); } ) ) ); }
private Route thingsEntryPolicyId(final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId) { return path(PATH_POLICY_ID, () -> // /things/<thingId>/policyId route( get(() -> // GET /things/<thingId>/policyId handlePerRequest(ctx, RetrievePolicyId.of(thingId, dittoHeaders)) ), put(() -> // GET /things/<thingId>/policyId extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, policyIdJson -> ModifyPolicyId.of(thingId, Optional.of(JsonFactory.readFrom(policyIdJson)) .filter(JsonValue::isString) .map(JsonValue::asString) .orElse(policyIdJson), dittoHeaders) ) ) ) ) ); }
private Route thingMessages(final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId, final String inboxOutbox) { final MessageDirection direction = PATH_INBOX.equalsIgnoreCase(inboxOutbox) ? MessageDirection.TO : MessageDirection.FROM; return rawPathPrefix(mergeDoubleSlashes().concat(PathMatchers.segment(PATH_MESSAGES).slash()), () -> // /messages extractUnmatchedPath(msgSubject -> // <msgSubject/with/slashes> parameterOptional(Unmarshaller.sync(Long::parseLong), TIMEOUT_PARAMETER, optionalTimeout -> withCustomRequestTimeout(optionalTimeout, this::checkMessageTimeout, defaultMessageTimeout, timeout -> extractDataBytes(payloadSource -> handleMessage(ctx, payloadSource, buildSendThingMessage( direction, ctx, dittoHeaders, thingId, msgSubject, timeout ) ) ) ) ) ) ); }
defaultMessageTimeout, timeout -> extractDataBytes(payloadSource -> handleMessage(ctx, payloadSource, buildSendFeatureMessage(
private Route thingsEntryPolicyEntries(final RequestContext ctx, final DittoHeaders dittoHeaders, final String policyId) { return pathEndOrSingleSlash(() -> Directives.route( get(() -> // GET /entries handlePerRequest(ctx, RetrievePolicyEntries.of(policyId, dittoHeaders)) ), put(() -> // PUT /entries extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, policyEntriesJson -> ModifyPolicyEntries.of(policyId, PoliciesModelFactory.newPolicyEntries( policyEntriesJson), dittoHeaders)) ) ) ) ); }
private Route things(final RequestContext ctx, final DittoHeaders dittoHeaders) { return pathEndOrSingleSlash(() -> route( // get(() -> // GET /things?ids=<idsString>&fields=<fieldsString> buildRetrieveThingsRoute(ctx, dittoHeaders) ), post(() -> // POST /things extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, thingJson -> CreateThing.of(createThingForPost(thingJson), createInlinePolicyJson(thingJson), getCopyPolicyFrom(thingJson), dittoHeaders) ) ) ) ) ); }
private Route routeLogging(final RequestContext ctx, final String serviceName, final Integer instance, final DittoHeaders dittoHeaders) { return route( get(() -> handlePerRequest(ctx, RetrieveLoggerConfig.ofAllKnownLoggers(serviceName, instance, dittoHeaders), transformResponse(serviceName, instance) ) ), put(() -> extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, loggerConfigJson -> ChangeLogLevel.of(serviceName, instance, ImmutableLoggerConfig.fromJson(loggerConfigJson), dittoHeaders), transformResponse(serviceName, instance) ) ) ) ); }
private Route features(final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId) { return pathEndOrSingleSlash(() -> Directives.route( get(() -> // GET /features?fields=<fieldsString> parameterOptional(ThingsParameter.FIELDS.toString(), fieldsString -> handlePerRequest(ctx, RetrieveFeatures .of(thingId, calculateSelectedFields(fieldsString).orElse( null), dittoHeaders)) ) ), put(() -> // PUT /features extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, featuresJson -> ModifyFeatures .of(thingId, ThingsModelFactory.newFeatures( featuresJson), dittoHeaders)) ) ), delete(() -> // DELETE /features handlePerRequest(ctx, DeleteFeatures.of(thingId, dittoHeaders)) ) ) ); }
private Route thingsEntryAcl(final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId) { return rawPathPrefix(mergeDoubleSlashes().concat(PATH_ACL), () -> // /things/<thingId>/acl pathEndOrSingleSlash(() -> route( get(() -> // GET /things/<thingId>/acl handlePerRequest(ctx, RetrieveAcl.of(thingId, dittoHeaders)) ), put(() -> // PUT /things/<thingId>/acl extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, aclJson -> ModifyAcl.of(thingId, ThingsModelFactory.newAcl(aclJson), dittoHeaders)) ) ) ) ) ); }
private Route policyEntry(final RequestContext ctx, final DittoHeaders dittoHeaders, final String policyId) { return pathEndOrSingleSlash(() -> Directives.route( get(() -> // GET /policies/<policyId> handlePerRequest(ctx, RetrievePolicy.of(policyId, dittoHeaders)) ), put(() -> // PUT /policies/<policyId> extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, policyJson -> ModifyPolicy .of(policyId, PoliciesModelFactory.newPolicy( createPolicyJsonObjectForPut(policyJson, policyId)), dittoHeaders) ) ) ), delete(() -> // DELETE /policies/<policyId> handlePerRequest(ctx, DeletePolicy.of(policyId, dittoHeaders)) ) ) ); }
private Route thingsEntryAttributes(final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId) { return rawPathPrefix(mergeDoubleSlashes().concat(PATH_ATTRIBUTES), () -> pathEndOrSingleSlash(() -> route( get(() -> // GET /things/<thingId>/attributes?fields=<fieldsString> parameterOptional(ThingsParameter.FIELDS.toString(), fieldsString -> handlePerRequest(ctx, RetrieveAttributes .of(thingId, calculateSelectedFields(fieldsString).orElse( null), dittoHeaders)) ) ), put(() -> // PUT /things/<thingId>/attributes extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, attributesJson -> ModifyAttributes.of(thingId, ThingsModelFactory.newAttributes( attributesJson), dittoHeaders)) ) ), delete(() -> // DELETE /things/<thingId>/attributes handlePerRequest(ctx, DeleteAttributes.of(thingId, dittoHeaders)) ) ) ) ); }
private Route claimMessages(final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId) { return rawPathPrefix(mergeDoubleSlashes().concat(PATH_INBOX), () -> // /inbox rawPathPrefix(mergeDoubleSlashes().concat(PATH_CLAIM), () -> // /inbox/claim post(() -> pathEndOrSingleSlash(() -> parameterOptional(Unmarshaller.sync(Long::parseLong), TIMEOUT_PARAMETER, optionalTimeout -> withCustomRequestTimeout(optionalTimeout, this::checkClaimTimeout, defaultClaimTimeout, timeout -> extractDataBytes(payloadSource -> handleMessage(ctx, payloadSource, buildSendClaimMessage( ctx, dittoHeaders, thingId, timeout ) ) ) ) ) ) ) ) ); }
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)) ) ) ); }
extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, featureJson ->
private Route thingsEntryPolicyEntry(final RequestContext ctx, final DittoHeaders dittoHeaders, final String policyId) { return rawPathPrefix(mergeDoubleSlashes().concat(PathMatchers.segment()), label -> pathEndOrSingleSlash(() -> route( get(() -> // GET /entries/<label> handlePerRequest(ctx, RetrievePolicyEntry.of(policyId, Label.of(label), dittoHeaders)) ), put(() -> // PUT /entries/<label> extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, policyEntryJson -> ModifyPolicyEntry .of(policyId, createPolicyEntryForPut(policyEntryJson, label), dittoHeaders)) ) ), delete(() -> // DELETE /entries/<label> handlePerRequest(ctx, DeletePolicyEntry.of(policyId, Label.of(label), dittoHeaders))) ) ) ); }
extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, aclEntryJson ->
private Route featuresEntryDefinition(final RequestContext ctx, final DittoHeaders dittoHeaders, final String thingId) { return rawPathPrefix(mergeDoubleSlashes().concat(PathMatchers.segment()), featureId -> rawPathPrefix(mergeDoubleSlashes().concat(PATH_DEFINITION), () -> pathEndOrSingleSlash(() -> route( get(() -> // GET /features/{featureId}/definition handlePerRequest(ctx, RetrieveFeatureDefinition.of(thingId, featureId, dittoHeaders)) ), put(() -> // PUT /features/{featureId}/definition extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, definitionJson -> ModifyFeatureDefinition.of(thingId, featureId, ThingsModelFactory. newFeatureDefinition( definitionJson), dittoHeaders)) ) ), delete(() -> // DELETE /features/{featureId}/definition handlePerRequest(ctx, DeleteFeatureDefinition.of(thingId, featureId, dittoHeaders)) ) ) ) ) ); }
private Route thingsEntryPolicyEntrySubjects(final RequestContext ctx, final DittoHeaders dittoHeaders, final String policyId) { return rawPathPrefix(mergeDoubleSlashes().concat(PathMatchers.segment()), label -> rawPathPrefix(mergeDoubleSlashes().concat(PATH_SUFFIX_SUBJECTS), () -> pathEndOrSingleSlash(() -> route( get(() -> // GET /entries/<label>/subjects handlePerRequest(ctx, RetrieveSubjects.of(policyId, Label.of(label), dittoHeaders)) ), put(() -> // PUT /entries/<label>/subjects extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, subjectsJson -> ModifySubjects.of(policyId, Label.of(label), PoliciesModelFactory.newSubjects( JsonFactory.newObject( subjectsJson)), dittoHeaders))) ) ) ) ) ); }
private Route thingsEntryPolicyEntryResources(final RequestContext ctx, final DittoHeaders dittoHeaders, final String policyId) { return rawPathPrefix(mergeDoubleSlashes().concat(PathMatchers.segment()), label -> rawPathPrefix(mergeDoubleSlashes().concat(PATH_SUFFIX_RESOURCES), () -> pathEndOrSingleSlash(() -> route( get(() -> // GET /entries/<label>/resources handlePerRequest(ctx, RetrieveResources.of(policyId, Label.of(label), dittoHeaders)) ), put(() -> // PUT /entries/<label>/resources extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource, policyEntryResourcesJson -> ModifyResources.of(policyId, Label.of( label), PoliciesModelFactory.newResources( JsonFactory.newObject( policyEntryResourcesJson)), dittoHeaders))) ) ) ) ) ); }
), extractDataBytes(payloadSource -> handlePerRequest(ctx, dittoHeaders, payloadSource,