Skip to content

Commit

Permalink
Add support for query annotation with name field
Browse files Browse the repository at this point in the history
  • Loading branch information
TharmiganK committed Sep 12, 2024
1 parent 742e11e commit b6f92b9
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ public final class Constants {
public static final String ERROR_PAYLOAD = "ErrorPayload";
public static final String TREAT_NILABLE_AS_OPTIONAL = "treatNilableAsOptional";
public static final String HTTP_HEADER = "http:Header";
public static final String HTTP_QUERY = "http:Query";
public static final String BYTE = "byte";
public static final String XML = "xml";
public static final String JSON = "json";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import java.util.Map;
import java.util.Objects;

import static io.ballerina.openapi.service.mapper.utils.MapperCommonUtils.getQueryName;
import static io.ballerina.openapi.service.mapper.utils.MapperCommonUtils.unescapeIdentifier;

/**
Expand All @@ -62,7 +63,8 @@ public QueryParameterMapper(ParameterNode parameterNode, Map<String, String> api
Symbol parameterSymbol = additionalData.semanticModel().symbol(parameterNode).orElse(null);
if (Objects.nonNull(parameterSymbol) && (parameterSymbol instanceof ParameterSymbol queryParameter)) {
this.type = queryParameter.typeDescriptor();
this.name = unescapeIdentifier(queryParameter.getName().get());
String paramName = unescapeIdentifier(queryParameter.getName().get());
this.name = getQueryName(parameterNode, paramName);
this.isRequired = queryParameter.paramKind().equals(ParameterKind.REQUIRED);
this.description = apiDocs.get(queryParameter.getName().get());
this.treatNilableAsOptional = treatNilableAsOptional;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@
import static io.ballerina.openapi.service.mapper.Constants.BALLERINA;
import static io.ballerina.openapi.service.mapper.Constants.EMPTY;
import static io.ballerina.openapi.service.mapper.Constants.HTTP;
import static io.ballerina.openapi.service.mapper.Constants.HTTP_HEADER;
import static io.ballerina.openapi.service.mapper.Constants.HTTP_QUERY;
import static io.ballerina.openapi.service.mapper.Constants.HTTP_SERVICE_CONTRACT;
import static io.ballerina.openapi.service.mapper.Constants.HYPHEN;
import static io.ballerina.openapi.service.mapper.Constants.JSON_EXTENSION;
Expand Down Expand Up @@ -439,6 +441,14 @@ public static String unescapeIdentifier(String parameterName) {
}

public static String getHeaderName(ParameterNode parameterNode, String defaultName) {
return getParamName(HTTP_HEADER, parameterNode, defaultName);
}

public static String getQueryName(ParameterNode parameterNode, String defaultName) {
return getParamName(HTTP_QUERY, parameterNode, defaultName);
}

public static String getParamName(String paramTypeName, ParameterNode parameterNode, String defaultName) {
NodeList<AnnotationNode> annotations = null;
if (parameterNode instanceof RequiredParameterNode requiredParameterNode) {
annotations = requiredParameterNode.annotations();
Expand All @@ -449,17 +459,17 @@ public static String getHeaderName(ParameterNode parameterNode, String defaultNa
return defaultName;
}
for (AnnotationNode annotation : annotations) {
if (annotation.annotReference().toString().trim().equals("http:Header")) {
String valueExpression = getNameFromHeaderAnnotation(annotation);
if (valueExpression != null) {
if (annotation.annotReference().toString().trim().equals(paramTypeName)) {
String valueExpression = getNameFromParamAnnotation(annotation);
if (Objects.nonNull(valueExpression)) {
return valueExpression;
}
}
}
return defaultName;
}

private static String getNameFromHeaderAnnotation(AnnotationNode annotation) {
private static String getNameFromParamAnnotation(AnnotationNode annotation) {
Optional<MappingConstructorExpressionNode> annotationRecord = annotation.annotValue();
if (annotationRecord.isEmpty()) {
return null;
Expand Down

0 comments on commit b6f92b9

Please sign in to comment.