Skip to content

Commit 98ddca4

Browse files
committed
write base path resource (#176)
1 parent 0b35d63 commit 98ddca4

File tree

5 files changed

+70
-2
lines changed

5 files changed

+70
-2
lines changed

openapi-processor-core/src/main/kotlin/io/openapiprocessor/core/converter/ApiConverter.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class ApiConverter(
5353
fun convert(api: OpenApi): Api {
5454
val target = Api()
5555
createInterfaces(api, target)
56+
createResources(api, target)
5657
return target
5758
}
5859

@@ -76,6 +77,19 @@ class ApiConverter(
7677
target.setInterfaces(interfaces.values.map { it })
7778
}
7879

80+
private fun createResources(api: OpenApi, target: Api) {
81+
val resources = mutableListOf<Resource>()
82+
83+
val serverPath = getServerPath(api)
84+
if (serverPath != null) {
85+
resources.add(Resource(options.basePathOptions.propertiesName, """
86+
openapi.base.path = $serverPath
87+
""".trimIndent()))
88+
}
89+
90+
target.setResources(resources)
91+
}
92+
7993
private fun getServerPath(api: OpenApi): String? {
8094
if (!options.basePathOptions.enabled) {
8195
return null

openapi-processor-core/src/main/kotlin/io/openapiprocessor/core/model/Api.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ import java.util.function.Consumer
1616
class Api(
1717
private var interfaces: List<Interface> = emptyList(),
1818

19+
/**
20+
* resources
21+
*/
22+
private var resources: List<Resource> = emptyList(),
23+
1924
/**
2025
* named data types (i.e. $ref) used in the OpenAPI description.
2126
*/
@@ -33,6 +38,10 @@ class Api(
3338
interfaces = ifs
3439
}
3540

41+
fun setResources(resources: List<Resource>) {
42+
this.resources = resources
43+
}
44+
3645
fun getDataTypes(): DataTypes {
3746
return dataTypes
3847
}
@@ -52,4 +61,8 @@ class Api(
5261
fun forEachEnumDataType(action: Consumer<StringEnumDataType>) {
5362
dataTypes.getEnumDataTypes().forEach(action)
5463
}
64+
65+
fun forEachResource(action: Consumer<Resource>) {
66+
resources.forEach(action)
67+
}
5568
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*
2+
* Copyright 2024 https://github.com/openapi-processor/openapi-processor-base
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.model
7+
8+
class Resource(val name: String, val content: String) {
9+
}

openapi-processor-core/src/main/kotlin/io/openapiprocessor/core/writer/java/ApiWriter.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class ApiWriter(
4545
writeObjectDataTypes(api)
4646
writeInterfaceDataTypes(api)
4747
writeEnumDataTypes(api)
48+
writeResourceFiles(api)
4849
writeAdditionalFiles()
4950
}
5051

@@ -96,6 +97,18 @@ class ApiWriter(
9697
}
9798
}
9899

100+
private fun writeResourceFiles(api: Api) {
101+
if (!options.targetDirOptions.standardLayout) {
102+
return
103+
}
104+
105+
api.forEachResource {
106+
val writer = getResourceWriter(it.name)
107+
writer.write(it.content)
108+
writer.close()
109+
}
110+
}
111+
99112
private fun writeInterface(writer: Writer, itf: Interface) {
100113
val raw = StringWriter()
101114
interfaceWriter.write(raw, itf)
@@ -130,6 +143,10 @@ class ApiWriter(
130143
return writerFactory.createWriter(packageName, className)
131144
}
132145

146+
private fun getResourceWriter(resourceName: String): Writer {
147+
return writerFactory.createResourceWriter(resourceName)
148+
}
149+
133150
private fun format(raw: String): String {
134151
if (!options.formatCode) {
135152
return raw

openapi-processor-core/src/test/kotlin/io/openapiprocessor/core/writer/java/ApiWriterSpec.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@ package io.openapiprocessor.core.writer.java
77

88
import io.kotest.core.spec.IsolationMode
99
import io.kotest.core.spec.style.StringSpec
10+
import io.kotest.matchers.equals.shouldBeEqual
1011
import io.mockk.every
1112
import io.mockk.mockk
1213
import io.mockk.verify
1314
import io.openapiprocessor.core.builder.api.`interface`
1415
import io.openapiprocessor.core.converter.ApiOptions
16+
import io.openapiprocessor.core.converter.options.TargetDirLayout
1517
import io.openapiprocessor.core.model.Api
1618
import io.openapiprocessor.core.model.DataTypes
19+
import io.openapiprocessor.core.model.Resource
1720
import io.openapiprocessor.core.model.datatypes.*
1821
import io.openapiprocessor.core.tempFolder
1922
import io.openapiprocessor.core.writer.SourceFormatter
@@ -60,8 +63,8 @@ class ApiWriterSpec: StringSpec({
6063
options.targetDir = listOf(target.toString(), "java", "src").joinToString(File.separator)
6164
options.formatCode = true
6265

63-
every { factoryStub.createWriter(any(), any()) }
64-
.answers { writer }
66+
every { factoryStub.createWriter(any(), any()) }.answers { writer }
67+
every { factoryStub.createResourceWriter(any()) }.answers { writer }
6568
}
6669

6770
"writes model enum data type sources" {
@@ -241,6 +244,18 @@ class ApiWriterSpec: StringSpec({
241244
verify(exactly = 1) { additionalWriterA.invoke(any(), any(), any()) }
242245
verify(exactly = 1) { additionalWriterB.invoke(any(), any(), any()) }
243246
}
247+
248+
"writes resources" {
249+
options.targetDirOptions.layout = TargetDirLayout.STANDARD
250+
251+
val resource = Resource("api.properties", "anything")
252+
val api = Api(resources = listOf(resource))
253+
254+
createApiWriter().write(api)
255+
256+
verify (exactly = 1) { factoryStub.createResourceWriter(resource.name) }
257+
writer.toString() shouldBeEqual resource.content
258+
}
244259
})
245260

246261
private fun ApiOptions.getSourceDir(pkg: String): Path {

0 commit comments

Comments
 (0)