18
18
import static io .serverlessworkflow .impl .lifecycle .ce .WorkflowDefinitionCEData .ref ;
19
19
import static io .serverlessworkflow .impl .lifecycle .ce .WorkflowErrorCEData .error ;
20
20
21
+ import io .cloudevents .CloudEvent ;
21
22
import io .cloudevents .CloudEventData ;
22
23
import io .cloudevents .core .builder .CloudEventBuilder ;
23
24
import io .cloudevents .core .data .PojoCloudEventData ;
24
25
import io .cloudevents .core .data .PojoCloudEventData .ToBytes ;
26
+ import io .serverlessworkflow .impl .WorkflowApplication ;
25
27
import io .serverlessworkflow .impl .WorkflowModel ;
26
28
import io .serverlessworkflow .impl .events .CloudEventUtils ;
27
- import io .serverlessworkflow .impl .events .EventPublisher ;
28
29
import io .serverlessworkflow .impl .lifecycle .TaskCancelledEvent ;
29
30
import io .serverlessworkflow .impl .lifecycle .TaskCompletedEvent ;
30
31
import io .serverlessworkflow .impl .lifecycle .TaskEvent ;
41
42
import io .serverlessworkflow .impl .lifecycle .WorkflowStartedEvent ;
42
43
import io .serverlessworkflow .impl .lifecycle .WorkflowSuspendedEvent ;
43
44
import java .time .OffsetDateTime ;
45
+ import java .util .function .Function ;
44
46
45
47
public abstract class AbstractLifeCyclePublisher implements WorkflowExecutionListener {
46
48
47
49
@ Override
48
- public void onTaskStarted (TaskStartedEvent ev ) {
49
- eventPublisher (ev )
50
- .publish (
50
+ public void onTaskStarted (TaskStartedEvent event ) {
51
+ publish (
52
+ event ,
53
+ ev ->
51
54
builder ()
52
55
.withData (
53
56
cloudEventData (
@@ -58,9 +61,10 @@ public void onTaskStarted(TaskStartedEvent ev) {
58
61
}
59
62
60
63
@ Override
61
- public void onTaskCompleted (TaskCompletedEvent ev ) {
62
- eventPublisher (ev )
63
- .publish (
64
+ public void onTaskCompleted (TaskCompletedEvent event ) {
65
+ publish (
66
+ event ,
67
+ ev ->
64
68
builder ()
65
69
.withData (
66
70
cloudEventData (
@@ -72,9 +76,10 @@ public void onTaskCompleted(TaskCompletedEvent ev) {
72
76
}
73
77
74
78
@ Override
75
- public void onTaskSuspended (TaskSuspendedEvent ev ) {
76
- eventPublisher (ev )
77
- .publish (
79
+ public void onTaskSuspended (TaskSuspendedEvent event ) {
80
+ publish (
81
+ event ,
82
+ ev ->
78
83
builder ()
79
84
.withData (
80
85
cloudEventData (
@@ -85,9 +90,10 @@ public void onTaskSuspended(TaskSuspendedEvent ev) {
85
90
}
86
91
87
92
@ Override
88
- public void onTaskResumed (TaskResumedEvent ev ) {
89
- eventPublisher (ev )
90
- .publish (
93
+ public void onTaskResumed (TaskResumedEvent event ) {
94
+ publish (
95
+ event ,
96
+ ev ->
91
97
builder ()
92
98
.withData (
93
99
cloudEventData (
@@ -98,9 +104,10 @@ public void onTaskResumed(TaskResumedEvent ev) {
98
104
}
99
105
100
106
@ Override
101
- public void onTaskCancelled (TaskCancelledEvent ev ) {
102
- eventPublisher (ev )
103
- .publish (
107
+ public void onTaskCancelled (TaskCancelledEvent event ) {
108
+ publish (
109
+ event ,
110
+ ev ->
104
111
builder ()
105
112
.withData (
106
113
cloudEventData (
@@ -111,9 +118,10 @@ public void onTaskCancelled(TaskCancelledEvent ev) {
111
118
}
112
119
113
120
@ Override
114
- public void onTaskFailed (TaskFailedEvent ev ) {
115
- eventPublisher (ev )
116
- .publish (
121
+ public void onTaskFailed (TaskFailedEvent event ) {
122
+ publish (
123
+ event ,
124
+ ev ->
117
125
builder ()
118
126
.withData (
119
127
cloudEventData (
@@ -124,9 +132,10 @@ public void onTaskFailed(TaskFailedEvent ev) {
124
132
}
125
133
126
134
@ Override
127
- public void onWorkflowStarted (WorkflowStartedEvent ev ) {
128
- eventPublisher (ev )
129
- .publish (
135
+ public void onWorkflowStarted (WorkflowStartedEvent event ) {
136
+ publish (
137
+ event ,
138
+ ev ->
130
139
builder ()
131
140
.withData (
132
141
cloudEventData (
@@ -136,9 +145,10 @@ public void onWorkflowStarted(WorkflowStartedEvent ev) {
136
145
}
137
146
138
147
@ Override
139
- public void onWorkflowSuspended (WorkflowSuspendedEvent ev ) {
140
- eventPublisher (ev )
141
- .publish (
148
+ public void onWorkflowSuspended (WorkflowSuspendedEvent event ) {
149
+ publish (
150
+ event ,
151
+ ev ->
142
152
builder ()
143
153
.withData (
144
154
cloudEventData (
@@ -149,9 +159,10 @@ public void onWorkflowSuspended(WorkflowSuspendedEvent ev) {
149
159
}
150
160
151
161
@ Override
152
- public void onWorkflowCancelled (WorkflowCancelledEvent ev ) {
153
- eventPublisher (ev )
154
- .publish (
162
+ public void onWorkflowCancelled (WorkflowCancelledEvent event ) {
163
+ publish (
164
+ event ,
165
+ ev ->
155
166
builder ()
156
167
.withData (
157
168
cloudEventData (
@@ -162,9 +173,10 @@ public void onWorkflowCancelled(WorkflowCancelledEvent ev) {
162
173
}
163
174
164
175
@ Override
165
- public void onWorkflowResumed (WorkflowResumedEvent ev ) {
166
- eventPublisher (ev )
167
- .publish (
176
+ public void onWorkflowResumed (WorkflowResumedEvent event ) {
177
+ publish (
178
+ event ,
179
+ ev ->
168
180
builder ()
169
181
.withData (
170
182
cloudEventData (
@@ -174,9 +186,10 @@ public void onWorkflowResumed(WorkflowResumedEvent ev) {
174
186
}
175
187
176
188
@ Override
177
- public void onWorkflowCompleted (WorkflowCompletedEvent ev ) {
178
- eventPublisher (ev )
179
- .publish (
189
+ public void onWorkflowCompleted (WorkflowCompletedEvent event ) {
190
+ publish (
191
+ event ,
192
+ ev ->
180
193
builder ()
181
194
.withData (
182
195
cloudEventData (
@@ -187,9 +200,10 @@ public void onWorkflowCompleted(WorkflowCompletedEvent ev) {
187
200
}
188
201
189
202
@ Override
190
- public void onWorkflowFailed (WorkflowFailedEvent ev ) {
191
- eventPublisher (ev )
192
- .publish (
203
+ public void onWorkflowFailed (WorkflowFailedEvent event ) {
204
+ publish (
205
+ event ,
206
+ ev ->
193
207
builder ()
194
208
.withData (
195
209
cloudEventData (
@@ -199,29 +213,65 @@ public void onWorkflowFailed(WorkflowFailedEvent ev) {
199
213
.build ());
200
214
}
201
215
202
- protected abstract byte [] convert (WorkflowStartedCEData data );
216
+ protected byte [] convert (WorkflowStartedCEData data ) {
217
+ return convertToBytes (data );
218
+ }
203
219
204
- protected abstract byte [] convert (WorkflowSuspendedCEData data );
220
+ protected byte [] convert (WorkflowCompletedCEData data ) {
221
+ return convertToBytes (data );
222
+ }
205
223
206
- protected abstract byte [] convert (WorkflowResumedCEData data );
224
+ protected byte [] convert (TaskStartedCEData data ) {
225
+ return convertToBytes (data );
226
+ }
207
227
208
- protected abstract byte [] convert (WorkflowCancelledCEData data );
228
+ protected byte [] convert (TaskCompletedCEData data ) {
229
+ return convertToBytes (data );
230
+ }
209
231
210
- protected abstract byte [] convert (WorkflowCompletedCEData data );
232
+ protected byte [] convert (TaskFailedCEData data ) {
233
+ return convertToBytes (data );
234
+ }
211
235
212
- protected abstract byte [] convert (TaskStartedCEData data );
236
+ protected byte [] convert (WorkflowFailedCEData data ) {
237
+ return convertToBytes (data );
238
+ }
213
239
214
- protected abstract byte [] convert (TaskCompletedCEData data );
240
+ protected byte [] convert (WorkflowSuspendedCEData data ) {
241
+ return convertToBytes (data );
242
+ }
215
243
216
- protected abstract byte [] convert (TaskFailedCEData data );
244
+ protected byte [] convert (WorkflowResumedCEData data ) {
245
+ return convertToBytes (data );
246
+ }
217
247
218
- protected abstract byte [] convert (TaskSuspendedCEData data );
248
+ protected byte [] convert (WorkflowCancelledCEData data ) {
249
+ return convertToBytes (data );
250
+ }
219
251
220
- protected abstract byte [] convert (TaskCancelledCEData data );
252
+ protected byte [] convert (TaskSuspendedCEData data ) {
253
+ return convertToBytes (data );
254
+ }
255
+
256
+ protected byte [] convert (TaskCancelledCEData data ) {
257
+ return convertToBytes (data );
258
+ }
259
+
260
+ protected byte [] convert (TaskResumedCEData data ) {
261
+ return convertToBytes (data );
262
+ }
221
263
222
- protected abstract byte [] convert ( TaskResumedCEData data );
264
+ protected abstract < T > byte [] convertToBytes ( T data );
223
265
224
- protected abstract byte [] convert (WorkflowFailedCEData data );
266
+ /* By default, generated cloud events are published, if user has not disabled them at application level,
267
+ * using application event publisher. That might be changed if needed by children.
268
+ */
269
+ protected <T extends WorkflowEvent > void publish (T ev , Function <T , CloudEvent > ce ) {
270
+ WorkflowApplication application = ev .workflowContext ().definition ().application ();
271
+ if (application .isLifeCycleCEPublishingEnabled ()) {
272
+ application .eventPublisher ().publish (ce .apply (ev ));
273
+ }
274
+ }
225
275
226
276
private static <T > CloudEventData cloudEventData (T data , ToBytes <T > toBytes ) {
227
277
return PojoCloudEventData .wrap (data , toBytes );
@@ -246,10 +296,6 @@ private static Object output(WorkflowEvent ev) {
246
296
return from (ev .workflowContext ().instanceData ().output ());
247
297
}
248
298
249
- private static EventPublisher eventPublisher (WorkflowEvent ev ) {
250
- return ev .workflowContext ().definition ().application ().eventPublisher ();
251
- }
252
-
253
299
private static Object output (TaskEvent ev ) {
254
300
return from (ev .taskContext ().output ());
255
301
}
0 commit comments