Skip to content

Commit df43280

Browse files
committed
feat(#48): Add codegen for rx3/mutiny
1 parent f62bd89 commit df43280

17 files changed

+249
-110
lines changed

buildSrc/src/main/kotlin/Dependencies.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,14 @@ object VertxLibs {
7070

7171
@JvmField val core = "io.vertx:vertx-core:${Version.defaultVersion}"
7272
@JvmField val junit5 = "io.vertx:vertx-junit5:${Version.defaultVersion}"
73+
@JvmField val rx3 = "io.vertx:vertx-rx-java3:${Version.defaultVersion}"
74+
}
75+
76+
object MutinyLibs {
77+
object Version {
78+
79+
const val mutiny = "2.27.0"
80+
}
81+
82+
const val core = "io.smallrye.reactive:smallrye-mutiny-vertx-core:${Version.mutiny}"
7383
}

core/build.gradle.kts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import cloud.playio.gradle.generator.codegen.SourceSetName
2+
13
plugins {
24
`java-test-fixtures`
5+
id(PlayioPlugin.codegen)
36
}
47

58

@@ -8,11 +11,20 @@ oss {
811
title.set("Scheduler.x")
912
}
1013

14+
codegen {
15+
vertx {
16+
version.set(VertxLibs.Version.defaultVersion)
17+
sources.addAll(arrayOf(SourceSetName.MAIN))
18+
}
19+
}
20+
1121
dependencies {
1222
api(VertxLibs.core)
1323
compileOnly(JacksonLibs.annotations)
1424
compileOnly(JacksonLibs.databind)
1525
compileOnly(UtilLibs.jetbrainsAnnotations)
26+
codeGenerator(VertxLibs.rx3)
27+
codeGenerator(MutinyLibs.core)
1628

1729
testImplementation(TestLibs.junit5Params)
1830
testImplementation(JacksonLibs.databind)

core/src/main/java/io/github/zero88/schedulerx/TaskExecutor.java

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,26 @@
22

33
import org.jetbrains.annotations.NotNull;
44

5-
import io.vertx.core.Vertx;
5+
import io.vertx.codegen.annotations.GenIgnore;
6+
import io.vertx.codegen.annotations.VertxGen;
67
import io.vertx.core.WorkerExecutor;
78

89
/**
910
* Represents for an executor run {@code task} in conditional loop
1011
*
11-
* @see TriggerTaskExecutor
1212
* @since 1.0.0
1313
*/
14-
public interface TaskExecutor {
15-
16-
/**
17-
* Vertx
18-
*
19-
* @return vertx
20-
*/
21-
@NotNull Vertx vertx();
14+
@VertxGen(concrete = false)
15+
public interface TaskExecutor extends TaskExecutorProperties {
2216

2317
/**
2418
* Task executor state
2519
*
2620
* @return task executor state
2721
*/
22+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
2823
@NotNull TaskExecutorState state();
2924

30-
/**
31-
* Defines a task executor monitor
32-
*
33-
* @return task executor monitor
34-
* @see TaskExecutorMonitor
35-
*/
36-
@NotNull TaskExecutorMonitor monitor();
37-
3825
/**
3926
* Start and run in {@code Vertx worker thread pool}
4027
*/
@@ -53,6 +40,7 @@ public interface TaskExecutor {
5340
*
5441
* @param executionContext execution context
5542
*/
43+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
5644
void executeTask(@NotNull TaskExecutionContext executionContext);
5745

5846
/**

core/src/main/java/io/github/zero88/schedulerx/TaskExecutorMonitor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import org.jetbrains.annotations.NotNull;
44

55
/**
6-
* Represents for a monitor that watches lifecycle event in executor
6+
* Represents for a monitor that watches lifecycle event in executor.
7+
* <p/>
8+
* It can be used to persist or distribute the task result per each round.
79
*
810
* @see TaskResult
911
* @since 1.0.0
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package io.github.zero88.schedulerx;
2+
3+
import org.jetbrains.annotations.ApiStatus.Internal;
4+
import org.jetbrains.annotations.NotNull;
5+
6+
import io.vertx.codegen.annotations.GenIgnore;
7+
import io.vertx.codegen.annotations.VertxGen;
8+
import io.vertx.core.Vertx;
9+
10+
/**
11+
* Shared immutable fields between TaskExecutor and its builder
12+
*
13+
* @since 2.0.0
14+
*/
15+
@Internal
16+
@VertxGen(concrete = false)
17+
public interface TaskExecutorProperties {
18+
19+
/**
20+
* Vertx
21+
*
22+
* @return vertx
23+
*/
24+
@NotNull Vertx vertx();
25+
26+
/**
27+
* Defines a task executor monitor
28+
*
29+
* @return task executor monitor
30+
* @see TaskExecutorMonitor
31+
*/
32+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
33+
@NotNull TaskExecutorMonitor monitor();
34+
35+
/**
36+
* Task to execute per round
37+
*
38+
* @return task
39+
* @see Task
40+
*/
41+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
42+
@NotNull Task task();
43+
44+
/**
45+
* Defines job data as input task data
46+
*
47+
* @return job data
48+
* @see JobData
49+
*/
50+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
51+
@NotNull JobData jobData();
52+
53+
}

core/src/main/java/io/github/zero88/schedulerx/TriggerTaskExecutor.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*
1010
* @param <T> Type of Trigger
1111
* @see Trigger
12+
* @see TaskExecutor
1213
* @since 1.0.0
1314
*/
1415
public interface TriggerTaskExecutor<T extends Trigger> extends TaskExecutor {
@@ -20,20 +21,4 @@ public interface TriggerTaskExecutor<T extends Trigger> extends TaskExecutor {
2021
*/
2122
@NotNull T trigger();
2223

23-
/**
24-
* Task to execute per round
25-
*
26-
* @return task
27-
* @see Task
28-
*/
29-
@NotNull Task task();
30-
31-
/**
32-
* Defines job data as input task data
33-
*
34-
* @return job data
35-
* @see JobData
36-
*/
37-
@NotNull JobData jobData();
38-
3924
}

core/src/main/java/io/github/zero88/schedulerx/TriggerTaskExecutorBuilder.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
* @since 2.0.0
1717
*/
1818
public interface TriggerTaskExecutorBuilder<TRIGGER extends Trigger, EXECUTOR extends TriggerTaskExecutor<TRIGGER>,
19-
SELF extends TriggerTaskExecutorBuilder<TRIGGER, EXECUTOR, SELF>> {
19+
SELF extends TriggerTaskExecutorBuilder<TRIGGER, EXECUTOR, SELF>>
20+
extends TaskExecutorProperties {
21+
22+
@NotNull TRIGGER trigger();
2023

2124
@NotNull SELF setVertx(@NotNull Vertx vertx);
2225

@@ -28,16 +31,6 @@ public interface TriggerTaskExecutorBuilder<TRIGGER extends Trigger, EXECUTOR ex
2831

2932
@NotNull SELF setMonitor(@NotNull TaskExecutorMonitor monitor);
3033

31-
@NotNull Vertx vertx();
32-
33-
@NotNull Task task();
34-
35-
@NotNull TRIGGER trigger();
36-
37-
@NotNull JobData jobData();
38-
39-
@NotNull TaskExecutorMonitor monitor();
40-
4134
@NotNull EXECUTOR build();
4235

4336
}

core/src/main/java/io/github/zero88/schedulerx/impl/AbstractTaskExecutorBuilder.java

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919
@SuppressWarnings("unchecked")
2020
public abstract class AbstractTaskExecutorBuilder<T extends Trigger, E extends TriggerTaskExecutor<T>,
21-
B extends AbstractTaskExecutorBuilder<T, E, B>>
21+
B extends TriggerTaskExecutorBuilder<T, E, B>>
2222
implements TriggerTaskExecutorBuilder<T, E, B> {
2323

2424
private Vertx vertx;
@@ -27,44 +27,48 @@ public abstract class AbstractTaskExecutorBuilder<T extends Trigger, E extends T
2727
private Task task;
2828
private T trigger;
2929

30-
public @NotNull B setVertx(@NotNull Vertx vertx) {
31-
this.vertx = Objects.requireNonNull(vertx, "Vertx instance is required");
32-
return (B) this;
30+
@Override
31+
public @NotNull Vertx vertx() {
32+
return Objects.requireNonNull(vertx, "Vertx instance is required");
3333
}
3434

35-
public @NotNull B setMonitor(@NotNull TaskExecutorMonitor monitor) {
36-
this.monitor = Objects.requireNonNull(monitor, "TaskExecutorMonitor is required");
37-
return (B) this;
35+
@Override
36+
public @NotNull TaskExecutorMonitor monitor() {
37+
return Objects.requireNonNull(monitor, "TaskExecutorMonitor is required");
3838
}
3939

40-
public @NotNull B setJobData(@NotNull JobData jobData) {
41-
this.jobData = Objects.requireNonNull(jobData, "JobData is required");
40+
@Override
41+
public @NotNull T trigger() { return Objects.requireNonNull(trigger, "Trigger is required"); }
42+
43+
@Override
44+
public @NotNull Task task() { return Objects.requireNonNull(task, "Task is required"); }
45+
46+
@Override
47+
public @NotNull JobData jobData() { return Objects.requireNonNull(jobData, "JobData is required"); }
48+
49+
public @NotNull B setVertx(@NotNull Vertx vertx) {
50+
this.vertx = vertx;
4251
return (B) this;
4352
}
4453

4554
public @NotNull B setTask(@NotNull Task task) {
46-
this.task = Objects.requireNonNull(task, "Task is required");
55+
this.task = task;
4756
return (B) this;
4857
}
4958

5059
public @NotNull B setTrigger(@NotNull T trigger) {
51-
this.trigger = Objects.requireNonNull(trigger, "Trigger is required");
60+
this.trigger = trigger;
5261
return (B) this;
5362
}
5463

55-
@Override
56-
public @NotNull Vertx vertx() { return vertx; }
57-
58-
@Override
59-
public @NotNull TaskExecutorMonitor monitor() { return monitor; }
60-
61-
@Override
62-
public @NotNull T trigger() { return trigger; }
63-
64-
@Override
65-
public @NotNull Task task() { return task; }
64+
public @NotNull B setMonitor(@NotNull TaskExecutorMonitor monitor) {
65+
this.monitor = monitor;
66+
return (B) this;
67+
}
6668

67-
@Override
68-
public @NotNull JobData jobData() { return jobData; }
69+
public @NotNull B setJobData(@NotNull JobData jobData) {
70+
this.jobData = jobData;
71+
return (B) this;
72+
}
6973

7074
}

core/src/main/java/io/github/zero88/schedulerx/package-info.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,8 @@
22
* The scheduler.x core API
33
*/
44

5+
@ModuleGen(name = "io-zero88-schedulerx", groupPackage = "io.github.zero88.schedulerx")
56
package io.github.zero88.schedulerx;
7+
8+
import io.vertx.codegen.annotations.ModuleGen;
9+
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
package io.github.zero88.schedulerx.trigger;
22

3+
import org.jetbrains.annotations.NotNull;
4+
35
import io.github.zero88.schedulerx.TriggerTaskExecutor;
6+
import io.vertx.codegen.annotations.GenIgnore;
7+
import io.vertx.codegen.annotations.VertxGen;
48

59
/**
610
* Represents for the task executor has an execution loop based on the timer of cron expressions.
711
*
812
* @see CronTrigger
913
* @since 2.0.0
1014
*/
15+
@VertxGen
1116
public interface CronTriggerExecutor extends TriggerTaskExecutor<CronTrigger> {
1217

13-
static CronTriggerExecutorBuilder builder() { return new CronTriggerExecutorBuilder(); }
18+
static CronTriggerExecutorBuilder builder() { return new CronTriggerExecutorImpl.CronTriggerExecutorBuilderImpl(); }
19+
20+
@Override
21+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
22+
@NotNull CronTrigger trigger();
1423

1524
}

core/src/main/java/io/github/zero88/schedulerx/trigger/CronTriggerExecutorBuilder.java

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,46 @@
22

33
import org.jetbrains.annotations.NotNull;
44

5-
import io.github.zero88.schedulerx.impl.AbstractTaskExecutorBuilder;
5+
import io.github.zero88.schedulerx.JobData;
6+
import io.github.zero88.schedulerx.Task;
7+
import io.github.zero88.schedulerx.TaskExecutorMonitor;
8+
import io.github.zero88.schedulerx.TriggerTaskExecutorBuilder;
9+
import io.vertx.codegen.annotations.Fluent;
10+
import io.vertx.codegen.annotations.GenIgnore;
11+
import io.vertx.codegen.annotations.VertxGen;
12+
import io.vertx.core.Vertx;
613

714
/**
815
* Represents a builder that constructs {@link CronTriggerExecutor}
916
*
1017
* @since 2.0.0
1118
*/
12-
public final class CronTriggerExecutorBuilder
13-
extends AbstractTaskExecutorBuilder<CronTrigger, CronTriggerExecutor, CronTriggerExecutorBuilder> {
19+
@VertxGen
20+
public interface CronTriggerExecutorBuilder
21+
extends TriggerTaskExecutorBuilder<CronTrigger, CronTriggerExecutor, CronTriggerExecutorBuilder> {
1422

15-
public @NotNull CronTriggerExecutor build() {
16-
return new CronTriggerExecutorImpl(vertx(), monitor(), jobData(), task(), trigger());
17-
}
23+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
24+
@NotNull CronTrigger trigger();
25+
26+
@Fluent
27+
@NotNull CronTriggerExecutorBuilder setVertx(@NotNull Vertx vertx);
28+
29+
@Fluent
30+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
31+
@NotNull CronTriggerExecutorBuilder setTask(@NotNull Task task);
32+
33+
@Fluent
34+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
35+
@NotNull CronTriggerExecutorBuilder setTrigger(@NotNull CronTrigger trigger);
36+
37+
@Fluent
38+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
39+
@NotNull CronTriggerExecutorBuilder setJobData(@NotNull JobData jobData);
40+
41+
@Fluent
42+
@GenIgnore(GenIgnore.PERMITTED_TYPE)
43+
@NotNull CronTriggerExecutorBuilder setMonitor(@NotNull TaskExecutorMonitor monitor);
44+
45+
@NotNull CronTriggerExecutor build();
1846

1947
}

0 commit comments

Comments
 (0)