Skip to content

Commit 006ed69

Browse files
committed
select base or location package (#115)
1 parent 1cc3f05 commit 006ed69

File tree

11 files changed

+79
-89
lines changed

11 files changed

+79
-89
lines changed

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

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@
55

66
package io.openapiprocessor.core.converter
77

8-
import io.openapiprocessor.core.converter.mapping.AddParameterTypeMapping
9-
import io.openapiprocessor.core.converter.mapping.DropParameterTypeMapping
10-
import io.openapiprocessor.core.converter.mapping.TargetType
11-
import io.openapiprocessor.core.converter.mapping.UnknownDataTypeException
12-
import io.openapiprocessor.core.converter.mapping.UnknownParameterTypeException
8+
import io.openapiprocessor.core.converter.mapping.*
139
import io.openapiprocessor.core.converter.wrapper.MultiDataTypeWrapper
1410
import io.openapiprocessor.core.converter.wrapper.ResultDataTypeWrapper
1511
import io.openapiprocessor.core.converter.wrapper.SingleDataTypeWrapper
@@ -18,18 +14,19 @@ import io.openapiprocessor.core.model.*
1814
import io.openapiprocessor.core.model.datatypes.*
1915
import io.openapiprocessor.core.parser.*
2016
import io.openapiprocessor.core.parser.HttpMethod
17+
import io.openapiprocessor.core.parser.HttpStatus
2118
import io.openapiprocessor.core.parser.RequestBody
2219
import io.openapiprocessor.core.parser.Response
2320
import io.openapiprocessor.core.processor.mapping.v2.ResultStyle
2421
import io.openapiprocessor.core.support.capitalizeFirstChar
25-
import io.openapiprocessor.core.support.toPackageName
2622
import io.openapiprocessor.core.writer.Identifier
23+
import io.openapiprocessor.core.writer.java.OperationPackage
2724
import org.slf4j.Logger
2825
import org.slf4j.LoggerFactory
26+
import io.openapiprocessor.core.model.ContentType as ModelContentType
27+
import io.openapiprocessor.core.model.HttpStatus as ModelHttpStatus
2928
import io.openapiprocessor.core.model.RequestBody as ModelRequestBody
3029
import io.openapiprocessor.core.model.Response as ModelResponse
31-
import io.openapiprocessor.core.model.HttpStatus as ModelHttpStatus
32-
import io.openapiprocessor.core.model.ContentType as ModelContentType
3330
import io.openapiprocessor.core.model.parameters.Parameter as ModelParameter
3431

3532
const val MULTIPART = "multipart/"
@@ -131,11 +128,7 @@ class ApiConverter(
131128
}
132129

133130
private fun getPackageName(operation: Operation): String {
134-
if (options.packageNameFromPath) {
135-
return toPackageName(operation.getDocumentUri(), options.packageName)
136-
} else {
137-
return listOf(options.packageName, "api").joinToString(".")
138-
}
131+
return OperationPackage(options).getPackageName(operation)
139132
}
140133

141134
private fun createEndpoint(path: String, operation: Operation, dataTypes: DataTypes, resolver: RefResolver): Endpoint? {

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import io.openapiprocessor.core.model.DataTypes
1414
import io.openapiprocessor.core.model.Documentation
1515
import io.openapiprocessor.core.model.datatypes.*
1616
import io.openapiprocessor.core.support.capitalizeFirstChar
17-
import io.openapiprocessor.core.support.toPackageName
1817
import io.openapiprocessor.core.writer.Identifier
18+
import io.openapiprocessor.core.writer.java.SchemaPackage
1919
import java.util.*
2020

2121
/**
@@ -285,11 +285,7 @@ class DataTypeConverter(
285285
}
286286

287287
private fun getPackageName(schemaInfo: SchemaInfo): String {
288-
if (options.packageNameFromPath) {
289-
return toPackageName(schemaInfo.getDocumentUri(), options.packageName)
290-
} else {
291-
return listOf(options.packageName, "model").joinToString(".")
292-
}
288+
return SchemaPackage(options).getPackageName(schemaInfo)
293289
}
294290

295291
private fun createSimpleDataType(schemaInfo: SchemaInfo, dataTypes: DataTypes): DataType {

openapi-processor-core/src/main/kotlin/io/openapiprocessor/core/support/URI.kt

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -33,32 +33,3 @@ fun toURI(source: String): URI {
3333
.toAbsolutePath()
3434
.toUri()
3535
}
36-
37-
/**
38-
* converts a document URI to a corresponding package name within a given root package. If the document
39-
* URI does not contain the root package path the result is the root package.
40-
*
41-
* example:
42-
* (resource:/tests/packages/inputs/main/kotlin/io/openapiprocessor/foo/foo.yaml, io.openapiprocessor) =>
43-
* io.openapiprocessor.foo
44-
*
45-
* @param documentUri the URI of the document to be converted
46-
* @param rootPackage the root package name to serve as the base for the resulting package name
47-
* @return the package name derived from the document URI, based on the specified root package
48-
*
49-
*
50-
*/
51-
fun toPackageName(documentUri: URI, rootPackage: String): String {
52-
val parentPath = documentUri
53-
.resolve(".").path
54-
.replace("/", ".")
55-
.dropLast(1)
56-
57-
val rootIndex = parentPath.indexOf(rootPackage)
58-
if (rootIndex == -1) {
59-
return rootPackage
60-
}
61-
62-
val pkgName = parentPath.substring(rootIndex)
63-
return pkgName
64-
}

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

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,8 @@ open class DefaultWriterFactory(val options: ApiOptions): WriterFactory, InitWri
2929
private lateinit var resourcesPath: Path
3030

3131
override fun createWriter(packageName: String, className: String): Writer {
32-
if (options.packageNameFromPath && packagePaths[packageName] == null) {
33-
val pkg = packageName.substring(options.packageName.length + 1)
34-
val (name, path) = initTargetPackage(pkg)
32+
if (packagePaths[packageName] == null) {
33+
val (name, path) = initTargetPackage(packageName)
3534
packagePaths[name] = path
3635
}
3736

@@ -52,21 +51,21 @@ open class DefaultWriterFactory(val options: ApiOptions): WriterFactory, InitWri
5251
clearTargetDir()
5352
}
5453

55-
val (apiName, apiPath) = initTargetPackage("api")
54+
val (apiName, apiPath) = initTargetPackage(options.packageApi)
5655
packagePaths[apiName] = apiPath
5756
log.debug ("initialized target folder: {}", apiPath.toAbsolutePath ().toString ())
5857

5958
// should be dto or resources
60-
val (modelName, modelPath) = initTargetPackage("model")
59+
val (modelName, modelPath) = initTargetPackage(options.packageModel)
6160
packagePaths[modelName] = modelPath
6261
log.debug ("initialized target folder: {}", modelPath.toAbsolutePath ().toString ())
6362

64-
val (supportName, supportPath) = initTargetPackage("support")
63+
val (supportName, supportPath) = initTargetPackage(options.packageSupport)
6564
packagePaths[supportName] = supportPath
6665
log.debug ("initialized target folder: {}", supportPath.toAbsolutePath ().toString ())
6766

6867
if (options.beanValidation) {
69-
val (validationName, validationPath) = initTargetPackage("validation")
68+
val (validationName, validationPath) = initTargetPackage(options.packageValidation)
7069
packagePaths[validationName] = validationPath
7170
log.debug("initialized target folder: {}", validationPath.toAbsolutePath().toString())
7271
}
@@ -100,15 +99,11 @@ open class DefaultWriterFactory(val options: ApiOptions): WriterFactory, InitWri
10099
return target
101100
}
102101

103-
protected fun initTargetPackage(subPackageName: String): Pair<String, Path> {
104-
val rootPackageFolder = options.packageName.replace(".", "/")
105-
val subPackageFolder = subPackageName.replace(".", "/")
106-
107-
val targetPackage = options.packageName.plus(".$subPackageName")
108-
val packageFolder = listOf(rootPackageFolder, subPackageFolder).joinToString("/")
102+
protected fun initTargetPackage(packageName: String): Pair<String, Path> {
103+
val packageFolder = packageName.replace(".", "/")
109104
val packagePath = createTargetPackage(packageFolder)
110105

111-
return Pair(targetPackage, packagePath)
106+
return Pair(packageName, packagePath)
112107
}
113108

114109
private fun createTargetPackage(apiPkg: String): Path {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class ApiWriter(
5050
}
5151

5252
private fun writeGenerated () {
53-
val writer = getWriter("${options.packageName}.support", "Generated")
53+
val writer = getWriter("${options.packageOptions.base}.support", "Generated")
5454
writeGenerated(writer)
5555
writer.close()
5656
}
@@ -92,8 +92,8 @@ class ApiWriter(
9292
}
9393

9494
private fun writeAdditionalFiles() {
95-
additionalWriter.forEach {
96-
it(options, { format(it) }, writerFactory)
95+
additionalWriter.forEach { add ->
96+
add(options, { format(it) }, writerFactory)
9797
}
9898
}
9999

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright 2025 https://github.com/openapi-processor/openapi-processor-base
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.writer.java
7+
8+
import io.openapiprocessor.core.converter.ApiOptions
9+
import io.openapiprocessor.core.parser.Operation
10+
11+
private const val SUB_PACKAGE = "api"
12+
13+
class OperationPackage(private val options: ApiOptions) {
14+
private val pkg = PackageSelector(options.packageOptions)
15+
16+
fun getPackageName(operation: Operation): String {
17+
return if (options.packageNameFromLocation) {
18+
pkg.getPackageName(operation.getDocumentUri(), SUB_PACKAGE)
19+
} else {
20+
pkg.getPackageName(SUB_PACKAGE)
21+
}
22+
}
23+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright 2025 https://github.com/openapi-processor/openapi-processor-base
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.writer.java
7+
8+
import io.openapiprocessor.core.converter.ApiOptions
9+
import io.openapiprocessor.core.converter.SchemaInfo
10+
11+
private const val SUB_PACKAGE = "model"
12+
13+
class SchemaPackage(private val options: ApiOptions) {
14+
private val pkg = PackageSelector(options.packageOptions)
15+
16+
fun getPackageName(schemaInfo: SchemaInfo): String {
17+
return if (options.packageNameFromLocation) {
18+
pkg.getPackageName(schemaInfo.getDocumentUri(), SUB_PACKAGE)
19+
} else {
20+
pkg.getPackageName(SUB_PACKAGE)
21+
}
22+
}
23+
}

openapi-processor-core/src/test/groovy/io/openapiprocessor/core/converter/ApiConverterGSpec.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,9 @@ paths:
162162
description: no content
163163
""")
164164

165-
def options = new ApiOptions(
166-
packageName: 'a.package.name'
167-
)
165+
def options = new ApiOptions()
166+
options.packageName = 'a.package.name'
167+
options.packageOptions.base = options.packageName
168168

169169
when:
170170
api = apiConverter (options, Stub(Framework))

openapi-processor-core/src/test/groovy/io/openapiprocessor/core/converter/DataTypeConverterLoopSpec.groovy

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,11 @@ components:
4848
\$ref: '#/components/schemas/Self'
4949
""")
5050

51+
def options = new ApiOptions()
52+
options.packageOptions.base = options.packageName
53+
5154
when:
52-
def api = apiConverter (Stub (Framework))
55+
def api = apiConverter (options, Stub (Framework))
5356
.convert (openApi)
5457

5558
then:

openapi-processor-core/src/test/groovy/io/openapiprocessor/core/converter/DataTypeConverterSpec.groovy

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,9 @@ paths:
230230
type: string
231231
""")
232232
when:
233-
def options = new ApiOptions(packageName: 'pkg')
233+
def options = new ApiOptions()
234+
options.packageName = 'pkg'
235+
options.packageOptions.base = options.packageName
234236
235237
Api api = apiConverter (options, Stub (Framework))
236238
.convert (openApi)
@@ -280,7 +282,9 @@ components:
280282
type: string
281283
""")
282284
when:
283-
def options = new ApiOptions(packageName: 'pkg')
285+
def options = new ApiOptions()
286+
options.packageName = 'pkg'
287+
options.packageOptions.base = options.packageName
284288
285289
Api api = apiConverter (options, Stub (Framework))
286290
.convert (openApi)

0 commit comments

Comments
 (0)