Skip to content

Commit c3dd05b

Browse files
authored
Support additional props (#133)
* Basic support for additional properties * review * add back the else branch * fix
1 parent f8bc444 commit c3dd05b

File tree

14 files changed

+204
-2
lines changed

14 files changed

+204
-2
lines changed

core/src/main/java/io/apicurio/hub/api/codegen/OpenApi2JaxRs.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public boolean isIncludeHashcodeAndEquals() {
125125

126126
@Override
127127
public boolean isIncludeAdditionalProperties() {
128-
return false;
128+
return true;
129129
}
130130

131131
@Override

core/src/main/java/io/apicurio/hub/api/codegen/pre/DocumentPreProcessor.java

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class DocumentPreProcessor {
3333
new OpenApiDateTimeSimpleTypeProcessor(),
3434
new OpenApiByteSimpleTypeProcessor(),
3535
new OpenApiMapDataTypeProcessor(),
36+
new OpenApiAdditionalPropertiesDataTypeProcessor(),
3637
new OpenApiTypeInliner(),
3738
new OpenApiInlinedSchemaRemover(),
3839
new OpenApiParameterInliner(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2021 JBoss Inc
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.apicurio.hub.api.codegen.pre;
18+
19+
import io.apicurio.datamodels.models.Schema;
20+
import io.apicurio.datamodels.models.openapi.v31.OpenApi31Schema;
21+
import io.apicurio.datamodels.models.union.BooleanUnionValueImpl;
22+
import io.apicurio.hub.api.codegen.jaxrs.TraversingOpenApi31VisitorAdapter;
23+
24+
/**
25+
26+
*/
27+
public class OpenApiAdditionalPropertiesDataTypeProcessor extends TraversingOpenApi31VisitorAdapter {
28+
29+
/**
30+
* @see io.apicurio.datamodels.models.openapi.v31.visitors.OpenApi31VisitorAdapter#visitSchema(io.apicurio.datamodels.models.Schema)
31+
*/
32+
@Override
33+
public void visitSchema(Schema node) {
34+
OpenApi31Schema schema = (OpenApi31Schema) node;
35+
if (schema.getAdditionalProperties() != null && (schema.getAdditionalProperties().isSchema() ||
36+
(schema.getAdditionalProperties().isBoolean() && schema.getAdditionalProperties().asBoolean()))) {
37+
// WORKAROUND: https://github.com/joelittlejohn/jsonschema2pojo/pull/1515
38+
schema.setAdditionalProperties(new BooleanUnionValueImpl(Boolean.TRUE));
39+
} else {
40+
schema.setAdditionalProperties(new BooleanUnionValueImpl(Boolean.FALSE));
41+
}
42+
}
43+
}

core/src/test/resources/OpenApi2JaxRsTest/_expected-simple-type/generated-api/pom.xml

100755100644
File mode changed.

core/src/test/resources/OpenApi2JaxRsTest/_expected-simple-type/generated-api/src/main/java/org/example/api/JaxRsApplication.java

100755100644
File mode changed.

core/src/test/resources/OpenApi2JaxRsTest/_expected-simple-type/generated-api/src/main/java/org/example/api/WidgetsResource.java

100755100644
File mode changed.

core/src/test/resources/OpenApi2JaxRsTest/_expected-simple-type/generated-api/src/main/java/org/example/api/beans/MyQuarkusBean.java

100755100644
File mode changed.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
2+
package org.example.api.beans;
3+
4+
import java.util.LinkedHashMap;
5+
import java.util.Map;
6+
import javax.annotation.processing.Generated;
7+
import com.fasterxml.jackson.annotation.JsonAnyGetter;
8+
import com.fasterxml.jackson.annotation.JsonAnySetter;
9+
import com.fasterxml.jackson.annotation.JsonIgnore;
10+
import com.fasterxml.jackson.annotation.JsonInclude;
11+
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
12+
13+
@JsonInclude(JsonInclude.Include.NON_NULL)
14+
@JsonPropertyOrder({
15+
16+
})
17+
@Generated("jsonschema2pojo")
18+
public class MySimpleAdditionalProperties {
19+
20+
@JsonIgnore
21+
private Map<String, Object> additionalProperties = new LinkedHashMap<String, Object>();
22+
23+
@JsonAnyGetter
24+
public Map<String, Object> getAdditionalProperties() {
25+
return this.additionalProperties;
26+
}
27+
28+
@JsonAnySetter
29+
public void setAdditionalProperty(String name, Object value) {
30+
this.additionalProperties.put(name, value);
31+
}
32+
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
2+
package org.example.api.beans;
3+
4+
import java.util.LinkedHashMap;
5+
import java.util.Map;
6+
import javax.annotation.processing.Generated;
7+
import com.fasterxml.jackson.annotation.JsonAnyGetter;
8+
import com.fasterxml.jackson.annotation.JsonAnySetter;
9+
import com.fasterxml.jackson.annotation.JsonIgnore;
10+
import com.fasterxml.jackson.annotation.JsonInclude;
11+
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
12+
13+
@JsonInclude(JsonInclude.Include.NON_NULL)
14+
@JsonPropertyOrder({
15+
16+
})
17+
@Generated("jsonschema2pojo")
18+
public class MyStructuredAdditionalProperties {
19+
20+
@JsonIgnore
21+
private Map<String, Object> additionalProperties = new LinkedHashMap<String, Object>();
22+
23+
@JsonAnyGetter
24+
public Map<String, Object> getAdditionalProperties() {
25+
return this.additionalProperties;
26+
}
27+
28+
@JsonAnySetter
29+
public void setAdditionalProperty(String name, Object value) {
30+
this.additionalProperties.put(name, value);
31+
}
32+
33+
}

core/src/test/resources/OpenApi2JaxRsTest/_expected-simple-type/generated-api/src/main/java/org/example/api/beans/SampleDataType.java

+27-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
"mydate",
2323
"mymap",
2424
"id",
25-
"mybytearray"
25+
"mybytearray",
26+
"mysimpleap",
27+
"mystructuredap"
2628
})
2729
@Generated("jsonschema2pojo")
2830
public class SampleDataType {
@@ -46,6 +48,10 @@ public class SampleDataType {
4648
private String id;
4749
@JsonProperty("mybytearray")
4850
private byte[] mybytearray;
51+
@JsonProperty("mysimpleap")
52+
private MySimpleAdditionalProperties mysimpleap;
53+
@JsonProperty("mystructuredap")
54+
private MyStructuredAdditionalProperties mystructuredap;
4955

5056
@JsonProperty("name")
5157
public String getName() {
@@ -123,4 +129,24 @@ public void setMybytearray(byte[] mybytearray) {
123129
this.mybytearray = mybytearray;
124130
}
125131

132+
@JsonProperty("mysimpleap")
133+
public MySimpleAdditionalProperties getMysimpleap() {
134+
return mysimpleap;
135+
}
136+
137+
@JsonProperty("mysimpleap")
138+
public void setMysimpleap(MySimpleAdditionalProperties mysimpleap) {
139+
this.mysimpleap = mysimpleap;
140+
}
141+
142+
@JsonProperty("mystructuredap")
143+
public MyStructuredAdditionalProperties getMystructuredap() {
144+
return mystructuredap;
145+
}
146+
147+
@JsonProperty("mystructuredap")
148+
public void setMystructuredap(MyStructuredAdditionalProperties mystructuredap) {
149+
this.mystructuredap = mystructuredap;
150+
}
151+
126152
}

core/src/test/resources/OpenApi2JaxRsTest/_expected-simple-type/generated-api/src/main/resources/META-INF/openapi.json

+16
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,16 @@
6262
},
6363
"x-codegen-annotations": ["io.quarkus.runtime.annotations.RegisterForReflection"]
6464
},
65+
"MySimpleAdditionalProperties": {
66+
"type": "object",
67+
"additionalProperties": true
68+
},
69+
"MyStructuredAdditionalProperties": {
70+
"type": "object",
71+
"additionalProperties": {
72+
"type" : "string"
73+
}
74+
},
6575
"SampleDataType": {
6676
"description": "",
6777
"type": "object",
@@ -90,6 +100,12 @@
90100
"mybytearray": {
91101
"type": "string",
92102
"format": "byte"
103+
},
104+
"mysimpleap": {
105+
"$ref": "#/components/schemas/MySimpleAdditionalProperties"
106+
},
107+
"mystructuredap": {
108+
"$ref": "#/components/schemas/MyStructuredAdditionalProperties"
93109
}
94110
}
95111
}

core/src/test/resources/OpenApi2JaxRsTest/simple-type.json

+16
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,16 @@
6262
},
6363
"x-codegen-annotations": ["io.quarkus.runtime.annotations.RegisterForReflection"]
6464
},
65+
"MySimpleAdditionalProperties": {
66+
"type": "object",
67+
"additionalProperties": true
68+
},
69+
"MyStructuredAdditionalProperties": {
70+
"type": "object",
71+
"additionalProperties": {
72+
"type" : "string"
73+
}
74+
},
6575
"SampleDataType": {
6676
"description": "",
6777
"type": "object",
@@ -90,6 +100,12 @@
90100
"mybytearray": {
91101
"type": "string",
92102
"format": "byte"
103+
},
104+
"mysimpleap": {
105+
"$ref": "#/components/schemas/MySimpleAdditionalProperties"
106+
},
107+
"mystructuredap": {
108+
"$ref": "#/components/schemas/MyStructuredAdditionalProperties"
93109
}
94110
}
95111
}

core/src/test/resources/OpenApi2QuarkusTest/_expected-strimzi-kafka-bridge/generated-api/src/main/java/org/example/api/beans/AssignedTopicPartitions.java

+17
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11

22
package org.example.api.beans;
33

4+
import java.util.LinkedHashMap;
5+
import java.util.Map;
46
import javax.annotation.processing.Generated;
7+
import com.fasterxml.jackson.annotation.JsonAnyGetter;
8+
import com.fasterxml.jackson.annotation.JsonAnySetter;
9+
import com.fasterxml.jackson.annotation.JsonIgnore;
510
import com.fasterxml.jackson.annotation.JsonInclude;
611
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
712

@@ -19,5 +24,17 @@
1924
@Generated("jsonschema2pojo")
2025
public class AssignedTopicPartitions {
2126

27+
@JsonIgnore
28+
private Map<String, Object> additionalProperties = new LinkedHashMap<String, Object>();
29+
30+
@JsonAnyGetter
31+
public Map<String, Object> getAdditionalProperties() {
32+
return this.additionalProperties;
33+
}
34+
35+
@JsonAnySetter
36+
public void setAdditionalProperty(String name, Object value) {
37+
this.additionalProperties.put(name, value);
38+
}
2239

2340
}

core/src/test/resources/OpenApi2QuarkusTest/_expected-strimzi-kafka-bridge/generated-api/src/main/java/org/example/api/beans/Configs.java

+17
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11

22
package org.example.api.beans;
33

4+
import java.util.LinkedHashMap;
5+
import java.util.Map;
46
import javax.annotation.processing.Generated;
7+
import com.fasterxml.jackson.annotation.JsonAnyGetter;
8+
import com.fasterxml.jackson.annotation.JsonAnySetter;
9+
import com.fasterxml.jackson.annotation.JsonIgnore;
510
import com.fasterxml.jackson.annotation.JsonInclude;
611
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
712

@@ -17,5 +22,17 @@
1722
@Generated("jsonschema2pojo")
1823
public class Configs {
1924

25+
@JsonIgnore
26+
private Map<String, Object> additionalProperties = new LinkedHashMap<String, Object>();
27+
28+
@JsonAnyGetter
29+
public Map<String, Object> getAdditionalProperties() {
30+
return this.additionalProperties;
31+
}
32+
33+
@JsonAnySetter
34+
public void setAdditionalProperty(String name, Object value) {
35+
this.additionalProperties.put(name, value);
36+
}
2037

2138
}

0 commit comments

Comments
 (0)