Skip to content

Commit 16e1bd5

Browse files
authored
Merge pull request #64 from ZenWave360/features/kotlin
feat: fixes and improvements in kotlin support
2 parents 141ae52 + 9eccb7e commit 16e1bd5

File tree

16 files changed

+85
-21
lines changed

16 files changed

+85
-21
lines changed

plugins/customizations/kotlin-backend-application/src/main/java/io/zenwave360/sdk/plugins/kotlin/BackendApplicationKotlinHelpers.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ public class BackendApplicationKotlinHelpers {
1717
this.generator = generator;
1818
}
1919

20+
public String javaType(Map field, Options options) {
21+
return ZDLJavaSignatureUtils.javaType(field).replace("byte[]", "ByteArray");
22+
}
23+
24+
public String naturalIdsRepoMethodSignature(Map entity, Options options) {
25+
return ZDLJavaSignatureUtils.naturalIdsKotlinRepoMethodSignature(entity);
26+
}
27+
2028
public String methodParametersSignature(Map<String, Object> method, Options options) {
2129
var zdl = (Map) options.get("zdl");
2230
return ZDLJavaSignatureUtils.kotlinMethodParametersSignature(generator.getIdJavaType(), method, zdl);
@@ -96,6 +104,7 @@ private String fixKotlinTypeInitializers(String type) {
96104

97105
private String fixKotlinCollectionTypes(String type) {
98106
return type
107+
.replaceAll("byte\\[]", "ByteArray")
99108
.replaceAll("Set<", "MutableSet<")
100109
.replaceAll("List<", "MutableList<")
101110
.replaceAll("Map<", "MutableMap<");

plugins/customizations/kotlin-backend-application/src/main/java/io/zenwave360/sdk/plugins/kotlin/OpenAPIControllersKotlinHelpers.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,15 @@ public OpenAPIControllersKotlinHelpers(String openApiModelNamePrefix, String ope
2424

2525
public String kotlinMethodParametersSignature(String methodParametersSignature, Options options) {
2626
return ZDLJavaSignatureUtils.toKotlinMethodSignature(methodParametersSignature)
27-
.replaceAll(": Integer", ": Int");
27+
.replaceAll(": Integer", ": Int")
28+
.replaceAll(": Map", ": java.util.Map<String,Any?>");
29+
}
30+
31+
public String methodParameters(Map operation, Options options) {
32+
var requiredFields = JSONPath.get(operation, "x--request-schema.required", List.<String>of());
33+
return ZDLHttpUtils.methodParameters(operation, openApiModelNamePrefix, openApiModelNameSuffix).stream().map(param -> {
34+
return param.getKey() + " " + param.getValue() + (requiredFields.contains(param.getValue()) ? "" : "?");
35+
}).collect(Collectors.joining(", "));
2836
}
2937

3038
public String voidUnit(String returnType, Options options) {

plugins/customizations/kotlin-backend-application/src/main/java/io/zenwave360/sdk/plugins/kotlin/OpenAPIControllersKotlinTemplates.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
11
package io.zenwave360.sdk.plugins.kotlin;
22

3+
import io.zenwave360.sdk.doc.DocumentedOption;
34
import io.zenwave360.sdk.generators.Generator;
45
import io.zenwave360.sdk.plugins.OpenAPIControllersGenerator;
56
import io.zenwave360.sdk.plugins.OpenAPIControllersHelpers;
67
import io.zenwave360.sdk.zdl.ProjectTemplates;
78
import io.zenwave360.sdk.zdl.layouts.ProjectLayout;
89

910
import java.util.List;
11+
import java.util.Map;
12+
import java.util.function.Function;
1013

1114
import static io.zenwave360.sdk.templating.OutputFormatType.KOTLIN;
1215

1316
public class OpenAPIControllersKotlinTemplates extends ProjectTemplates {
17+
18+
@DocumentedOption(description = "Include Controller Unit tests (using ServicesInMemoryConfig)")
19+
public boolean includeControllerTests = true;
20+
21+
public Function<Map<String, Object>, Boolean> skipControllerTests = (model) -> !includeControllerTests;
22+
1423
public OpenAPIControllersKotlinTemplates() {
1524
setTemplatesFolder("io/zenwave360/sdk/plugins/kotlin/OpenAPIControllersGenerator");
1625

@@ -22,7 +31,7 @@ public OpenAPIControllersKotlinTemplates() {
2231
this.addTemplate(this.serviceTemplates, "src/main/kotlin", "web/{{webFlavor}}/ServiceApiController.kt",
2332
layoutNames.adaptersWebPackage, "{{serviceName}}ApiController.kt", KOTLIN, null, false);
2433
this.addTemplate(this.serviceTemplates, "src/test/kotlin", "web/{{webFlavor}}/ServiceApiControllerTest.kt",
25-
layoutNames.adaptersWebPackage, "{{serviceName}}ApiControllerTest.kt", KOTLIN, null, true);
34+
layoutNames.adaptersWebPackage, "{{serviceName}}ApiControllerTest.kt", KOTLIN, skipControllerTests, true);
2635

2736
}
2837

plugins/customizations/kotlin-backend-application/src/main/resources/io/zenwave360/sdk/plugins/kotlin/BackendApplicationDefaultGenerator/src/main/kotlin/core/domain/jpa/Entity.kt.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ data class {{entity.className}}(
120120
{{~#if (eq relationship.type 'OneToOne')}}
121121
fun set{{capitalize relationship.fieldName}}({{relationship.fieldName}}: {{{relationshipFieldType relationship}}}?): {{entity.className}} {
122122
this.{{relationship.fieldName}} = {{relationship.fieldName}}
123-
{{relationship.fieldName}}?.set{{capitalize relationship.otherEntityFieldName}}(this)
123+
{{relationship.fieldName}}?.{{relationship.otherEntityFieldName}} = this
124124
return this
125125
}
126126
{{~/if}}

plugins/customizations/kotlin-backend-application/src/main/resources/io/zenwave360/sdk/plugins/kotlin/BackendApplicationDefaultGenerator/src/test/kotlin/config/ServicesInMemoryConfig.kt.hbs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@ open class ServicesInMemoryConfig : RepositoriesInMemoryConfig() {
5858
{{~/each}}
5959

6060
{{assign "aggregates" (findAggregates entities)}}
61-
{{~#each aggregates as |entity|}}
6261
companion object {
62+
{{~#each aggregates as |entity|}}
6363
var _{{entity.instanceNamePlural}}: List<{{entity.className}}>? = null
64-
}
6564
{{~/each}}
65+
}
6666

6767
fun reloadTestData() {
6868
{{assign "phisicalEntities" (jsonPath entities "$[?(@.options.skip != true)]")}}
@@ -73,7 +73,7 @@ open class ServicesInMemoryConfig : RepositoriesInMemoryConfig() {
7373
{{entity.instanceName}}Repository().saveAll({{entity.instanceNamePlural}})
7474
{{~/each}}
7575
{{~#if (needsEventBus service)}}
76-
eventPublisher.events.clear()
76+
eventPublisher.getEvents().clear()
7777
{{~/if}}
7878
}
7979

plugins/customizations/kotlin-backend-application/src/main/resources/io/zenwave360/sdk/plugins/kotlin/BackendApplicationDefaultGenerator/src/test/kotlin/infrastructure/events/InMemoryEventPublisher.kt.hbs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ import {{layout.domainEventsPackage}}.*
44
import {{layout.entitiesPackage}}.*
55
import {{layout.outboundEventsPackage}}.EventPublisher
66

7-
class InMemoryEventPublisher : EventPublisher {
7+
class InMemoryEventPublisher: EventPublisher {
88

99
private val events = mutableListOf<Any>()
1010

11-
fun getEvents(): List<Any> {
11+
fun getEvents(): MutableList<Any> {
1212
return events
1313
}
1414
{{~#each events as |event|}}
15-
fun on{{event.className}}(event: {{event.className}}) {
15+
override fun on{{event.className}}(event: {{event.className}}) {
1616
events.add(event)
1717
}
1818
{{~/each}}
19-
}
19+
}

plugins/customizations/kotlin-backend-application/src/main/resources/io/zenwave360/sdk/plugins/kotlin/BackendApplicationDefaultGenerator/src/test/kotlin/infrastructure/jpa/imperative/inmemory/EntityRepositoryInMemory.kt.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import java.util.*
99
class {{entity.className}}RepositoryInMemory : InMemoryJpaRepository<{{entity.className}}, {{idJavaType}}>(), {{entity.className}}Repository {
1010

1111
{{~#if (naturalIdFields entity)}}
12-
override fun {{{naturalIdsRepoMethodSignature entity}}} {
12+
override {{{naturalIdsRepoMethodSignature entity}}} {
1313
return getEntities().values.stream().filter { e ->
1414
{{#joinWithTemplate (naturalIdFields entity) delimiter='&&'}} isSameValue({{name}}, readField(e, "{{name}}")) {{/joinWithTemplate}}
1515
}.findFirst()

plugins/customizations/kotlin-backend-application/src/main/resources/io/zenwave360/sdk/plugins/kotlin/BackendApplicationDefaultGenerator/src/test/kotlin/infrastructure/mongodb/imperative/inmemory/EntityRepositoryInMemory.kt.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import java.util.*
99
class {{entity.className}}RepositoryInMemory : InMemoryMongodbRepository<{{entity.className}}>(), {{entity.className}}Repository {
1010

1111
{{~#if (naturalIdFields entity)}}
12-
override fun {{{naturalIdsRepoMethodSignature entity}}} {
12+
override {{{naturalIdsRepoMethodSignature entity}}} {
1313
return getEntities().values.stream().filter { e ->
1414
{{#joinWithTemplate (naturalIdFields entity) delimiter='&&'}} isSameValue({{name}}, readField(e, "{{name}}")) {{/joinWithTemplate}}
1515
}.findFirst()

plugins/customizations/kotlin-backend-application/src/main/resources/io/zenwave360/sdk/plugins/kotlin/OpenAPIControllersGenerator/src/main/kotlin/web/mappers/ServiceDTOsMapper.kt.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ interface {{serviceName}}DTOsMapper {
2626
fun as{{inputType}}(dto: {{requestDto}}): {{inputType}}
2727
{{~/if}}
2828
{{~#if methodParameters}}
29-
fun as{{inputType}}({{{kotlinMethodParametersSignature methodParameters}}}): {{inputType}}
29+
fun as{{inputType}}({{{methodParameters operation}}}): {{inputType}}
3030
{{~/if}}
3131
{{~/each}}
3232

plugins/customizations/kotlin-backend-application/src/main/resources/io/zenwave360/sdk/plugins/kotlin/OpenAPIControllersGenerator/src/main/kotlin/web/mvc/ServiceApiController.kt.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ open class {{serviceName}}ApiController(
5151
return Optional.ofNullable(request)
5252
}
5353

54-
{{#each serviceOperations}}
54+
{{#each serviceOperations as |operation|}}
5555
{{~#assign "TODO"}}{{#unless serviceMethod}}null // TODO: service{{/unless}}{{/assign}}
5656

57-
override fun {{operationId}}({{{kotlinMethodParametersSignature methodParameters}}}): ResponseEntity<{{{voidUnit responseEntityExpression}}}> {
57+
override fun {{operationId}}({{{methodParameters operation}}}): ResponseEntity<{{{voidUnit responseEntityExpression}}}> {
5858
log.debug("REST request to {{operationId}}: {{methodParameterPlaceholders}}"{{#if methodParameters}}, {{methodParameterInstances}}{{/if}})
5959
{{~#if (eq httpMethod 'patch')}}
6060
{{~else if requestBodySchema}}

0 commit comments

Comments
 (0)