Skip to content

Commit d77b850

Browse files
authored
Merge pull request #96 from ZenWave360/develop
v2.3.0
2 parents ef791c6 + 696f9c9 commit d77b850

File tree

54 files changed

+804
-163
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+804
-163
lines changed

jbang-catalog.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,23 @@
3131
]
3232
},
3333
"snapshots": {
34-
"script-ref": "io.zenwave360.sdk:zenwave-sdk-cli:2.3.0-SNAPSHOT",
34+
"script-ref": "io.zenwave360.sdk:zenwave-sdk-cli:2.4.0-SNAPSHOT",
3535
"dependencies": [
3636
"org.slf4j:slf4j-simple:1.7.36",
37-
"io.zenwave360.sdk.plugins:asyncapi-spring-cloud-streams3:2.3.0-SNAPSHOT",
38-
"io.zenwave360.sdk.plugins:asyncapi-jsonschema2pojo:2.3.0-SNAPSHOT",
39-
"io.zenwave360.sdk.plugins:avro-schema-compiler:2.3.0-SNAPSHOT",
37+
"io.zenwave360.sdk.plugins:asyncapi-spring-cloud-streams3:2.4.0-SNAPSHOT",
38+
"io.zenwave360.sdk.plugins:asyncapi-jsonschema2pojo:2.4.0-SNAPSHOT",
39+
"io.zenwave360.sdk.plugins:avro-schema-compiler:2.4.0-SNAPSHOT",
4040
"org.apache.avro:avro-compiler:1.12.0",
41-
"io.zenwave360.sdk.plugins:asyncapi-generator:2.3.0-SNAPSHOT",
42-
"io.zenwave360.sdk.plugins:openapi-spring-webtestclient:2.3.0-SNAPSHOT",
43-
"io.zenwave360.sdk.plugins:openapi-karate:2.3.0-SNAPSHOT",
44-
"io.zenwave360.sdk.plugins:backend-application-default:2.3.0-SNAPSHOT",
45-
"io.zenwave360.sdk.plugins.customizations:kotlin-backend-application:2.3.0-SNAPSHOT",
46-
"io.zenwave360.sdk.plugins:zdl-to-openapi:2.3.0-SNAPSHOT",
47-
"io.zenwave360.sdk.plugins:zdl-to-asyncapi:2.3.0-SNAPSHOT",
48-
"io.zenwave360.sdk.plugins:jdl-to-asyncapi:2.3.0-SNAPSHOT",
49-
"io.zenwave360.sdk.plugins:zdl-to-markdown:2.3.0-SNAPSHOT",
50-
"io.zenwave360.sdk.plugins:openapi-controllers:2.3.0-SNAPSHOT"
41+
"io.zenwave360.sdk.plugins:asyncapi-generator:2.4.0-SNAPSHOT",
42+
"io.zenwave360.sdk.plugins:openapi-spring-webtestclient:2.4.0-SNAPSHOT",
43+
"io.zenwave360.sdk.plugins:openapi-karate:2.4.0-SNAPSHOT",
44+
"io.zenwave360.sdk.plugins:backend-application-default:2.4.0-SNAPSHOT",
45+
"io.zenwave360.sdk.plugins.customizations:kotlin-backend-application:2.4.0-SNAPSHOT",
46+
"io.zenwave360.sdk.plugins:zdl-to-openapi:2.4.0-SNAPSHOT",
47+
"io.zenwave360.sdk.plugins:zdl-to-asyncapi:2.4.0-SNAPSHOT",
48+
"io.zenwave360.sdk.plugins:jdl-to-asyncapi:2.4.0-SNAPSHOT",
49+
"io.zenwave360.sdk.plugins:zdl-to-markdown:2.4.0-SNAPSHOT",
50+
"io.zenwave360.sdk.plugins:openapi-controllers:2.4.0-SNAPSHOT"
5151
],
5252
"repositories": [
5353
"mavencentral",

plugins/asyncapi-spring-cloud-streams3/src/test/resources/scs3-pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<spring-cloud.version>2021.0.3</spring-cloud.version>
2323
<avro.version>1.11.1</avro.version>
2424
<testcontainers.version>1.17.2</testcontainers.version>
25-
<commons-lang3.version>3.12.0</commons-lang3.version>
25+
<commons-lang3.version>3.20.0</commons-lang3.version>
2626

2727
<!-- Plugin versions -->
2828
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>

plugins/avro-schema-compiler/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<groupId>org.apache.avro</groupId>
2121
<artifactId>avro-compiler</artifactId>
2222
<version>${avro-compiler.version}</version>
23-
<scope>optional</scope>
23+
<scope>provided</scope>
2424
<exclusions>
2525
<exclusion>
2626
<groupId>com.fasterxml.jackson.core</groupId>

plugins/backend-application-default/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Visit https://www.zenwave360.io/docs/zenwave-sdk/backend-application for complet
4141
| `style` | Programming Style | ProgrammingStyle | imperative | imperative, reactive |
4242
| `useLombok` | Use @Getter and @Setter annotations from Lombok | boolean | false | |
4343
| `useSpringModulith` | Whether to use Spring Modulith annotations and features | boolean | false | |
44+
| `useJSpecify` | Whether to use JSpecify for nullability annotations | boolean | false | |
4445
| `addRelationshipsById` | Controls whether to add a read/write relationship by id when mapping relationships between aggregate (not recommended) keeping the relationship by object readonly. | boolean | false | |
4546
| `idJavaType` | Specifies the Java data type for the ID fields of entities. Defaults to Long for JPA and String for MongoDB if not explicitly set. | String | | |
4647
| `includeEmitEventsImplementation` | Whether to add AsyncAPI/ApplicationEventPublisher as service dependencies. Depends on the naming convention of zenwave-asyncapi plugin to work. | boolean | true | |

plugins/backend-application-default/src/main/java/io/zenwave360/sdk/plugins/BackendApplicationDefaultHelpers.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,6 @@ public Map findAggregateCommandsForMethod(Map method, Options options) {
6666
}
6767
return Map.of("templateFile", "aggregates-commands-methodBody", "aggregatesCommandsForMethod", aggregatesCommandsForMethod);
6868
}
69-
public boolean isWriteMethod(Map method, Options options) {
70-
var methodName = (String) method.get("name");
71-
var hasId = method.get("paramId") != null;
72-
return hasId || methodName.startsWith("create") || methodName.startsWith("update") || methodName.startsWith("delete");
73-
}
7469

7570
@Deprecated
7671
public boolean isCrudMethod(String crudMethodPrefix, Options options) {

plugins/backend-application-default/src/main/java/io/zenwave360/sdk/plugins/BackendApplicationProjectTemplates.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import io.zenwave360.sdk.doc.DocumentedOption;
44
import io.zenwave360.sdk.generators.Generator;
55
import io.zenwave360.sdk.options.PersistenceType;
6+
import io.zenwave360.sdk.plugins.annotators.AnnotationHelper;
7+
import io.zenwave360.sdk.plugins.annotators.JSpecifyAnnotator;
68
import io.zenwave360.sdk.utils.JSONPath;
79
import io.zenwave360.sdk.zdl.ProjectTemplates;
810
import io.zenwave360.sdk.zdl.layouts.CleanArchitectureProjectLayout;
911
import io.zenwave360.sdk.zdl.layouts.CleanHexagonalProjectLayout;
1012
import io.zenwave360.sdk.zdl.layouts.ProjectLayout;
13+
import io.zenwave360.sdk.zdl.utils.ZDLAnnotator;
1114
import io.zenwave360.sdk.zdl.utils.ZDLFindUtils;
1215

1316
import java.util.ArrayList;
@@ -24,6 +27,9 @@ public class BackendApplicationProjectTemplates extends ProjectTemplates {
2427
@DocumentedOption(description = "Whether to use Spring Modulith annotations and features")
2528
public boolean useSpringModulith = false;
2629

30+
@DocumentedOption(description = "Whether to use JSpecify for nullability annotations")
31+
public boolean useJSpecify = false;
32+
2733
public PersistenceType persistence = PersistenceType.mongodb;
2834

2935
public boolean includeEmitEventsImplementation = true;
@@ -54,9 +60,19 @@ public List<Object> getTemplateHelpers(Generator generator) {
5460
var helpers = new ArrayList<>(super.getTemplateHelpers(generator));
5561
helpers.add(new BackendApplicationDefaultHelpers((BackendApplicationDefaultGenerator) generator));
5662
helpers.add(new BackendApplicationDefaultJpaHelpers((BackendApplicationDefaultGenerator) generator));
63+
helpers.add(AnnotationHelper.class);
5764
return helpers;
5865
}
5966

67+
@Override
68+
public List<ZDLAnnotator> getZDLAnnotators() {
69+
var annotators = new ArrayList<>(super.getZDLAnnotators());
70+
if(useJSpecify) {
71+
annotators.add(new JSpecifyAnnotator());
72+
}
73+
return annotators;
74+
}
75+
6076
public BackendApplicationProjectTemplates() {
6177
setTemplatesFolder("io/zenwave360/sdk/plugins/BackendApplicationDefaultGenerator");
6278

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package io.zenwave360.sdk.plugins.annotators;
2+
3+
import com.github.jknack.handlebars.Options;
4+
import io.zenwave360.sdk.zdl.model.JavaZdlModel;
5+
6+
import java.util.Map;
7+
import java.util.stream.Collectors;
8+
9+
public class AnnotationHelper {
10+
public static String annotate(Object javaModel, Options options) {
11+
var zdl = (Map) options.get("zdl");
12+
var model = options.param(0);
13+
if(javaModel instanceof JavaZdlModel.Service) {
14+
return annotate((JavaZdlModel.Service) javaModel, (Map) model, zdl);
15+
}
16+
if(javaModel instanceof JavaZdlModel.ServiceMethod) {
17+
return annotate((JavaZdlModel.ServiceMethod) javaModel, (Map) model, zdl);
18+
}
19+
return "";
20+
}
21+
22+
public static String addImports(Object javaModel, Options options) {
23+
var zdl = (Map) options.get("zdl");
24+
var model = options.param(0);
25+
if(javaModel instanceof JavaZdlModel.Service) {
26+
return addImports((JavaZdlModel.Service) javaModel, (Map) model, zdl);
27+
}
28+
return "";
29+
}
30+
31+
private static String addImports(JavaZdlModel.Service service, Map<String, Object> zdlService, Map<String, Object> zdl) {
32+
return service.annotations().stream().map(a -> "import " + a.name()).collect(Collectors.joining(";\n"));
33+
}
34+
35+
36+
private static String annotate(JavaZdlModel.Service service, Map<String, Object> zdlService, Map<String, Object> zdl) {
37+
return service.annotations().stream().map(a -> "@" + a.name()).collect(Collectors.joining("\n"));
38+
}
39+
40+
private static String annotate(JavaZdlModel.ServiceMethod serviceMethod, Map<String, Object> zdlMethod, Map<String, Object> zdl) {
41+
return "// todo";
42+
}
43+
44+
private static String annotate(JavaZdlModel.MethodParameter methodParameter, Map<String, Object> zdlService, Map<String, Object> zdl) {
45+
return methodParameter.annotations().stream().map(a -> "@" + a.name()).collect(Collectors.joining("\n"));
46+
}
47+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.zenwave360.sdk.plugins.annotators;
2+
3+
import io.zenwave360.sdk.zdl.model.JavaZdlModel;
4+
import io.zenwave360.sdk.zdl.utils.ZDLAnnotator;
5+
6+
import java.util.Map;
7+
8+
public class JSpecifyAnnotator implements ZDLAnnotator {
9+
10+
@Override
11+
public void annotate(JavaZdlModel.Service service, Map<String, Object> zdlService, Map<String, Object> zdl) {
12+
service.annotations().add(new JavaZdlModel.Annotation("org.jspecify.annotations.NullMarked", null, null));
13+
}
14+
15+
@Override
16+
public void annotate(JavaZdlModel.MethodParameter methodParameter, Map<String, Object> method, Map<String, Object> zdl) {
17+
if(methodParameter.isOptional()) {
18+
methodParameter.annotations().add(new JavaZdlModel.Annotation("org.jspecify.annotations.Nullable", null, null));
19+
}
20+
}
21+
}

plugins/backend-application-default/src/main/resources/io/zenwave360/sdk/plugins/BackendApplicationDefaultGenerator/src/main/java/core/implementation/imperative/ServiceImpl.java.hbs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,14 @@ import org.springframework.transaction.annotation.Transactional;
3535
* Service Implementation for managing {{service.entityNames}}.
3636
*/
3737
@Service
38-
@Transactional(readOnly = true)
38+
@Transactional
3939
{{~#if useLombok}}
4040
@lombok.AllArgsConstructor
4141
{{~/if}}
42+
{{~#if useSpringModulith}}
43+
@org.springframework.modulith.NamedInterface("{{service.name}}")
44+
{{~/if}}
45+
{{annotate service.javaService service}}
4246
public class {{service.name}}Impl implements {{service.name}} {
4347

4448
private final Logger log = LoggerFactory.getLogger(getClass());
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
1-
{{~#each entities as |entity|}}
2-
{{~#if (isCrudMethod 'create' method=method entity=entity )}}
3-
@Transactional
4-
{{~else if (isCrudMethod 'update' method=method entity=entity )}}
5-
@Transactional
6-
{{~else if (isCrudMethod 'list' method=method entity=entity )}}
7-
{{~else if (isCrudMethod 'search' method=method entity=entity )}}
8-
{{~else if (isCrudMethod 'get' method=method entity=entity )}}
9-
{{~else if (isCrudMethod 'delete' method=method entity=entity )}}
10-
@Transactional
11-
{{~/if}}
12-
{{~/each}}
1+
{{~#if method.options.get}}
2+
@Transactional(readOnly = true)
3+
{{~/if}}
134
{{~#if method.options.async}}
145
@Async{{#if (not (eq method.options.async true))}}("{{method.options.async}}"){{/if}}
156
{{~/if}}

0 commit comments

Comments
 (0)