Skip to content
This repository was archived by the owner on Mar 16, 2025. It is now read-only.

Commit b3ffe87

Browse files
authored
Merge pull request #25 from openapi-processor/mapping-to-primitive
Mapping to primitive, resolves #22
2 parents 8be1972 + 48d7716 commit b3ffe87

File tree

11 files changed

+129
-13
lines changed

11 files changed

+129
-13
lines changed

src/main/kotlin/io/openapiprocessor/core/converter/mapping/MappingFinder.kt

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -284,13 +284,21 @@ class IoMatcher(schema: MappingSchema): BaseVisitor(schema) {
284284
class TypeMatcher(schema: MappingSchema): BaseVisitor(schema) {
285285

286286
override fun match(mapping: TypeMapping): Boolean {
287-
return if(schema.isPrimitive()) {
288-
mapping.sourceTypeName == schema.getType()
289-
&& mapping.sourceTypeFormat == schema.getFormat()
290-
} else if(schema.isArray()) {
291-
mapping.sourceTypeName == "array"
292-
} else {
293-
mapping.sourceTypeName == schema.getName()
287+
if (mapping.sourceTypeName == schema.getName()) {
288+
return true
289+
}
290+
291+
return when {
292+
schema.isPrimitive() -> {
293+
mapping.sourceTypeName == schema.getType()
294+
&& mapping.sourceTypeFormat == schema.getFormat()
295+
}
296+
schema.isArray() -> {
297+
mapping.sourceTypeName == "array"
298+
}
299+
else -> {
300+
false
301+
}
294302
}
295303
}
296304

src/main/kotlin/io/openapiprocessor/core/parser/swagger/OpenApi.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class OpenApi(private val result: SwaggerParseResult): ParserOpenApi {
4242
return paths
4343
}
4444

45-
override fun getRefResolver(): ParserRefResolver = RefResolver (result.openAPI.components)
45+
override fun getRefResolver(): ParserRefResolver = RefResolver (result.openAPI)
4646

4747
override fun printWarnings() {
4848
print (result.messages)

src/main/kotlin/io/openapiprocessor/core/parser/swagger/RefResolver.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@ package io.openapiprocessor.core.parser.swagger
1818

1919
import io.openapiprocessor.core.parser.RefResolver as ParserRefResolver
2020
import io.openapiprocessor.core.parser.Schema as ParserSchema
21-
import io.swagger.v3.oas.models.Components as SwaggerComponents
2221
import io.swagger.v3.oas.models.media.Schema as SwaggerSchema
22+
import io.swagger.v3.oas.models.OpenAPI
2323

2424
/**
2525
* Swagger $ref resolver.
2626
*
2727
* @author Martin Hauner
2828
*/
29-
class RefResolver(private val components: SwaggerComponents?): ParserRefResolver {
29+
class RefResolver(private val openapi: OpenAPI): ParserRefResolver {
3030

3131
override fun resolve(ref: ParserSchema): ParserSchema {
3232
val refName = getRefName(ref.getRef()!!)
3333

34-
val schema: SwaggerSchema<*>? = components?.schemas?.get(refName)
34+
val schema: SwaggerSchema<*>? = openapi.components?.schemas?.get(refName)
3535
if (schema == null) {
3636
throw Exception("failed to resolve ${ref.getRef()}")
3737
}

src/test/groovy/com/github/hauner/openapi/core/converter/DataTypeConverterPrimitiveTypeMappingSpec.groovy

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import io.openapiprocessor.core.converter.mapping.TypeMapping
2525
import io.openapiprocessor.core.framework.Framework
2626
import io.openapiprocessor.core.framework.FrameworkBase
2727
import io.openapiprocessor.core.model.Api
28+
import io.openapiprocessor.core.parser.ParserType
2829
import spock.lang.Specification
2930
import spock.lang.Unroll
3031

@@ -75,6 +76,54 @@ paths:
7576
parameter.dataType.name == 'ZonedDateTime'
7677
}
7778

79+
void "converts named primitive type to java type via global type mapping" () {
80+
def openApi = parse ("""\
81+
openapi: 3.0.2
82+
info:
83+
title: API
84+
version: 1.0.0
85+
86+
paths:
87+
/uuid:
88+
get:
89+
parameters:
90+
- in: query
91+
name: uuid
92+
schema:
93+
\$ref: '#/components/schemas/UUID'
94+
responses:
95+
'204':
96+
description: none
97+
98+
components:
99+
schemas:
100+
UUID:
101+
type: string
102+
""", parser)
103+
104+
when:
105+
def options = new ApiOptions(
106+
packageName: 'pkg',
107+
typeMappings: [
108+
new TypeMapping (
109+
'UUID',
110+
'java.util.UUID')
111+
])
112+
113+
Api api = new ApiConverter (options, new FrameworkBase ())
114+
.convert (openApi)
115+
116+
then:
117+
def itf = api.interfaces.first ()
118+
def ep = itf.endpoints.first ()
119+
def parameter = ep.parameters.first ()
120+
parameter.dataType.packageName == 'java.util'
121+
parameter.dataType.name == 'UUID'
122+
123+
where:
124+
parser << [ParserType.SWAGGER, ParserType.OPENAPI4J]
125+
}
126+
78127
void "throws when there are multiple global mappings for a simple type" () {
79128
def openApi = parse ("""\
80129
openapi: 3.0.2

src/testInt/groovy/com/github/hauner/openapi/processor/core/ProcessorPendingTest.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ class ProcessorPendingTest extends ProcessorTestBase {
3232
@Parameterized.Parameters(name = "{0}")
3333
static Collection<TestSet> sources () {
3434
return [
35-
new TestSet(name: 'ref-parameter', processor: new TestProcessor(), parser: ParserType.OPENAPI4J),
36-
new TestSet(name: 'ref-parameter', processor: new TestProcessor(), parser: ParserType.SWAGGER)
35+
new TestSet(name: 'ref-parameter-with-primitive-mapping', processor: new TestProcessor(), parser: ParserType.SWAGGER),
36+
new TestSet(name: 'ref-parameter-with-primitive-mapping', processor: new TestProcessor(), parser: ParserType.OPENAPI4J)
3737
]
3838
}
3939

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
items:
2+
- generated/api/Api.java
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* This class is auto generated by https://github.com/hauner/openapi-processor-core.
3+
* TEST ONLY.
4+
*/
5+
6+
package generated.api;
7+
8+
import annotation.Mapping;
9+
import annotation.Parameter;
10+
import java.util.UUID;
11+
12+
public interface Api {
13+
14+
@Mapping("/uuid")
15+
void getUuid(@Parameter UUID uuid, @Parameter UUID uuidex);
16+
17+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
items:
2+
- inputs/openapi.yaml
3+
- inputs/primitive.yaml
4+
- inputs/mapping.yaml
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
openapi-processor-spring: v2
2+
3+
options:
4+
package-name: generated
5+
6+
map:
7+
types:
8+
- type: UUID => java.util.UUID
9+
- type: UUID_EX => java.util.UUID
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
openapi: 3.0.2
2+
info:
3+
title: API
4+
version: 1.0.0
5+
6+
paths:
7+
/uuid:
8+
get:
9+
parameters:
10+
- in: query
11+
name: uuid
12+
schema:
13+
$ref: '#/components/schemas/UUID'
14+
- in: query
15+
name: uuidex
16+
schema:
17+
$ref: 'primitive.yaml#/UUID_EX'
18+
responses:
19+
'204':
20+
description: none
21+
22+
components:
23+
schemas:
24+
UUID:
25+
type: string

0 commit comments

Comments
 (0)