All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cloudfoundry.reactor.uaa.AbstractUaaOperations Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2013-2021 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.cloudfoundry.reactor.uaa;

import io.netty.handler.codec.http.HttpHeaders;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Stream;
import org.cloudfoundry.reactor.ConnectionContext;
import org.cloudfoundry.reactor.TokenProvider;
import org.cloudfoundry.reactor.client.QueryBuilder;
import org.cloudfoundry.reactor.util.AbstractReactorOperations;
import org.cloudfoundry.reactor.util.ErrorPayloadMappers;
import org.cloudfoundry.reactor.util.Operator;
import org.cloudfoundry.reactor.util.UriQueryParameter;
import org.cloudfoundry.reactor.util.UriQueryParameters;
import org.springframework.web.util.UriComponentsBuilder;
import reactor.core.publisher.Mono;
import reactor.netty.http.client.HttpClientResponse;

public abstract class AbstractUaaOperations extends AbstractReactorOperations {

    protected AbstractUaaOperations(
            ConnectionContext connectionContext,
            Mono root,
            TokenProvider tokenProvider,
            Map requestTags) {
        super(connectionContext, root, tokenProvider, requestTags);
    }

    @Override
    protected Mono createOperator() {
        return super.createOperator().map(this::attachErrorPayloadMapper);
    }

    protected final  Mono delete(
            Object requestPayload,
            Class responseType,
            Function uriTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(headers -> addHeaders(headers, requestPayload))
                                        .delete()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .send(requestPayload)
                                        .response()
                                        .parseBody(responseType));
    }

    protected final Mono get(
            Object requestPayload,
            Function uriTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(headers -> addHeaders(headers, requestPayload))
                                        .get()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .response()
                                        .get());
    }

    protected final Mono get(
            Object requestPayload,
            Function uriTransformer,
            Consumer headersTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(
                                                headers ->
                                                        addHeaders(
                                                                headers,
                                                                requestPayload,
                                                                headersTransformer))
                                        .get()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .response()
                                        .get());
    }

    protected final Mono get(
            Object requestPayload,
            Function uriTransformer,
            Consumer headersTransformer,
            Function> headersWhenTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(
                                                headers ->
                                                        addHeaders(
                                                                headers,
                                                                requestPayload,
                                                                headersTransformer))
                                        .headersWhen(headersWhenTransformer)
                                        .get()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .response()
                                        .get());
    }

    protected final  Mono get(
            Object requestPayload,
            Class responseType,
            Function uriTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(headers -> addHeaders(headers, requestPayload))
                                        .get()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .response()
                                        .parseBody(responseType));
    }

    protected final  Mono get(
            Object requestPayload,
            Class responseType,
            Function uriTransformer,
            Consumer headersTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(
                                                headers ->
                                                        addHeaders(
                                                                headers,
                                                                requestPayload,
                                                                headersTransformer))
                                        .get()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .response()
                                        .parseBody(responseType));
    }

    protected final  Mono patch(
            Object requestPayload,
            Class responseType,
            Function uriTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(headers -> addHeaders(headers, requestPayload))
                                        .patch()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .send(requestPayload)
                                        .response()
                                        .parseBody(responseType));
    }

    protected final  Mono post(
            Object requestPayload,
            Class responseType,
            Function uriTransformer,
            Consumer headersTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(
                                                headers ->
                                                        addHeaders(
                                                                headers,
                                                                requestPayload,
                                                                headersTransformer))
                                        .post()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .send(requestPayload)
                                        .response()
                                        .parseBody(responseType));
    }

    protected final  Mono post(
            Object requestPayload,
            Class responseType,
            Function uriTransformer,
            Consumer headersTransformer,
            Function> headersWhenTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(
                                                headers ->
                                                        addHeaders(
                                                                headers,
                                                                requestPayload,
                                                                headersTransformer))
                                        .headersWhen(headersWhenTransformer)
                                        .post()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .send(requestPayload)
                                        .response()
                                        .parseBody(responseType));
    }

    protected final  Mono post(
            Object requestPayload,
            Class responseType,
            Function uriTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(headers -> addHeaders(headers, requestPayload))
                                        .post()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .send(requestPayload)
                                        .response()
                                        .parseBody(responseType));
    }

    protected final  Mono put(
            Object requestPayload,
            Class responseType,
            Function uriTransformer) {
        return createOperator()
                .flatMap(
                        operator ->
                                operator.headers(headers -> addHeaders(headers, requestPayload))
                                        .put()
                                        .uri(
                                                queryTransformer(requestPayload)
                                                        .andThen(uriTransformer))
                                        .send(requestPayload)
                                        .response()
                                        .parseBody(responseType));
    }

    private static void addHeaders(
            HttpHeaders httpHeaders,
            Object requestPayload,
            Consumer headersTransformer) {
        addHeaders(httpHeaders, requestPayload);
        headersTransformer.accept(httpHeaders);
    }

    private static void addHeaders(HttpHeaders httpHeaders, Object requestPayload) {
        IdentityZoneBuilder.augment(httpHeaders, requestPayload);
        VersionBuilder.augment(httpHeaders, requestPayload);
    }

    private Operator attachErrorPayloadMapper(Operator operator) {
        return operator.withErrorPayloadMapper(
                ErrorPayloadMappers.uaa(this.connectionContext.getObjectMapper()));
    }

    private Function queryTransformer(
            Object requestPayload) {
        return builder -> {
            Stream parameters = new QueryBuilder().build(requestPayload);
            UriQueryParameters.set(builder, parameters);
            return builder;
        };
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy