Skip to content

Commit a6185da

Browse files
committed
1 parent 73386f7 commit a6185da

File tree

4 files changed

+58
-25
lines changed

4 files changed

+58
-25
lines changed

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

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

66
package io.openapiprocessor.core.writer
77

8+
import io.openapiprocessor.core.converter.ApiOptions
89
import io.openapiprocessor.core.support.toURI
910
import io.openapiprocessor.core.writer.java.PathWriter
1011
import org.slf4j.Logger
@@ -21,11 +22,9 @@ import kotlin.io.path.deleteRecursively
2122
/**
2223
* Writer factory for local file system. Must be initialized via [InitWriterTarget].
2324
*/
24-
class DefaultWriterFactory: WriterFactory, InitWriterTarget {
25+
class DefaultWriterFactory(val options: ApiOptions) : WriterFactory, InitWriterTarget {
2526
private var log: Logger = LoggerFactory.getLogger(this.javaClass.name)
2627

27-
private lateinit var targetDir: String
28-
private lateinit var packageName: String
2928
private lateinit var paths: Map<String, Path>
3029

3130
override fun createWriter(packageName: String, className: String): Writer {
@@ -36,9 +35,7 @@ class DefaultWriterFactory: WriterFactory, InitWriterTarget {
3635
return BufferedWriter(PathWriter(packagePath.resolve("${className}.java")))
3736
}
3837

39-
override fun init(targetDir: String, packageName: String) {
40-
this.targetDir = targetDir
41-
this.packageName = packageName
38+
override fun init() {
4239
val pkgPaths = HashMap<String, Path>()
4340

4441
log.debug ("initializing target folders")
@@ -56,30 +53,36 @@ class DefaultWriterFactory: WriterFactory, InitWriterTarget {
5653
pkgPaths[supportName] = supportPath
5754
log.debug ("initialized target folder: {}", supportPath.toAbsolutePath ().toString ())
5855

56+
if (options.beanValidation) {
57+
val (validationName, validationPath) = initTargetPackage("validation")
58+
pkgPaths[validationName] = validationPath
59+
log.debug("initialized target folder: {}", validationPath.toAbsolutePath().toString())
60+
}
61+
5962
paths = pkgPaths
6063
}
6164

6265
@OptIn(ExperimentalPathApi::class)
6366
private fun clearTargetDir() {
6467
try {
65-
Path.of(toURI(targetDir)).deleteRecursively()
68+
Path.of(toURI(options.targetDir!!)).deleteRecursively()
6669
} catch (ex: IOException) {
67-
log.error("failed to clean target directory: {}", targetDir, ex)
70+
log.error("failed to clean target directory: {}", options.targetDir, ex)
6871
}
6972
}
7073

7174
private fun initTargetPackage(subPackageName: String): Pair<String, Path> {
72-
val rootPackageFolder = packageName.replace(".", "/")
75+
val rootPackageFolder = options.packageName.replace(".", "/")
7376

74-
val apiPackage = packageName.plus(".$subPackageName")
77+
val apiPackage = options.packageName.plus(".$subPackageName")
7578
val apiFolder = listOf(rootPackageFolder, subPackageName).joinToString("/")
7679
val apiPath = createTargetPackage(apiFolder)
7780

7881
return Pair(apiPackage, apiPath)
7982
}
8083

8184
private fun createTargetPackage(apiPkg: String): Path {
82-
val pkg = listOf(targetDir, apiPkg).joinToString("/")
85+
val pkg = listOf(options.targetDir, apiPkg).joinToString("/")
8386

8487
val target = Paths.get (toURI(pkg))
8588
Files.createDirectories(target)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
package io.openapiprocessor.core.writer
77

88
fun interface InitWriterTarget {
9-
fun init(targetDir: String, packageName: String)
9+
fun init()
1010
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ class ApiWriter(
2929
private val enumWriter: StringEnumWriter,
3030
private val interfaceDataTypeWriter: InterfaceDataTypeWriter,
3131
private val formatter: SourceFormatter = GoogleFormatter(),
32-
private val writerFactory: WriterFactory = DefaultWriterFactory()
32+
private val writerFactory: WriterFactory = DefaultWriterFactory(options)
3333
) {
3434
init {
3535
if (writerFactory is InitWriterTarget) {
36-
writerFactory.init(options.targetDir!!, options.packageName)
36+
writerFactory.init()
3737
}
3838
}
3939

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

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,56 @@ class DefaultWriterFactorySpec : StringSpec({
2727
beforeTest {
2828
options.packageName = "io.openapiprocessor"
2929
options.targetDir = listOf(target.toString(), "java", "src").joinToString(File.separator)
30+
options.beanValidation = false
3031
}
3132

3233
"initializes package folders" {
33-
val writerFactory = DefaultWriterFactory()
34-
writerFactory.init(options.targetDir!!, options.packageName)
34+
val writerFactory = DefaultWriterFactory(options)
35+
writerFactory.init()
3536

3637
val api = options.getSourceDir("api")
3738
val model = options.getSourceDir("model")
3839
val support = options.getSourceDir("support")
40+
val validation = options.getSourceDir("validation")
3941

4042
Files.exists(api) shouldBe true
4143
Files.isDirectory(api) shouldBe true
4244
Files.exists(model) shouldBe true
4345
Files.isDirectory(model) shouldBe true
4446
Files.exists(support) shouldBe true
4547
Files.isDirectory(support) shouldBe true
48+
Files.exists(validation) shouldBe false
49+
Files.isDirectory(validation) shouldBe false
50+
}
51+
52+
"initializes package folders with validation" {
53+
options.beanValidation = true
54+
val writerFactory = DefaultWriterFactory(options)
55+
writerFactory.init()
56+
57+
val api = options.getSourceDir("api")
58+
val model = options.getSourceDir("model")
59+
val support = options.getSourceDir("support")
60+
val validation = options.getSourceDir("validation")
61+
62+
Files.exists(api) shouldBe true
63+
Files.isDirectory(api) shouldBe true
64+
Files.exists(model) shouldBe true
65+
Files.isDirectory(model) shouldBe true
66+
Files.exists(support) shouldBe true
67+
Files.isDirectory(support) shouldBe true
68+
Files.exists(validation) shouldBe true
69+
Files.isDirectory(validation) shouldBe true
4670
}
4771

4872
"does not fail if target folder structure already exists" {
4973
Files.createDirectories(options.getSourceDir("api"))
5074
Files.createDirectories(options.getSourceDir("model"))
5175
Files.createDirectories(options.getSourceDir("support"))
76+
Files.createDirectories(options.getSourceDir("validation"))
5277

5378
shouldNotThrowAny {
54-
DefaultWriterFactory().init(options.targetDir!!, options.packageName)
79+
DefaultWriterFactory(options).init()
5580
}
5681
}
5782

@@ -60,8 +85,8 @@ class DefaultWriterFactorySpec : StringSpec({
6085
return options.getSourcePath("support", name).text
6186
}
6287

63-
val factory = DefaultWriterFactory()
64-
factory.init(options.targetDir!!, options.packageName)
88+
val factory = DefaultWriterFactory(options)
89+
factory.init()
6590

6691
val writer = factory.createWriter("${options.packageName}.support", "Generated")
6792
writer.write("public @interface Generated {}\n")
@@ -75,8 +100,8 @@ class DefaultWriterFactorySpec : StringSpec({
75100
return options.getSourcePath("api", name).text
76101
}
77102

78-
val factory = DefaultWriterFactory()
79-
factory.init(options.targetDir!!, options.packageName)
103+
val factory = DefaultWriterFactory(options)
104+
factory.init()
80105

81106
val writer = factory.createWriter("${options.packageName}.api", "Api")
82107
writer.write("public interface Api {}\n")
@@ -90,8 +115,8 @@ class DefaultWriterFactorySpec : StringSpec({
90115
return options.getSourcePath("model", name).text
91116
}
92117

93-
val factory = DefaultWriterFactory()
94-
factory.init(options.targetDir!!, options.packageName)
118+
val factory = DefaultWriterFactory(options)
119+
factory.init()
95120

96121
val writer = factory.createWriter("${options.packageName}.model", "Model")
97122
writer.write("public class Model {}\n")
@@ -104,25 +129,30 @@ class DefaultWriterFactorySpec : StringSpec({
104129
val api = options.getSourceDir("api")
105130
val model = options.getSourceDir("model")
106131
val support = options.getSourceDir("support")
132+
val validation = options.getSourceDir("validation")
107133

108134
Files.createDirectories(api)
109135
Files.createDirectories(model)
110136
Files.createDirectories(support)
137+
Files.createDirectories(validation)
111138

112139
api.resolve("Old.java").createFile()
113140
model.resolve("Old.java").createFile()
114141
support.resolve("Old.java").createFile()
142+
validation.resolve("Old.java").createFile()
115143

116144
Files.exists(api.resolve("Old.java")) shouldBe true
117145
Files.exists(model.resolve("Old.java")) shouldBe true
118146
Files.exists(support.resolve("Old.java")) shouldBe true
147+
Files.exists(validation.resolve("Old.java")) shouldBe true
119148

120-
val factory = DefaultWriterFactory()
121-
factory.init(options.targetDir!!, options.packageName)
149+
val factory = DefaultWriterFactory(options)
150+
factory.init()
122151

123152
Files.exists(api.resolve("Old.java")) shouldBe false
124153
Files.exists(model.resolve("Old.java")) shouldBe false
125154
Files.exists(support.resolve("Old.java")) shouldBe false
155+
Files.exists(validation.resolve("Old.java")) shouldBe false
126156
}
127157
})
128158

0 commit comments

Comments
 (0)