001package io.avaje.http.generator.core.openapi; 002 003import io.avaje.http.generator.core.ElementReader; 004import io.avaje.http.generator.core.ParamType; 005import io.avaje.http.generator.core.javadoc.Javadoc; 006import io.swagger.v3.oas.models.Operation; 007import io.swagger.v3.oas.models.media.Schema; 008import io.swagger.v3.oas.models.parameters.Parameter; 009 010import javax.lang.model.element.Element; 011 012/** 013 * Build the OpenAPI for a method parameter. 014 */ 015public class MethodParamDocBuilder { 016 017 private final DocContext ctx; 018 private final Javadoc javadoc; 019 private final Operation operation; 020 private final String paramName; 021 private final String varName; 022 private final String rawType; 023 private final ParamType paramType; 024 private final Element element; 025 026 public MethodParamDocBuilder(MethodDocBuilder methodDoc, ElementReader param) { 027 028 this.ctx = methodDoc.getContext(); 029 this.javadoc = methodDoc.getJavadoc(); 030 this.operation = methodDoc.getOperation(); 031 032 this.paramType = param.getParamType(); 033 this.paramName = param.getParamName(); 034 this.varName = param.getVarName(); 035 this.rawType = param.getRawType(); 036 this.element = param.getElement(); 037 } 038 039 /** 040 * Build the OpenAPI documentation for the method parameter. 041 */ 042 public void build() { 043 044 if (paramType == ParamType.FORM || paramType == ParamType.BODY) { 045 addMetaRequestBody(ctx, javadoc, operation); 046 047 } else { 048 Parameter param = new Parameter(); 049 param.setName(varName); 050 param.setDescription(javadoc.getParams().get(paramName)); 051 052 Schema schema = ctx.toSchema(rawType, element); 053 if (paramType == ParamType.FORMPARAM) { 054 ctx.addFormParam(operation, varName, schema); 055 056 } else { 057 param.setSchema(schema); 058 param.setIn(paramType.getType()); 059 operation.addParametersItem(param); 060 } 061 } 062 } 063 064 private void addMetaRequestBody(DocContext ctx, Javadoc javadoc, Operation operation) { 065 066 Schema schema = ctx.toSchema(rawType, element); 067 String description = javadoc.getParams().get(paramName); 068 069 boolean asForm = (paramType == ParamType.FORM); 070 ctx.addRequestBody(operation, schema, asForm, description); 071 } 072 073}