Skip to content

Commit 0a64c5a

Browse files
committed
GH-197 Handle default title/version through openapi.info.title/version ap parameters (Resolve #197)
1 parent 213512f commit 0a64c5a

File tree

7 files changed

+44
-5
lines changed

7 files changed

+44
-5
lines changed

examples/javalin-gradle-kotlin/build.gradle.kts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import org.jetbrains.kotlin.gradle.tasks.Kapt
12
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
23

34
plugins {
@@ -48,6 +49,13 @@ dependencies {
4849
implementation("org.mongodb:bson:4.9.1")
4950
}
5051

52+
kapt {
53+
arguments {
54+
arg("openapi.info.title", "Awesome App")
55+
arg("openapi.info.version", "1.0.0")
56+
}
57+
}
58+
5159
repositories {
5260
mavenCentral()
5361
}

examples/javalin-gradle-kotlin/src/main/java/io/javalin/openapi/plugin/test/JavalinTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,10 @@ public static void main(String[] args) {
9292
openApiLicense.setName("Apache 2.0");
9393
openApiLicense.setIdentifier("Apache-2.0");
9494

95-
openApiInfo.setTitle("Awesome App");
9695
openApiInfo.setDescription("App description goes right here");
9796
openApiInfo.setTermsOfService("https://example.com/tos");
9897
openApiInfo.setContact(openApiContact);
9998
openApiInfo.setLicense(openApiLicense);
100-
openApiInfo.setVersion("1.0.0");
10199
})
102100
.withServer((openApiServer) -> {
103101
openApiServer.setUrl(("http://localhost:{port}{basePath}/" + version + "/"));

javalin-plugins/javalin-openapi-plugin/src/main/kotlin/io/javalin/openapi/plugin/OpenApiPlugin.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ open class OpenApiPlugin @JvmOverloads constructor(private val configuration: Op
4646
val docsNode = jsonMapper.readTree(content) as ObjectNode
4747

4848
//process OpenAPI "info"
49-
docsNode.replace("info", jsonMapper.convertValue(info, JsonNode::class.java))
49+
val currentInfo = jsonMapper.readerForUpdating(docsNode.get("info"))
50+
docsNode.replace("info", currentInfo.readValue(jsonMapper.convertValue(info, JsonNode::class.java)))
5051

5152
// process OpenAPI "servers"
5253
docsNode.replace("servers", jsonMapper.convertValue(servers, JsonNode::class.java))

openapi-annotation-processor/src/main/kotlin/io/javalin/openapi/processor/OpenApiAnnotationProcessor.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ import io.javalin.openapi.experimental.ExperimentalCompileOpenApiConfiguration
55
import io.javalin.openapi.JsonSchema
66
import io.javalin.openapi.OpenApi
77
import io.javalin.openapi.experimental.AnnotationProcessorContext
8+
import io.javalin.openapi.experimental.OPENAPI_INFO_TITLE
9+
import io.javalin.openapi.experimental.OPENAPI_INFO_VERSION
810
import io.javalin.openapi.experimental.OpenApiAnnotationProcessorConfiguration
11+
import io.javalin.openapi.experimental.OpenApiAnnotationProcessorParameters
12+
import io.javalin.openapi.experimental.OpenApiAnnotationProcessorParameters.Info
913
import io.javalin.openapi.processor.configuration.OpenApiPrecompileScriptingEngine
1014
import io.javalin.openapi.processor.generators.JsonSchemaGenerator
1115
import io.javalin.openapi.processor.generators.OpenApiGenerator
@@ -24,6 +28,12 @@ open class OpenApiAnnotationProcessor : AbstractProcessor() {
2428

2529
override fun init(processingEnv: ProcessingEnvironment) {
2630
context = AnnotationProcessorContext(
31+
parameters = OpenApiAnnotationProcessorParameters(
32+
info = Info(
33+
title = processingEnv.options[OPENAPI_INFO_TITLE] ?: "",
34+
version = processingEnv.options[OPENAPI_INFO_VERSION] ?: ""
35+
)
36+
),
2737
configuration = OpenApiAnnotationProcessorConfiguration(),
2838
env = processingEnv,
2939
trees = AnnotationProcessorTools.createTrees(processingEnv)
@@ -54,6 +64,12 @@ open class OpenApiAnnotationProcessor : AbstractProcessor() {
5464
return true
5565
}
5666

67+
override fun getSupportedOptions(): Set<String> =
68+
setOf(
69+
OPENAPI_INFO_TITLE,
70+
OPENAPI_INFO_VERSION,
71+
)
72+
5773
override fun getSupportedAnnotationTypes(): Set<String> =
5874
setOf(
5975
OpenApi::class.qualifiedName!!,

openapi-annotation-processor/src/main/kotlin/io/javalin/openapi/processor/generators/OpenApiGenerator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ internal class OpenApiGenerator {
102102

103103
// fill info
104104
val info = JsonObject()
105-
info.addProperty("title", "")
106-
info.addProperty("version", "")
105+
info.addProperty("title", context.parameters.info.title)
106+
info.addProperty("version", context.parameters.info.version)
107107
openApi.add("info", info)
108108

109109
// fill paths

openapi-specification/src/main/kotlin/io/javalin/openapi/experimental/AnnotationProcessorContext.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import javax.lang.model.util.Types
1717
import kotlin.reflect.KClass
1818

1919
class AnnotationProcessorContext(
20+
val parameters: OpenApiAnnotationProcessorParameters,
2021
val configuration: OpenApiAnnotationProcessorConfiguration,
2122
val env: ProcessingEnvironment,
2223
val trees: Trees?,
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.javalin.openapi.experimental
2+
3+
const val OPENAPI_INFO_TITLE = "openapi.info.title"
4+
const val OPENAPI_INFO_VERSION = "openapi.info.version"
5+
6+
data class OpenApiAnnotationProcessorParameters(
7+
val info: Info
8+
) {
9+
10+
data class Info(
11+
val title: String,
12+
val version: String,
13+
)
14+
15+
}

0 commit comments

Comments
 (0)