Skip to content

Commit 5367003

Browse files
author
Tihomir Surdilovic
authored
Merge pull request #58 from tsurdilo/topstart
move start to workflow top level prop
2 parents 713d25f + 006a6f6 commit 5367003

File tree

115 files changed

+349
-210
lines changed

Some content is hidden

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

115 files changed

+349
-210
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,14 @@ Let's say you have a simple YAML based workflow definition:
109109
id: greeting
110110
version: '1.0'
111111
name: Greeting Workflow
112+
start: Greet
112113
description: Greet Someone
113114
functions:
114115
- name: greetingFunction
115116
operation: file://myapis/greetingapis.json#greeting
116117
states:
117118
- name: Greet
118119
type: operation
119-
start: true
120120
actionMode: sequential
121121
actions:
122122
- functionRef:

api/src/main/java/io/serverlessworkflow/api/deserializers/StartDefinitionDeserializer.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,15 @@ public Start deserialize(JsonParser jp,
5858

5959
Start start = new Start();
6060

61-
if (node.isBoolean()) {
61+
if (!node.isObject()) {
62+
start.setStateName(node.asText());
6263
start.setSchedule(null);
63-
return node.asBoolean() ? start : null;
64+
return start;
6465
} else {
66+
if(node.get("stateName") != null) {
67+
start.setStateName(node.get("stateName").asText());
68+
}
69+
6570
if(node.get("schedule") != null) {
6671
start.setSchedule(mapper.treeToValue(node.get("schedule"), Schedule.class));
6772
}

api/src/main/java/io/serverlessworkflow/api/interfaces/State.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ public interface State {
3434

3535
Type getType();
3636

37-
Start getStart();
38-
3937
End getEnd();
4038

4139
StateDataFilter getStateDataFilter();

api/src/main/java/io/serverlessworkflow/api/serializers/StartDefinitionSerializer.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,21 @@ public void serialize(Start start,
3939
SerializerProvider provider) throws IOException {
4040

4141
if(start != null) {
42-
if(start.getSchedule() == null) {
43-
gen.writeBoolean(true);
42+
if(start.getStateName() != null && start.getStateName().length() > 0
43+
&& start.getSchedule() == null) {
44+
gen.writeString(start.getStateName());
4445
} else {
4546
gen.writeStartObject();
46-
gen.writeObjectField("schedule",
47-
start.getSchedule());
47+
48+
if(start.getStateName() != null && start.getStateName().length() > 0) {
49+
gen.writeStringField("stateName", start.getStateName());
50+
}
51+
52+
if(start.getSchedule() != null) {
53+
gen.writeObjectField("schedule",
54+
start.getSchedule());
55+
}
56+
4857
gen.writeEndObject();
4958
}
5059
}

api/src/main/java/io/serverlessworkflow/api/serializers/WorkflowSerializer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ public void serialize(Workflow workflow,
7070
workflow.getVersion());
7171
}
7272

73+
if (workflow.getStart() != null) {
74+
gen.writeObjectField("start", workflow.getStart());
75+
}
76+
7377
if (workflow.getSchemaVersion() != null && !workflow.getSchemaVersion().isEmpty()) {
7478
gen.writeStringField("schemaVersion",
7579
workflow.getSchemaVersion());

api/src/main/resources/schema/start/start.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
"javaType": "io.serverlessworkflow.api.start.Start",
44
"description": "State start definition",
55
"properties": {
6+
"stateName": {
7+
"type": "string",
8+
"description": "Name of the starting workflow state",
9+
"minLength": 1
10+
},
611
"schedule": {
712
"description": "Define when the time/repeating intervals at which workflow instances can/should be started",
813
"$ref": "../schedule/schedule.json"

api/src/main/resources/schema/states/defaultstate.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@
3131
],
3232
"description": "State type"
3333
},
34-
"start": {
35-
"$ref": "../start/start.json",
36-
"description": "Defines this states start"
37-
},
3834
"end": {
3935
"$ref": "../end/end.json",
4036
"description": "Defines this states end"

api/src/main/resources/schema/workflow.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
"type": "string",
2828
"description": "Workflow version"
2929
},
30+
"start": {
31+
"$ref": "start/start.json",
32+
"description": "Defines workflow start"
33+
},
3034
"schemaVersion": {
3135
"type": "string",
3236
"description": "Serverless Workflow schema version"

api/src/test/java/io/serverlessworkflow/api/test/MarkupToWorkflowTest.java

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -351,19 +351,19 @@ public void testSimplifiedSchedule(String workflowLocation) {
351351
Workflow workflow = Workflow.fromSource(WorkflowTestUtils.readWorkflowFile(workflowLocation));
352352

353353
assertNotNull(workflow);
354+
355+
assertNotNull(workflow.getStart());
356+
assertNotNull(workflow.getStart().getSchedule());
357+
358+
assertEquals("2020-03-20T09:00:00Z/2020-03-20T15:00:00Z", workflow.getStart().getSchedule().getInterval());
359+
354360
assertNotNull(workflow.getId());
355361
assertNotNull(workflow.getName());
356362
assertNotNull(workflow.getStates());
357363

358364
assertNotNull(workflow.getStates());
359365
assertTrue(workflow.getStates().size() == 1);
360-
assertTrue(workflow.getStates().get(0) instanceof EventState);
361366

362-
EventState eventState = (EventState) workflow.getStates().get(0);
363-
assertNotNull(eventState.getStart());
364-
assertNotNull(eventState.getStart().getSchedule());
365-
366-
assertEquals("2020-03-20T09:00:00Z/2020-03-20T15:00:00Z", eventState.getStart().getSchedule().getInterval());
367367
}
368368

369369
@ParameterizedTest
@@ -372,19 +372,18 @@ public void testSimplifiedCron(String workflowLocation) {
372372
Workflow workflow = Workflow.fromSource(WorkflowTestUtils.readWorkflowFile(workflowLocation));
373373

374374
assertNotNull(workflow);
375+
376+
assertNotNull(workflow.getStart());
377+
assertNotNull(workflow.getStart().getSchedule());
378+
379+
assertEquals("0 0/15 * * * ?", workflow.getStart().getSchedule().getCron().getExpression());
380+
375381
assertNotNull(workflow.getId());
376382
assertNotNull(workflow.getName());
377383
assertNotNull(workflow.getStates());
378384

379385
assertNotNull(workflow.getStates());
380386
assertTrue(workflow.getStates().size() == 2);
381-
assertTrue(workflow.getStates().get(0) instanceof OperationState);
382-
383-
OperationState operationState = (OperationState) workflow.getStates().get(0);
384-
assertNotNull(operationState.getStart());
385-
assertNotNull(operationState.getStart().getSchedule());
386-
387-
assertEquals("0 0/15 * * * ?", operationState.getStart().getSchedule().getCron().getExpression());
388387
}
389388

390389
@ParameterizedTest
@@ -400,4 +399,38 @@ public void testExpressionLang(String workflowLocation) {
400399
assertNotNull(workflow.getExpressionLang());
401400
assertEquals("abc", workflow.getExpressionLang());
402401
}
402+
403+
@ParameterizedTest
404+
@ValueSource(strings = {"/features/shortstart.json", "/features/shortstart.yml"})
405+
public void testShortStart(String workflowLocation) {
406+
Workflow workflow = Workflow.fromSource(WorkflowTestUtils.readWorkflowFile(workflowLocation));
407+
408+
assertNotNull(workflow);
409+
assertNotNull(workflow.getId());
410+
assertNotNull(workflow.getName());
411+
assertNotNull(workflow.getStates());
412+
413+
assertNotNull(workflow.getStart());
414+
assertEquals("TestFunctionRefs", workflow.getStart().getStateName());
415+
assertNull(workflow.getStart().getSchedule());
416+
417+
}
418+
419+
@ParameterizedTest
420+
@ValueSource(strings = {"/features/longstart.json", "/features/longstart.yml"})
421+
public void testLongStart(String workflowLocation) {
422+
Workflow workflow = Workflow.fromSource(WorkflowTestUtils.readWorkflowFile(workflowLocation));
423+
424+
assertNotNull(workflow);
425+
assertNotNull(workflow.getId());
426+
assertNotNull(workflow.getName());
427+
assertNotNull(workflow.getStates());
428+
429+
assertNotNull(workflow.getStart());
430+
assertEquals("TestFunctionRefs", workflow.getStart().getStateName());
431+
assertNotNull(workflow.getStart().getSchedule());
432+
assertNotNull(workflow.getStart().getSchedule().getCron());
433+
assertEquals("0 0/15 * * * ?", workflow.getStart().getSchedule().getCron().getExpression());
434+
435+
}
403436
}

api/src/test/java/io/serverlessworkflow/api/test/WorkflowToMarkupTest.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,11 @@ public class WorkflowToMarkupTest {
3939
public void testSingleState() {
4040

4141
Workflow workflow = new Workflow().withId("test-workflow").withName("test-workflow-name").withVersion("1.0")
42+
.withStart(new Start().withSchedule(
43+
new Schedule().withInterval("PT1S")
44+
))
4245
.withStates(Arrays.asList(
4346
new DelayState().withName("delayState").withType(DELAY)
44-
.withStart(
45-
new Start().withSchedule(
46-
new Schedule().withInterval("PT1S")
47-
)
48-
)
4947
.withEnd(
5048
new End().withTerminate(true).withCompensate(true)
5149
.withProduceEvents(Arrays.asList(
@@ -57,10 +55,10 @@ public void testSingleState() {
5755
);
5856

5957
assertNotNull(workflow);
58+
assertNotNull(workflow.getStart());
6059
assertEquals(1, workflow.getStates().size());
6160
State state = workflow.getStates().get(0);
6261
assertTrue(state instanceof DelayState);
63-
assertNotNull(state.getStart());
6462
assertNotNull(state.getEnd());
6563

6664
assertNotNull(Workflow.toJson(workflow));
@@ -71,15 +69,15 @@ public void testSingleState() {
7169
public void testSingleFunction() {
7270

7371
Workflow workflow = new Workflow().withId("test-workflow").withName("test-workflow-name").withVersion("1.0")
72+
.withStart(
73+
new Start()
74+
)
7475
.withFunctions(new Functions(Arrays.asList(
7576
new FunctionDefinition().withName("testFunction")
7677
.withOperation("testSwaggerDef#testOperationId")))
7778
)
7879
.withStates(Arrays.asList(
7980
new DelayState().withName("delayState").withType(DELAY)
80-
.withStart(
81-
new Start()
82-
)
8381
.withEnd(
8482
new End()
8583
)
@@ -88,6 +86,7 @@ public void testSingleFunction() {
8886
);
8987

9088
assertNotNull(workflow);
89+
assertNotNull(workflow.getStart());
9190
assertEquals(1, workflow.getStates().size());
9291
State state = workflow.getStates().get(0);
9392
assertTrue(state instanceof DelayState);
@@ -103,6 +102,9 @@ public void testSingleFunction() {
103102
public void testSingleEvent() {
104103

105104
Workflow workflow = new Workflow().withId("test-workflow").withName("test-workflow-name").withVersion("1.0")
105+
.withStart(
106+
new Start()
107+
)
106108
.withEvents(new Events(Arrays.asList(
107109
new EventDefinition().withName("testEvent").withSource("testSource").withType("testType")
108110
.withKind(EventDefinition.Kind.PRODUCED)))
@@ -113,9 +115,6 @@ public void testSingleEvent() {
113115
)
114116
.withStates(Arrays.asList(
115117
new DelayState().withName("delayState").withType(DELAY)
116-
.withStart(
117-
new Start()
118-
)
119118
.withEnd(
120119
new End()
121120
)
@@ -124,6 +123,7 @@ public void testSingleEvent() {
124123
);
125124

126125
assertNotNull(workflow);
126+
assertNotNull(workflow.getStart());
127127
assertEquals(1, workflow.getStates().size());
128128
State state = workflow.getStates().get(0);
129129
assertTrue(state instanceof DelayState);

0 commit comments

Comments
 (0)