Skip to content

Commit 3f35590

Browse files
ackintoshwing328
authored andcommitted
Add style and explode (#4042)
* Add parameter * Set default value as Parameter.explode could be null * Fix typo * Add a link to the spec * Add tests * Delete unused import * Rename: shouldExplode -> isExplode * Include the new property
1 parent f8d3b98 commit 3f35590

File tree

4 files changed

+85
-11
lines changed

4 files changed

+85
-11
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
public class CodegenParameter {
2727
public boolean isFormParam, isQueryParam, isPathParam, isHeaderParam,
2828
isCookieParam, isBodyParam, hasMore, isContainer,
29-
secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel;
29+
secondaryParam, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode;
3030
public String baseName, paramName, dataType, datatypeWithEnum, dataFormat,
31-
collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName;
31+
collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style;
3232

3333
public String example; // example value (x-example)
3434
public String jsonSchema;
@@ -173,6 +173,7 @@ public CodegenParameter copy() {
173173
output.isFreeFormObject = this.isFreeFormObject;
174174
output.isListContainer = this.isListContainer;
175175
output.isMapContainer = this.isMapContainer;
176+
output.isExplode = this.isExplode;
176177

177178
return output;
178179
}
@@ -247,7 +248,8 @@ public boolean equals(Object o) {
247248
Objects.equals(maxItems, that.maxItems) &&
248249
Objects.equals(minItems, that.minItems) &&
249250
Objects.equals(uniqueItems, that.uniqueItems) &&
250-
Objects.equals(multipleOf, that.multipleOf);
251+
Objects.equals(multipleOf, that.multipleOf) &&
252+
Objects.equals(isExplode, that.isExplode);
251253
}
252254

253255
@Override
@@ -316,7 +318,8 @@ public int hashCode() {
316318
maxItems,
317319
minItems,
318320
uniqueItems,
319-
multipleOf);
321+
multipleOf,
322+
isExplode);
320323
}
321324

322325
@java.lang.Override
@@ -386,6 +389,7 @@ public java.lang.String toString() {
386389
", minItems=" + minItems +
387390
", uniqueItems=" + uniqueItems +
388391
", multipleOf=" + multipleOf +
392+
", isExplode=" + isExplode +
389393
'}';
390394
}
391395
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package org.openapitools.codegen;
1919

20-
import com.fasterxml.jackson.core.JsonProcessingException;
2120
import com.google.common.base.CaseFormat;
2221
import com.google.common.collect.ImmutableMap;
2322
import com.samskivert.mustache.Mustache;
@@ -3099,7 +3098,15 @@ public CodegenParameter fromParameter(Parameter parameter, Set<String> imports)
30993098
// set default value
31003099
codegenParameter.defaultValue = toDefaultValue(parameterSchema);
31013100

3102-
// TDOO revise collectionFormat
3101+
if (parameter.getStyle() != null) {
3102+
codegenParameter.style = parameter.getStyle().toString();
3103+
}
3104+
3105+
// the default value is false
3106+
// https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#user-content-parameterexplode
3107+
codegenParameter.isExplode = parameter.getExplode() == null ? false : parameter.getExplode();
3108+
3109+
// TODO revise collectionFormat
31033110
String collectionFormat = null;
31043111
if (ModelUtils.isArraySchema(parameterSchema)) { // for array parameter
31053112
final ArraySchema arraySchema = (ArraySchema) parameterSchema;

modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import io.swagger.v3.oas.models.PathItem;
2828
import io.swagger.v3.oas.models.headers.Header;
2929
import io.swagger.v3.oas.models.media.*;
30-
import io.swagger.v3.oas.models.parameters.Parameter;
3130
import io.swagger.v3.oas.models.parameters.QueryParameter;
3231
import io.swagger.v3.oas.models.parameters.RequestBody;
3332
import io.swagger.v3.oas.models.responses.ApiResponse;
@@ -43,13 +42,11 @@
4342
import org.testng.Assert;
4443
import org.testng.annotations.Test;
4544

46-
import static org.testng.Assert.assertEquals;
47-
import static org.testng.Assert.assertNotNull;
48-
import static org.testng.Assert.assertTrue;
49-
5045
import java.util.*;
5146
import java.util.stream.Collectors;
5247

48+
import static org.testng.Assert.*;
49+
5350

5451
public class DefaultCodegenTest {
5552

@@ -1003,4 +1000,35 @@ public void convertApiNameWithSuffix() {
10031000
assertEquals(codegen.toApiName(""), "DefaultApi");
10041001
}
10051002

1003+
public static class FromParameter {
1004+
private CodegenParameter codegenParameter(String path) {
1005+
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/fromParameter.yaml");
1006+
new InlineModelResolver().flatten(openAPI);
1007+
final DefaultCodegen codegen = new DefaultCodegen();
1008+
codegen.setOpenAPI(openAPI);
1009+
1010+
return codegen
1011+
.fromParameter(
1012+
openAPI
1013+
.getPaths()
1014+
.get(path)
1015+
.getGet()
1016+
.getParameters()
1017+
.get(0),
1018+
new HashSet<>()
1019+
);
1020+
}
1021+
1022+
@Test
1023+
public void setStyle() {
1024+
CodegenParameter parameter = codegenParameter("/set_style");
1025+
assertEquals("form", parameter.style);
1026+
}
1027+
1028+
@Test
1029+
public void setShouldExplode() {
1030+
CodegenParameter parameter = codegenParameter("/set_should_explode");
1031+
assertTrue(parameter.isExplode);
1032+
}
1033+
}
10061034
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
openapi: 3.0.0
2+
servers:
3+
- url: 'localhost:8080'
4+
info:
5+
version: 1.0.0
6+
title: OpenAPI Petstore
7+
license:
8+
name: Apache-2.0
9+
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
10+
paths:
11+
/set_style:
12+
get:
13+
operationId: setStyle
14+
parameters:
15+
- in: query
16+
name: setStyleQuery
17+
style: form
18+
schema:
19+
type: object
20+
properties:
21+
setStyleQueryParam:
22+
type: string
23+
/set_should_explode:
24+
get:
25+
operationId: setShouldExplode
26+
parameters:
27+
- in: query
28+
name: setShouldExplodeQuery
29+
style: form
30+
explode: true
31+
schema:
32+
type: object
33+
properties:
34+
setShouldExplodeQueryParam:
35+
type: string

0 commit comments

Comments
 (0)