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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 0 deletions
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(),
Lines changed: 43 additions & 0 deletions
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

Lines changed: 27 additions & 1 deletion
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
}

0 commit comments

Comments
 (0)