Search in sources :

Example 1 with AsyncRequestProcessingMetadata

use of com.palantir.conjure.java.services.UndertowTypeFunctions.AsyncRequestProcessingMetadata in project conjure-java by palantir.

the class UndertowServiceHandlerGenerator method endpointInvocation.

private CodeBlock endpointInvocation(EndpointDefinition endpointDefinition, Map<com.palantir.conjure.spec.TypeName, TypeDefinition> typeDefinitions, TypeMapper typeMapper, TypeMapper returnTypeMapper) {
    CodeBlock.Builder code = CodeBlock.builder();
    // auth code
    Optional<String> authVarName = addAuthCode(code, endpointDefinition);
    // body parameter
    getBodyParamTypeArgument(endpointDefinition.getArgs()).ifPresent(bodyParam -> {
        String paramName = sanitizeVarName(bodyParam.getArgName().get(), endpointDefinition);
        Type dealiased = TypeFunctions.toConjureTypeWithoutAliases(bodyParam.getType(), typeDefinitions);
        if (TypeFunctions.isBinaryOrOptionalBinary(dealiased)) {
            code.addStatement("$1T $2N = $3N.bodySerDe().deserializeInputStream($4N)", InputStream.class, paramName, RUNTIME_VAR_NAME, EXCHANGE_VAR_NAME);
        } else {
            code.addStatement("$1T $2N = $3N.deserialize($4N)", typeMapper.getClassName(bodyParam.getType()).box(), paramName, DESERIALIZER_VAR_NAME, EXCHANGE_VAR_NAME);
        }
        code.add(generateParamMetadata(bodyParam, bodyParam.getArgName().get(), paramName, typeMapper));
    });
    // path parameters
    addPathParamsCode(code, endpointDefinition, typeDefinitions, typeMapper);
    // header parameters
    addHeaderParamsCode(code, endpointDefinition, typeDefinitions, typeMapper);
    // query parameters
    addQueryParamsCode(code, endpointDefinition, typeDefinitions, typeMapper);
    List<CodeBlock> methodArgs = new ArrayList<>();
    authVarName.ifPresent(name -> methodArgs.add(CodeBlock.of("$N", name)));
    ParameterOrder.sorted(endpointDefinition.getArgs()).stream().map(arg -> arg.getArgName().get()).map(arg -> sanitizeVarName(arg, endpointDefinition)).map(arg -> CodeBlock.of("$N", arg)).forEach(methodArgs::add);
    if (Tags.hasServerRequestContext(endpointDefinition)) {
        methodArgs.add(CodeBlock.of("$N.contexts().createContext($N, this)", RUNTIME_VAR_NAME, EXCHANGE_VAR_NAME));
    }
    Optional<AsyncRequestProcessingMetadata> async = UndertowTypeFunctions.async(endpointDefinition, options);
    if (async.isPresent() || endpointDefinition.getReturns().isPresent()) {
        code.addStatement("$1T $2N = $3N.$4L($5L)", async.isPresent() ? UndertowTypeFunctions.getAsyncReturnType(endpointDefinition, returnTypeMapper, options) : returnTypeMapper.getClassName(endpointDefinition.getReturns().get()), RESULT_VAR_NAME, DELEGATE_VAR_NAME, JavaNameSanitizer.sanitize(endpointDefinition.getEndpointName().get()), methodArgs.stream().collect(CodeBlock.joining(",")));
    } else {
        code.addStatement("$1N.$2L($3L)", DELEGATE_VAR_NAME, endpointDefinition.getEndpointName(), methodArgs.stream().collect(CodeBlock.joining(",")));
    }
    if (async.isPresent()) {
        AsyncRequestProcessingMetadata metadata = async.get();
        if (metadata.timeout().isPresent()) {
            HumanReadableDuration timeout = metadata.timeout().get();
            code.add(CodeBlocks.statement("$N.async().register($N, this, $T.ofMillis(/* $L */ $L), $N)", RUNTIME_VAR_NAME, RESULT_VAR_NAME, Duration.class, timeout.toString(), timeout.toMilliseconds(), EXCHANGE_VAR_NAME));
        } else {
            code.add(CodeBlocks.statement("$1N.async().register($2N, this, $3N)", RUNTIME_VAR_NAME, RESULT_VAR_NAME, EXCHANGE_VAR_NAME));
        }
    } else {
        code.add(generateReturnValueCodeBlock(endpointDefinition, typeDefinitions));
    }
    return code.build();
}
Also used : DefaultTypeVisitor(com.palantir.conjure.java.visitor.DefaultTypeVisitor) Endpoint(com.palantir.conjure.java.undertow.lib.Endpoint) HeaderAuthType(com.palantir.conjure.spec.HeaderAuthType) TypeVisitor(com.palantir.conjure.visitor.TypeVisitor) Modifier(javax.lang.model.element.Modifier) UndertowService(com.palantir.conjure.java.undertow.lib.UndertowService) HttpServerExchange(io.undertow.server.HttpServerExchange) AuthHeader(com.palantir.tokens.auth.AuthHeader) ClassName(com.squareup.javapoet.ClassName) ReturnValueWriter(com.palantir.conjure.java.undertow.lib.ReturnValueWriter) Collections2(com.google.common.collect.Collections2) ServiceDefinition(com.palantir.conjure.spec.ServiceDefinition) StringUtils(org.apache.commons.lang3.StringUtils) Options(com.palantir.conjure.java.Options) ParameterTypeVisitor(com.palantir.conjure.visitor.ParameterTypeVisitor) HttpString(io.undertow.util.HttpString) TypeMarker(com.palantir.conjure.java.undertow.lib.TypeMarker) Duration(java.time.Duration) Map(java.util.Map) CodeBlocks(com.palantir.conjure.java.types.CodeBlocks) OptionalType(com.palantir.conjure.spec.OptionalType) MoreVisitors(com.palantir.conjure.java.visitor.MoreVisitors) HumanReadableDuration(com.palantir.humanreadabletypes.HumanReadableDuration) ImmutableSet(com.google.common.collect.ImmutableSet) AuthType(com.palantir.conjure.spec.AuthType) MoreCollectors(com.google.common.collect.MoreCollectors) Collection(java.util.Collection) Set(java.util.Set) TypeMapper(com.palantir.conjure.java.types.TypeMapper) Streams(com.google.common.collect.Streams) ParameterType(com.palantir.conjure.spec.ParameterType) JavaFile(com.squareup.javapoet.JavaFile) List(java.util.List) Tags(com.palantir.conjure.java.util.Tags) UndertowRuntime(com.palantir.conjure.java.undertow.lib.UndertowRuntime) TypeName(com.squareup.javapoet.TypeName) Optional(java.util.Optional) Methods(io.undertow.util.Methods) PrimitiveType(com.palantir.conjure.spec.PrimitiveType) EndpointDefinition(com.palantir.conjure.spec.EndpointDefinition) Iterables(com.google.common.collect.Iterables) ListType(com.palantir.conjure.spec.ListType) ExternalReference(com.palantir.conjure.spec.ExternalReference) TypeFunctions(com.palantir.conjure.java.util.TypeFunctions) AuthTypeVisitor(com.palantir.conjure.visitor.AuthTypeVisitor) FieldSpec(com.squareup.javapoet.FieldSpec) Type(com.palantir.conjure.spec.Type) Deque(java.util.Deque) Function(java.util.function.Function) ArrayList(java.util.ArrayList) Lists(com.google.common.collect.Lists) BearerToken(com.palantir.tokens.auth.BearerToken) ImmutableList(com.google.common.collect.ImmutableList) ConjureTags(com.palantir.conjure.java.ConjureTags) AsyncRequestProcessingMetadata(com.palantir.conjure.java.services.UndertowTypeFunctions.AsyncRequestProcessingMetadata) SetType(com.palantir.conjure.spec.SetType) ParameterOrder(com.palantir.conjure.java.util.ParameterOrder) StatusCodes(io.undertow.util.StatusCodes) CodeBlock(com.squareup.javapoet.CodeBlock) Serializer(com.palantir.conjure.java.undertow.lib.Serializer) TypeDefinition(com.palantir.conjure.spec.TypeDefinition) MethodSpec(com.squareup.javapoet.MethodSpec) Packages(com.palantir.conjure.java.util.Packages) CookieAuthType(com.palantir.conjure.spec.CookieAuthType) JavaNameSanitizer(com.palantir.conjure.java.util.JavaNameSanitizer) ParameterizedTypeName(com.squareup.javapoet.ParameterizedTypeName) IOException(java.io.IOException) TypeSpec(com.squareup.javapoet.TypeSpec) EndpointName(com.palantir.conjure.spec.EndpointName) HttpHandler(io.undertow.server.HttpHandler) AnnotationSpec(com.squareup.javapoet.AnnotationSpec) ConjureAnnotations(com.palantir.conjure.java.ConjureAnnotations) Deserializer(com.palantir.conjure.java.undertow.lib.Deserializer) ArgumentDefinition(com.palantir.conjure.spec.ArgumentDefinition) InputStream(java.io.InputStream) CodeBlock(com.squareup.javapoet.CodeBlock) ArrayList(java.util.ArrayList) Duration(java.time.Duration) HumanReadableDuration(com.palantir.humanreadabletypes.HumanReadableDuration) HttpString(io.undertow.util.HttpString) HeaderAuthType(com.palantir.conjure.spec.HeaderAuthType) OptionalType(com.palantir.conjure.spec.OptionalType) AuthType(com.palantir.conjure.spec.AuthType) ParameterType(com.palantir.conjure.spec.ParameterType) PrimitiveType(com.palantir.conjure.spec.PrimitiveType) ListType(com.palantir.conjure.spec.ListType) Type(com.palantir.conjure.spec.Type) SetType(com.palantir.conjure.spec.SetType) CookieAuthType(com.palantir.conjure.spec.CookieAuthType) HumanReadableDuration(com.palantir.humanreadabletypes.HumanReadableDuration) AsyncRequestProcessingMetadata(com.palantir.conjure.java.services.UndertowTypeFunctions.AsyncRequestProcessingMetadata)

Aggregations

Collections2 (com.google.common.collect.Collections2)1 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 Iterables (com.google.common.collect.Iterables)1 Lists (com.google.common.collect.Lists)1 MoreCollectors (com.google.common.collect.MoreCollectors)1 Streams (com.google.common.collect.Streams)1 ConjureAnnotations (com.palantir.conjure.java.ConjureAnnotations)1 ConjureTags (com.palantir.conjure.java.ConjureTags)1 Options (com.palantir.conjure.java.Options)1 AsyncRequestProcessingMetadata (com.palantir.conjure.java.services.UndertowTypeFunctions.AsyncRequestProcessingMetadata)1 CodeBlocks (com.palantir.conjure.java.types.CodeBlocks)1 TypeMapper (com.palantir.conjure.java.types.TypeMapper)1 Deserializer (com.palantir.conjure.java.undertow.lib.Deserializer)1 Endpoint (com.palantir.conjure.java.undertow.lib.Endpoint)1 ReturnValueWriter (com.palantir.conjure.java.undertow.lib.ReturnValueWriter)1 Serializer (com.palantir.conjure.java.undertow.lib.Serializer)1 TypeMarker (com.palantir.conjure.java.undertow.lib.TypeMarker)1 UndertowRuntime (com.palantir.conjure.java.undertow.lib.UndertowRuntime)1 UndertowService (com.palantir.conjure.java.undertow.lib.UndertowService)1