Skip to content

Commit 7a473d6

Browse files
authored
Merge pull request #9827 from swagger-api/propertiesInComposedModel
Adding support for properties in ComposedModel
2 parents 0f41e42 + ce684f3 commit 7a473d6

File tree

11 files changed

+109
-26
lines changed

11 files changed

+109
-26
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -1474,6 +1474,10 @@ public CodegenModel fromModel(String name, Model model, Map<String, Model> allDe
14741474
}
14751475
}
14761476

1477+
if (model.getProperties() != null) {
1478+
properties.putAll(model.getProperties());
1479+
}
1480+
14771481
// child model (properties owned by the model itself)
14781482
Model child = composed.getChild();
14791483
if (child != null && child instanceof RefModel && allDefinitions != null) {
@@ -1486,6 +1490,7 @@ public CodegenModel fromModel(String name, Model model, Map<String, Model> allDe
14861490
addProperties(allProperties, allRequired, child, allDefinitions);
14871491
}
14881492
}
1493+
14891494
addVars(m, properties, required, allDefinitions, allProperties, allRequired);
14901495
} else {
14911496
ModelImpl impl = (ModelImpl) model;
@@ -1556,9 +1561,14 @@ protected void addProperties(Map<String, Property> properties,
15561561
}
15571562
} else if (model instanceof RefModel) {
15581563
String interfaceRef = ((RefModel) model).getSimpleRef();
1559-
Model interfaceModel = allDefinitions.get(interfaceRef);
1560-
addProperties(properties, required, interfaceModel, allDefinitions);
1564+
if (allDefinitions != null) {
1565+
Model interfaceModel = allDefinitions.get(interfaceRef);
1566+
addProperties(properties, required, interfaceModel, allDefinitions);
1567+
}
15611568
} else if (model instanceof ComposedModel) {
1569+
if (model.getProperties() != null) {
1570+
properties.putAll(model.getProperties());
1571+
}
15621572
for (Model component :((ComposedModel) model).getAllOf()) {
15631573
addProperties(properties, required, component, allDefinitions);
15641574
}

modules/swagger-codegen/src/test/java/io/swagger/codegen/CodegenTest.java

+23-8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,21 @@
1414

1515
public class CodegenTest {
1616

17+
@Test(description = "handle simple composition")
18+
public void propertiesInComposedModelTest() {
19+
final Swagger swagger = parseAndPrepareSwagger("src/test/resources/2_0/allOfProperties.yaml");
20+
final DefaultCodegen codegen = new DefaultCodegen();
21+
codegen.supportsInheritance = true;
22+
final Model model = swagger.getDefinitions().get("RedisResource");
23+
CodegenModel composed = codegen.fromModel("RedisResource", model, swagger.getDefinitions());
24+
25+
Assert.assertEquals(composed.vars.size(), 3);
26+
Assert.assertEquals(composed.vars.get(0).baseName, "modelOneProp");
27+
Assert.assertEquals(composed.vars.get(1).baseName, "properties");
28+
Assert.assertEquals(composed.vars.get(2).baseName, "zones");
29+
Assert.assertNull(composed.parent);
30+
}
31+
1732
@Test(description = "test sanitizeTag")
1833
public void sanitizeTagTest() {
1934
final DefaultCodegen codegen = new DefaultCodegen();
@@ -47,7 +62,7 @@ public void camelizeNamesTest() {
4762
Assert.assertEquals(codegen.camelize(".foo.bar"), "FooBar");
4863
Assert.assertEquals(codegen.camelize("foo$bar"), "Foo$bar");
4964
Assert.assertEquals(codegen.camelize("foo_$bar"), "Foo$bar");
50-
65+
5166
Assert.assertEquals(codegen.camelize("foo_bar"), "FooBar");
5267
Assert.assertEquals(codegen.camelize("foo_bar_baz"), "FooBarBaz");
5368
Assert.assertEquals(codegen.camelize("foo/bar.baz"), "FooBarBaz");
@@ -232,7 +247,7 @@ public void fileResponeseTest() {
232247
Assert.assertTrue(op.responses.get(0).isFile);
233248
Assert.assertTrue(op.isResponseFile);
234249
}
235-
250+
236251
@Test(description = "discriminator is present")
237252
public void discriminatorTest() {
238253
final Swagger model = parseAndPrepareSwagger("src/test/resources/2_0/discriminatorTest.json");
@@ -410,47 +425,47 @@ public void relativeDefinitionsMapInResponseTest() {
410425
Assert.assertTrue(op.imports.contains("PhotoThumbnailsRequest"));
411426

412427
}
413-
428+
414429
@Test(description = "use operation consumes and produces")
415430
public void localConsumesAndProducesTest() {
416431
final Swagger model = parseAndPrepareSwagger("src/test/resources/2_0/globalConsumesAndProduces.json");
417432
final DefaultCodegen codegen = new DefaultCodegen();
418433
final String path = "/tests/localConsumesAndProduces";
419434
final Operation p = model.getPaths().get(path).getGet();
420435
CodegenOperation op = codegen.fromOperation(path, "get", p, model.getDefinitions(), model);
421-
436+
422437
Assert.assertTrue(op.hasConsumes);
423438
Assert.assertEquals(op.consumes.size(), 1);
424439
Assert.assertEquals(op.consumes.get(0).get("mediaType"), "application/json");
425440
Assert.assertTrue(op.hasProduces);
426441
Assert.assertEquals(op.produces.size(), 1);
427442
Assert.assertEquals(op.produces.get(0).get("mediaType"), "application/json");
428443
}
429-
444+
430445
@Test(description = "use spec consumes and produces")
431446
public void globalConsumesAndProducesTest() {
432447
final Swagger model = parseAndPrepareSwagger("src/test/resources/2_0/globalConsumesAndProduces.json");
433448
final DefaultCodegen codegen = new DefaultCodegen();
434449
final String path = "/tests/globalConsumesAndProduces";
435450
final Operation p = model.getPaths().get(path).getGet();
436451
CodegenOperation op = codegen.fromOperation(path, "get", p, model.getDefinitions(), model);
437-
452+
438453
Assert.assertTrue(op.hasConsumes);
439454
Assert.assertEquals(op.consumes.size(), 1);
440455
Assert.assertEquals(op.consumes.get(0).get("mediaType"), "application/global_consumes");
441456
Assert.assertTrue(op.hasProduces);
442457
Assert.assertEquals(op.produces.size(), 1);
443458
Assert.assertEquals(op.produces.get(0).get("mediaType"), "application/global_produces");
444459
}
445-
460+
446461
@Test(description = "use operation consumes and produces (reset in operation with empty array)")
447462
public void localResetConsumesAndProducesTest() {
448463
final Swagger model = parseAndPrepareSwagger("src/test/resources/2_0/globalConsumesAndProduces.json");
449464
final DefaultCodegen codegen = new DefaultCodegen();
450465
final String path = "/tests/localResetConsumesAndProduces";
451466
final Operation p = model.getPaths().get(path).getGet();
452467
CodegenOperation op = codegen.fromOperation(path, "get", p, model.getDefinitions(), model);
453-
468+
454469
Assert.assertNotNull(op);
455470
Assert.assertFalse(op.hasConsumes);
456471
Assert.assertNull(op.consumes);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
swagger: '2.0'
2+
info:
3+
version: 0.0.0
4+
title: Simple API
5+
paths:
6+
/:
7+
get:
8+
responses:
9+
200:
10+
description: OK
11+
12+
definitions:
13+
14+
ModelOne:
15+
type: object
16+
properties:
17+
modelOneProp:
18+
type: string
19+
20+
ModelTwo:
21+
type: object
22+
properties:
23+
modelTwoProp:
24+
type: string
25+
26+
ModelThree:
27+
type: object
28+
properties:
29+
modelThreeProp:
30+
type: string
31+
32+
33+
User_Id_Resource:
34+
allOf:
35+
- "$ref": "#/definitions/ModelTwo"
36+
properties:
37+
aplicacion:
38+
type: string
39+
description: some description
40+
example: some example value
41+
42+
RedisResource:
43+
properties:
44+
properties:
45+
x-ms-client-flatten: true
46+
"$ref": "#/definitions/ModelTwo"
47+
description: Redis cache properties.
48+
zones:
49+
type: array
50+
items:
51+
type: string
52+
description: A list of availability zones denoting where the resource needs
53+
to come from.
54+
required:
55+
- properties
56+
allOf:
57+
- "$ref": "#/definitions/ModelOne"
58+
description: A single Redis item in List or Get Operation.

pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -938,10 +938,10 @@
938938
</repository>
939939
</repositories>
940940
<properties>
941-
<swagger-parser-version>1.0.47</swagger-parser-version>
941+
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
942942
<scala-version>2.11.1</scala-version>
943943
<felix-version>3.3.0</felix-version>
944-
<swagger-core-version>1.5.24</swagger-core-version>
944+
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
945945
<commons-io-version>2.4</commons-io-version>
946946
<commons-cli-version>1.2</commons-cli-version>
947947
<junit-version>4.8.1</junit-version>

pom.xml.bash

+2-2
Original file line numberDiff line numberDiff line change
@@ -914,10 +914,10 @@
914914
</repository>
915915
</repositories>
916916
<properties>
917-
<swagger-parser-version>1.0.47</swagger-parser-version>
917+
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
918918
<scala-version>2.11.1</scala-version>
919919
<felix-version>3.3.0</felix-version>
920-
<swagger-core-version>1.5.24</swagger-core-version>
920+
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
921921
<commons-io-version>2.4</commons-io-version>
922922
<commons-cli-version>1.2</commons-cli-version>
923923
<junit-version>4.8.1</junit-version>

pom.xml.circleci

+2-2
Original file line numberDiff line numberDiff line change
@@ -962,10 +962,10 @@
962962
</repository>
963963
</repositories>
964964
<properties>
965-
<swagger-parser-version>1.0.47</swagger-parser-version>
965+
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
966966
<scala-version>2.11.1</scala-version>
967967
<felix-version>3.3.0</felix-version>
968-
<swagger-core-version>1.5.24</swagger-core-version>
968+
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
969969
<commons-io-version>2.4</commons-io-version>
970970
<commons-cli-version>1.2</commons-cli-version>
971971
<junit-version>4.8.1</junit-version>

pom.xml.circleci.java7

+2-2
Original file line numberDiff line numberDiff line change
@@ -944,10 +944,10 @@
944944
</repository>
945945
</repositories>
946946
<properties>
947-
<swagger-parser-version>1.0.47</swagger-parser-version>
947+
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
948948
<scala-version>2.11.1</scala-version>
949949
<felix-version>3.3.0</felix-version>
950-
<swagger-core-version>1.5.24</swagger-core-version>
950+
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
951951
<commons-io-version>2.4</commons-io-version>
952952
<commons-cli-version>1.2</commons-cli-version>
953953
<junit-version>4.8.1</junit-version>

pom.xml.ios

+2-2
Original file line numberDiff line numberDiff line change
@@ -922,10 +922,10 @@
922922
</repository>
923923
</repositories>
924924
<properties>
925-
<swagger-parser-version>1.0.47</swagger-parser-version>
925+
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
926926
<scala-version>2.11.1</scala-version>
927927
<felix-version>3.3.0</felix-version>
928-
<swagger-core-version>1.5.24</swagger-core-version>
928+
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
929929
<commons-io-version>2.4</commons-io-version>
930930
<commons-cli-version>1.2</commons-cli-version>
931931
<junit-version>4.8.1</junit-version>

pom.xml.jenkins

+2-2
Original file line numberDiff line numberDiff line change
@@ -1004,10 +1004,10 @@
10041004
</repository>
10051005
</repositories>
10061006
<properties>
1007-
<swagger-parser-version>1.0.47</swagger-parser-version>
1007+
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
10081008
<scala-version>2.11.1</scala-version>
10091009
<felix-version>3.3.0</felix-version>
1010-
<swagger-core-version>1.5.24</swagger-core-version>
1010+
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
10111011
<commons-io-version>2.4</commons-io-version>
10121012
<commons-cli-version>1.2</commons-cli-version>
10131013
<junit-version>4.8.1</junit-version>

pom.xml.jenkins.java7

+2-2
Original file line numberDiff line numberDiff line change
@@ -926,10 +926,10 @@
926926
</repository>
927927
</repositories>
928928
<properties>
929-
<swagger-parser-version>1.0.47</swagger-parser-version>
929+
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
930930
<scala-version>2.11.1</scala-version>
931931
<felix-version>3.3.0</felix-version>
932-
<swagger-core-version>1.5.24</swagger-core-version>
932+
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
933933
<commons-io-version>2.4</commons-io-version>
934934
<commons-cli-version>1.2</commons-cli-version>
935935
<junit-version>4.8.1</junit-version>

pom.xml.travis

+2-2
Original file line numberDiff line numberDiff line change
@@ -938,10 +938,10 @@
938938
</repository>
939939
</repositories>
940940
<properties>
941-
<swagger-parser-version>1.0.47</swagger-parser-version>
941+
<swagger-parser-version>1.0.48-SNAPSHOT</swagger-parser-version>
942942
<scala-version>2.11.1</scala-version>
943943
<felix-version>3.3.0</felix-version>
944-
<swagger-core-version>1.5.24</swagger-core-version>
944+
<swagger-core-version>1.5.25-SNAPSHOT</swagger-core-version>
945945
<commons-io-version>2.4</commons-io-version>
946946
<commons-cli-version>1.2</commons-cli-version>
947947
<junit-version>4.8.1</junit-version>

0 commit comments

Comments
 (0)