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

Commit 698c436

Browse files
committed
provide option parsing for processors (extracted from spring processor)
1 parent 29075b8 commit 698c436

File tree

3 files changed

+194
-34
lines changed

3 files changed

+194
-34
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*
2+
* Copyright 2021 https://github.com/openapi-processor/openapi-processor-core
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.converter
7+
8+
import io.openapiprocessor.core.processor.MappingConverter
9+
import io.openapiprocessor.core.processor.MappingReader
10+
import io.openapiprocessor.core.processor.mapping.MappingVersion
11+
import io.openapiprocessor.core.processor.mapping.v1.Mapping as MappingV1
12+
import io.openapiprocessor.core.processor.mapping.v2.Mapping as MappingV2
13+
import org.slf4j.Logger
14+
import org.slf4j.LoggerFactory
15+
16+
/**
17+
* creates [ApiOptions] from processor options and mapping.yaml.
18+
*/
19+
class OptionsConverter(private val checkObsoleteProcessorOptions: Boolean = false) {
20+
var log: Logger = LoggerFactory.getLogger(this.javaClass.name)
21+
22+
fun convertOptions(processorOptions: Map<String, Any>): ApiOptions {
23+
val options = ApiOptions()
24+
25+
checkDeprecatedMapOptions(processorOptions, options)
26+
27+
if (processorOptions.containsKey("targetDir")) {
28+
options.targetDir = processorOptions["targetDir"].toString()
29+
} else {
30+
log.warn("required option 'targetDir' is missing!")
31+
}
32+
33+
if (processorOptions.containsKey("mapping")) {
34+
readMapping(processorOptions["mapping"].toString(), options)
35+
} else {
36+
log.warn("required option 'mapping' is missing!")
37+
}
38+
39+
return options
40+
}
41+
42+
private fun readMapping(mappingSource: String, options: ApiOptions) {
43+
val mapping: MappingVersion? = MappingReader().read(mappingSource)
44+
if (mapping == null) {
45+
log.warn("missing 'mapping.yaml' configuration!")
46+
return
47+
}
48+
49+
when (mapping) {
50+
is MappingV1 -> {
51+
options.packageName = mapping.options.packageName
52+
options.beanValidation = mapping.options.beanValidation
53+
}
54+
is MappingV2 -> {
55+
options.packageName = mapping.options.packageName
56+
options.beanValidation = mapping.options.beanValidation
57+
options.javadoc = mapping.options.javadoc
58+
}
59+
}
60+
61+
if (options.packageName.contains("io.openapiprocessor.")) {
62+
log.warn("is 'options.package-name' set in mapping? found: '{}'.", options.packageName)
63+
}
64+
65+
options.typeMappings = MappingConverter().convert(mapping)
66+
}
67+
68+
private fun checkDeprecatedMapOptions(processorOptions: Map<String, *>, options: ApiOptions) {
69+
if (!checkObsoleteProcessorOptions)
70+
return
71+
72+
if (processorOptions.containsKey("packageName")) {
73+
options.packageName = processorOptions["packageName"].toString()
74+
log.warn("'options.package-name' should be set in the mapping yaml!")
75+
}
76+
77+
if (processorOptions.containsKey("beanValidation")) {
78+
options.beanValidation = processorOptions["beanValidation"] as Boolean
79+
log.warn("options.bean-validation' should be set in the mapping yaml!")
80+
}
81+
82+
if (processorOptions.containsKey("typeMappings")) {
83+
readMapping(processorOptions["typeMappings"].toString(), options)
84+
log.warn("'typeMappings' option is deprecated, please use 'mapping'!")
85+
}
86+
}
87+
88+
}
89+
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/*
2+
* Copyright © 2021 https://github.com/openapi-processor/openapi-processor-core
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.converter
7+
8+
import io.kotest.core.spec.style.StringSpec
9+
import io.kotest.matchers.collections.shouldHaveSize
10+
import io.kotest.matchers.shouldBe
11+
import io.openapiprocessor.core.support.Empty
12+
13+
class OptionsConverterSpec: StringSpec({
14+
15+
"produces default options if input options are empty" {
16+
val converter = OptionsConverter()
17+
18+
val options = converter.convertOptions(emptyMap<String, Any>())
19+
20+
options.targetDir shouldBe null
21+
options.packageName shouldBe "io.openapiprocessor.generated"
22+
options.beanValidation shouldBe false
23+
options.javadoc shouldBe false
24+
options.modelNameSuffix shouldBe String.Empty
25+
options.typeMappings shouldHaveSize 0
26+
}
27+
28+
"should set target dir" {
29+
val converter = OptionsConverter()
30+
31+
val options = converter.convertOptions(mapOf(
32+
"targetDir" to "generated target dir"
33+
))
34+
35+
options.targetDir shouldBe "generated target dir"
36+
}
37+
38+
"should accept deprecated packageName map option" {
39+
val converter = OptionsConverter(true)
40+
41+
val options = converter.convertOptions(mapOf(
42+
"packageName" to "obsolete"
43+
))
44+
45+
options.packageName shouldBe "obsolete"
46+
}
47+
48+
"should accept deprecated beanValidation map option" {
49+
val converter = OptionsConverter(true)
50+
51+
val options = converter.convertOptions(mapOf(
52+
"beanValidation" to true
53+
))
54+
55+
options.beanValidation shouldBe true
56+
}
57+
58+
"should accept deprecated typeMappings map option" {
59+
val converter = OptionsConverter(true)
60+
61+
val options = converter.convertOptions(mapOf(
62+
"typeMappings" to """
63+
openapi-processor-mapping: v2
64+
options:
65+
package-name: generated
66+
""".trimIndent()
67+
))
68+
69+
options.packageName shouldBe "generated"
70+
}
71+
72+
"should read Mapping options V1" {
73+
val converter = OptionsConverter()
74+
val options = converter.convertOptions(mapOf(
75+
"mapping" to """
76+
options:
77+
package-name: generated
78+
bean-validation: true
79+
""".trimIndent()
80+
))
81+
82+
options.packageName shouldBe "generated"
83+
options.beanValidation shouldBe true
84+
}
85+
86+
"should read Mapping options V2" {
87+
val converter = OptionsConverter()
88+
val options = converter.convertOptions(mapOf(
89+
"mapping" to """
90+
openapi-processor-mapping: v2
91+
options:
92+
package-name: generated
93+
bean-validation: true
94+
javadoc: true
95+
""".trimIndent()
96+
))
97+
98+
options.packageName shouldBe "generated"
99+
options.beanValidation shouldBe true
100+
options.javadoc shouldBe true
101+
}
102+
103+
})

src/testInt/groovy/com/github/hauner/openapi/processor/core/processor/test/TestProcessor.groovy

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@ package com.github.hauner.openapi.processor.core.processor.test
77

88
import io.openapiprocessor.core.converter.ApiConverter
99
import io.openapiprocessor.core.converter.ApiOptions
10+
import io.openapiprocessor.core.converter.OptionsConverter
1011
import io.openapiprocessor.core.framework.FrameworkBase
1112
import io.openapiprocessor.core.parser.OpenApi
1213
import io.openapiprocessor.core.parser.Parser
13-
import io.openapiprocessor.core.processor.MappingConverter
14-
import io.openapiprocessor.core.processor.MappingReader
1514
import io.openapiprocessor.core.writer.java.ApiWriter
1615
import io.openapiprocessor.core.writer.java.BeanValidationFactory
1716
import io.openapiprocessor.core.writer.java.DataTypeWriter
@@ -85,39 +84,8 @@ class TestProcessor implements OpenApiProcessor {
8584
}
8685

8786
private static ApiOptions convertOptions (Map<String, ?> processorOptions) {
88-
def reader = new MappingReader ()
89-
def converter = new MappingConverter ()
90-
def mapping
91-
92-
if (processorOptions.containsKey ('mapping')) {
93-
mapping = reader.read (processorOptions.mapping as String)
94-
95-
} else {
96-
log.error ("error: missing 'mapping' configuration!")
97-
}
98-
99-
def options = new ApiOptions ()
100-
options.targetDir = processorOptions.targetDir
87+
def options = new OptionsConverter().convertOptions (processorOptions)
10188
options.validate ()
102-
103-
if (mapping) {
104-
if (mapping?.options?.packageName != null) {
105-
options.packageName = mapping.options.packageName
106-
} else {
107-
log.warn ("no 'options:package-name' set in mapping!")
108-
}
109-
110-
if (mapping?.options?.beanValidation != null) {
111-
options.beanValidation = mapping.options.beanValidation
112-
}
113-
114-
if (mapping?.options?.javadoc != null) {
115-
options.javadoc = mapping.options.javadoc
116-
}
117-
118-
options.typeMappings = converter.convert (mapping)
119-
}
120-
12189
options
12290
}
12391

0 commit comments

Comments
 (0)