From ab65e915d3cb9d9ae552481e2d3e30cd7258a03f Mon Sep 17 00:00:00 2001 From: Tihomir Surdilovic Date: Sat, 4 Sep 2021 16:26:12 -0400 Subject: [PATCH] Delay/Sleep state updates Signed-off-by: Tihomir Surdilovic --- .../api/deserializers/StateDeserializer.java | 4 ++-- .../api/mapper/WorkflowModule.java | 2 +- ...ializer.java => SleepStateSerializer.java} | 16 +++++++------- .../resources/schema/states/defaultstate.json | 2 +- .../{delaystate.json => sleepstate.json} | 8 +++---- api/src/main/resources/schema/workflow.json | 4 ++-- .../api/test/WorkflowToMarkupTest.java | 22 +++++++++---------- .../test/resources/examples/booklending.json | 6 ++--- .../test/resources/examples/booklending.yml | 4 ++-- .../resources/examples/jobmonitoring.json | 4 ++-- .../test/resources/examples/jobmonitoring.yml | 4 ++-- .../diagram/model/WorkflowDiagramModel.java | 8 +++---- .../templates/plantuml/workflow-template.txt | 4 ++-- .../test/resources/examples/booklending.json | 4 ++-- .../test/resources/examples/booklending.yml | 4 ++-- .../resources/examples/jobmonitoring.json | 4 ++-- .../test/resources/examples/jobmonitoring.yml | 4 ++-- .../resources/examples/singleswitchstate.json | 4 ++-- .../resources/examples/singleswitchstate.yml | 4 ++-- .../singleswitchstateeventconditions.json | 4 ++-- .../singleswitchstateeventconditions.yml | 4 ++-- .../validation/WorkflowValidatorImpl.java | 8 +++---- .../test/WorkflowValidationTest.java | 8 +++---- 23 files changed, 68 insertions(+), 68 deletions(-) rename api/src/main/java/io/serverlessworkflow/api/serializers/{DelayStateSerializer.java => SleepStateSerializer.java} (76%) rename api/src/main/resources/schema/states/{delaystate.json => sleepstate.json} (76%) diff --git a/api/src/main/java/io/serverlessworkflow/api/deserializers/StateDeserializer.java b/api/src/main/java/io/serverlessworkflow/api/deserializers/StateDeserializer.java index a0c0cbc8..8f739d2f 100644 --- a/api/src/main/java/io/serverlessworkflow/api/deserializers/StateDeserializer.java +++ b/api/src/main/java/io/serverlessworkflow/api/deserializers/StateDeserializer.java @@ -80,9 +80,9 @@ public State deserialize(JsonParser jp, case SWITCH: return mapper.treeToValue(node, SwitchState.class); - case DELAY: + case SLEEP: return mapper.treeToValue(node, - DelayState.class); + SleepState.class); case PARALLEL: return mapper.treeToValue(node, ParallelState.class); diff --git a/api/src/main/java/io/serverlessworkflow/api/mapper/WorkflowModule.java b/api/src/main/java/io/serverlessworkflow/api/mapper/WorkflowModule.java index d5819068..890fd824 100644 --- a/api/src/main/java/io/serverlessworkflow/api/mapper/WorkflowModule.java +++ b/api/src/main/java/io/serverlessworkflow/api/mapper/WorkflowModule.java @@ -63,7 +63,7 @@ public WorkflowModule(WorkflowPropertySource workflowPropertySource) { private void addDefaultSerializers() { addSerializer(new WorkflowSerializer()); addSerializer(new EventStateSerializer()); - addSerializer(new DelayStateSerializer()); + addSerializer(new SleepStateSerializer()); addSerializer(new OperationStateSerializer()); addSerializer(new ParallelStateSerializer()); addSerializer(new SwitchStateSerializer()); diff --git a/api/src/main/java/io/serverlessworkflow/api/serializers/DelayStateSerializer.java b/api/src/main/java/io/serverlessworkflow/api/serializers/SleepStateSerializer.java similarity index 76% rename from api/src/main/java/io/serverlessworkflow/api/serializers/DelayStateSerializer.java rename to api/src/main/java/io/serverlessworkflow/api/serializers/SleepStateSerializer.java index 02660967..513e7189 100644 --- a/api/src/main/java/io/serverlessworkflow/api/serializers/DelayStateSerializer.java +++ b/api/src/main/java/io/serverlessworkflow/api/serializers/SleepStateSerializer.java @@ -21,31 +21,31 @@ import com.fasterxml.jackson.databind.ser.std.StdSerializer; import com.fasterxml.jackson.databind.type.TypeFactory; import io.serverlessworkflow.api.states.DefaultState; -import io.serverlessworkflow.api.states.DelayState; +import io.serverlessworkflow.api.states.SleepState; import java.io.IOException; -public class DelayStateSerializer extends StdSerializer { +public class SleepStateSerializer extends StdSerializer { - public DelayStateSerializer() { - this(DelayState.class); + public SleepStateSerializer() { + this(SleepState.class); } - protected DelayStateSerializer(Class t) { + protected SleepStateSerializer(Class t) { super(t); } @Override - public void serialize(DelayState delayState, + public void serialize(SleepState delayState, JsonGenerator gen, SerializerProvider provider) throws IOException { // set defaults for delay state - delayState.setType(DefaultState.Type.DELAY); + delayState.setType(DefaultState.Type.SLEEP); // serialize after setting default bean values... BeanSerializerFactory.instance.createSerializer(provider, - TypeFactory.defaultInstance().constructType(DelayState.class)).serialize(delayState, + TypeFactory.defaultInstance().constructType(SleepState.class)).serialize(delayState, gen, provider); } diff --git a/api/src/main/resources/schema/states/defaultstate.json b/api/src/main/resources/schema/states/defaultstate.json index 9b76dd4b..9e502276 100644 --- a/api/src/main/resources/schema/states/defaultstate.json +++ b/api/src/main/resources/schema/states/defaultstate.json @@ -22,7 +22,7 @@ "event", "operation", "switch", - "delay", + "sleep", "parallel", "subflow", "inject", diff --git a/api/src/main/resources/schema/states/delaystate.json b/api/src/main/resources/schema/states/sleepstate.json similarity index 76% rename from api/src/main/resources/schema/states/delaystate.json rename to api/src/main/resources/schema/states/sleepstate.json index 3d0eab4c..d0d3ade7 100644 --- a/api/src/main/resources/schema/states/delaystate.json +++ b/api/src/main/resources/schema/states/sleepstate.json @@ -1,6 +1,6 @@ { "type": "object", - "javaType": "io.serverlessworkflow.api.states.DelayState", + "javaType": "io.serverlessworkflow.api.states.SleepState", "javaInterfaces": [ "io.serverlessworkflow.api.interfaces.State" ], @@ -9,9 +9,9 @@ "$ref": "defaultstate.json" }, "properties": { - "timeDelay": { + "duration": { "type": "string", - "description": "Amount of time (ISO 8601 format) to delay" + "description": "Duration (ISO 8601 duration format) to sleep" }, "usedForCompensation": { "type": "boolean", @@ -20,6 +20,6 @@ } }, "required": [ - "timeDelay" + "duration" ] } \ No newline at end of file diff --git a/api/src/main/resources/schema/workflow.json b/api/src/main/resources/schema/workflow.json index 7e36ebfc..15b3fbb1 100644 --- a/api/src/main/resources/schema/workflow.json +++ b/api/src/main/resources/schema/workflow.json @@ -92,8 +92,8 @@ "existingJavaType": "io.serverlessworkflow.api.interfaces.State", "anyOf": [ { - "title": "Delay State", - "$ref": "states/delaystate.json" + "title": "Sleep State", + "$ref": "states/sleepstate.json" }, { "title": "Event State", diff --git a/api/src/test/java/io/serverlessworkflow/api/test/WorkflowToMarkupTest.java b/api/src/test/java/io/serverlessworkflow/api/test/WorkflowToMarkupTest.java index 170ff57b..0c86f2fe 100644 --- a/api/src/test/java/io/serverlessworkflow/api/test/WorkflowToMarkupTest.java +++ b/api/src/test/java/io/serverlessworkflow/api/test/WorkflowToMarkupTest.java @@ -25,14 +25,14 @@ import io.serverlessworkflow.api.produce.ProduceEvent; import io.serverlessworkflow.api.schedule.Schedule; import io.serverlessworkflow.api.start.Start; -import io.serverlessworkflow.api.states.DelayState; +import io.serverlessworkflow.api.states.SleepState; import io.serverlessworkflow.api.workflow.Events; import io.serverlessworkflow.api.workflow.Functions; import org.junit.jupiter.api.Test; import java.util.Arrays; -import static io.serverlessworkflow.api.states.DefaultState.Type.DELAY; +import static io.serverlessworkflow.api.states.DefaultState.Type.SLEEP; import static org.junit.jupiter.api.Assertions.*; public class WorkflowToMarkupTest { @@ -44,14 +44,14 @@ public void testSingleState() { new Schedule().withInterval("PT1S") )) .withStates(Arrays.asList( - new DelayState().withName("delayState").withType(DELAY) + new SleepState().withName("sleepState").withType(SLEEP) .withEnd( new End().withTerminate(true).withCompensate(true) .withProduceEvents(Arrays.asList( new ProduceEvent().withEventRef("someEvent") )) ) - .withTimeDelay("PT1M") + .withDuration("PT1M") ) ); @@ -59,7 +59,7 @@ public void testSingleState() { assertNotNull(workflow.getStart()); assertEquals(1, workflow.getStates().size()); State state = workflow.getStates().get(0); - assertTrue(state instanceof DelayState); + assertTrue(state instanceof SleepState); assertNotNull(state.getEnd()); assertNotNull(Workflow.toJson(workflow)); @@ -78,11 +78,11 @@ public void testSingleFunction() { .withOperation("testSwaggerDef#testOperationId"))) ) .withStates(Arrays.asList( - new DelayState().withName("delayState").withType(DELAY) + new SleepState().withName("delayState").withType(SLEEP) .withEnd( new End() ) - .withTimeDelay("PT1M") + .withDuration("PT1M") ) ); @@ -90,7 +90,7 @@ public void testSingleFunction() { assertNotNull(workflow.getStart()); assertEquals(1, workflow.getStates().size()); State state = workflow.getStates().get(0); - assertTrue(state instanceof DelayState); + assertTrue(state instanceof SleepState); assertNotNull(workflow.getFunctions()); assertEquals(1, workflow.getFunctions().getFunctionDefs().size()); assertEquals("testFunction", workflow.getFunctions().getFunctionDefs().get(0).getName()); @@ -115,11 +115,11 @@ public void testSingleEvent() { .withOperation("testSwaggerDef#testOperationId"))) ) .withStates(Arrays.asList( - new DelayState().withName("delayState").withType(DELAY) + new SleepState().withName("delayState").withType(SLEEP) .withEnd( new End() ) - .withTimeDelay("PT1M") + .withDuration("PT1M") ) ); @@ -127,7 +127,7 @@ public void testSingleEvent() { assertNotNull(workflow.getStart()); assertEquals(1, workflow.getStates().size()); State state = workflow.getStates().get(0); - assertTrue(state instanceof DelayState); + assertTrue(state instanceof SleepState); assertNotNull(workflow.getFunctions()); assertEquals(1, workflow.getFunctions().getFunctionDefs().size()); assertEquals("testFunction", workflow.getFunctions().getFunctionDefs().get(0).getName()); diff --git a/api/src/test/resources/examples/booklending.json b/api/src/test/resources/examples/booklending.json index df673392..568ec525 100644 --- a/api/src/test/resources/examples/booklending.json +++ b/api/src/test/resources/examples/booklending.json @@ -95,9 +95,9 @@ "transition": "Wait two weeks" }, { - "name": "Wait two weeks", - "type": "delay", - "timeDelay": "P2W", + "name": "Sleep two weeks", + "type": "sleep", + "duration": "P2W", "transition": "Get Book Status" }, { diff --git a/api/src/test/resources/examples/booklending.yml b/api/src/test/resources/examples/booklending.yml index e1642d84..d76b60ee 100644 --- a/api/src/test/resources/examples/booklending.yml +++ b/api/src/test/resources/examples/booklending.yml @@ -55,8 +55,8 @@ states: lender: "${ .lender }" transition: Wait two weeks - name: Wait two weeks - type: delay - timeDelay: P2W + type: sleep + duration: P2W transition: Get Book Status - name: Check Out Book type: operation diff --git a/api/src/test/resources/examples/jobmonitoring.json b/api/src/test/resources/examples/jobmonitoring.json index d70d4036..6951bce0 100644 --- a/api/src/test/resources/examples/jobmonitoring.json +++ b/api/src/test/resources/examples/jobmonitoring.json @@ -64,8 +64,8 @@ }, { "name": "WaitForCompletion", - "type": "delay", - "timeDelay": "PT5S", + "type": "sleep", + "duration": "PT5S", "transition": "GetJobStatus" }, { diff --git a/api/src/test/resources/examples/jobmonitoring.yml b/api/src/test/resources/examples/jobmonitoring.yml index c51097df..4e0fcfc0 100644 --- a/api/src/test/resources/examples/jobmonitoring.yml +++ b/api/src/test/resources/examples/jobmonitoring.yml @@ -36,8 +36,8 @@ states: - subFlowRef: handleJobSubmissionErrorWorkflow end: true - name: WaitForCompletion - type: delay - timeDelay: PT5S + type: sleep + duration: PT5S transition: GetJobStatus - name: GetJobStatus type: operation diff --git a/diagram/src/main/java/io/serverlessworkflow/diagram/model/WorkflowDiagramModel.java b/diagram/src/main/java/io/serverlessworkflow/diagram/model/WorkflowDiagramModel.java index 46712974..a32408d6 100644 --- a/diagram/src/main/java/io/serverlessworkflow/diagram/model/WorkflowDiagramModel.java +++ b/diagram/src/main/java/io/serverlessworkflow/diagram/model/WorkflowDiagramModel.java @@ -304,11 +304,11 @@ private void inspectStatesInfo(Workflow workflow) { } - if (state instanceof DelayState) { - DelayState delayState = (DelayState) state; + if (state instanceof SleepState) { + SleepState sleepState = (SleepState) state; - modelState.addInfo("Type: Delay State"); - modelState.addInfo("Delay: " + delayState.getTimeDelay()); + modelState.addInfo("Type: Sleep State"); + modelState.addInfo("Duration: " + sleepState.getDuration()); } if (state instanceof ParallelState) { diff --git a/diagram/src/main/resources/templates/plantuml/workflow-template.txt b/diagram/src/main/resources/templates/plantuml/workflow-template.txt index 2999a4a2..daf5fd6c 100644 --- a/diagram/src/main/resources/templates/plantuml/workflow-template.txt +++ b/diagram/src/main/resources/templates/plantuml/workflow-template.txt @@ -13,7 +13,7 @@ skinparam state { BorderColor<< event >> #7fe5f0 BorderColor<< operation >> #bada55 BorderColor<< switch >> #92a0f2 - BorderColor<< delay >> #b83b5e + BorderColor<< sleep >> #b83b5e BorderColor<< parallel >> #6a2c70 BorderColor<< inject >> #1e5f74 BorderColor<< foreach >> #931a25 @@ -38,7 +38,7 @@ state "[(${diagram.title})]" as workflow << workflow >> { [# th:if="${diagram.showLegend}" ] legend center State Types and Border Colors: -| Event | Operation | Switch | Delay | Parallel | Inject | ForEach | CallBack | +| Event | Operation | Switch | Sleep | Parallel | Inject | ForEach | CallBack | |<#7fe5f0>|<#bada55>|<#92a0f2>|<#b83b5e>|<#6a2c70>|<#1e5f74>|<#931a25>|<#ffcb8e>| endlegend [/] diff --git a/diagram/src/test/resources/examples/booklending.json b/diagram/src/test/resources/examples/booklending.json index 84a3cb09..88e93bb4 100644 --- a/diagram/src/test/resources/examples/booklending.json +++ b/diagram/src/test/resources/examples/booklending.json @@ -96,8 +96,8 @@ }, { "name": "Wait two weeks", - "type": "delay", - "timeDelay": "P2W", + "type": "sleep", + "duration": "P2W", "transition": "Get Book Status" }, { diff --git a/diagram/src/test/resources/examples/booklending.yml b/diagram/src/test/resources/examples/booklending.yml index 664cbb99..f146d6d4 100644 --- a/diagram/src/test/resources/examples/booklending.yml +++ b/diagram/src/test/resources/examples/booklending.yml @@ -55,8 +55,8 @@ states: lender: "${ .lender }" transition: Wait two weeks - name: Wait two weeks - type: delay - timeDelay: P2W + type: sleep + duration: P2W transition: Get Book Status - name: Check Out Book type: operation diff --git a/diagram/src/test/resources/examples/jobmonitoring.json b/diagram/src/test/resources/examples/jobmonitoring.json index d70d4036..6951bce0 100644 --- a/diagram/src/test/resources/examples/jobmonitoring.json +++ b/diagram/src/test/resources/examples/jobmonitoring.json @@ -64,8 +64,8 @@ }, { "name": "WaitForCompletion", - "type": "delay", - "timeDelay": "PT5S", + "type": "sleep", + "duration": "PT5S", "transition": "GetJobStatus" }, { diff --git a/diagram/src/test/resources/examples/jobmonitoring.yml b/diagram/src/test/resources/examples/jobmonitoring.yml index c51097df..4e0fcfc0 100644 --- a/diagram/src/test/resources/examples/jobmonitoring.yml +++ b/diagram/src/test/resources/examples/jobmonitoring.yml @@ -36,8 +36,8 @@ states: - subFlowRef: handleJobSubmissionErrorWorkflow end: true - name: WaitForCompletion - type: delay - timeDelay: PT5S + type: sleep + duration: PT5S transition: GetJobStatus - name: GetJobStatus type: operation diff --git a/diagram/src/test/resources/examples/singleswitchstate.json b/diagram/src/test/resources/examples/singleswitchstate.json index ffbfdac1..05ba6650 100644 --- a/diagram/src/test/resources/examples/singleswitchstate.json +++ b/diagram/src/test/resources/examples/singleswitchstate.json @@ -34,8 +34,8 @@ }, { "name": "FromFirstCondition", - "type": "delay", - "timeDelay": "PT2M", + "type": "sleep", + "duration": "PT2M", "end": true }, { diff --git a/diagram/src/test/resources/examples/singleswitchstate.yml b/diagram/src/test/resources/examples/singleswitchstate.yml index 31054eb8..a8279467 100644 --- a/diagram/src/test/resources/examples/singleswitchstate.yml +++ b/diagram/src/test/resources/examples/singleswitchstate.yml @@ -22,8 +22,8 @@ states: condition: '' end: true - name: FromFirstCondition - type: delay - timeDelay: PT2M + type: sleep + duration: PT2M end: true - name: FromSecondCondition type: inject diff --git a/diagram/src/test/resources/examples/singleswitchstateeventconditions.json b/diagram/src/test/resources/examples/singleswitchstateeventconditions.json index 49e05c73..356be076 100644 --- a/diagram/src/test/resources/examples/singleswitchstateeventconditions.json +++ b/diagram/src/test/resources/examples/singleswitchstateeventconditions.json @@ -34,8 +34,8 @@ }, { "name": "FromFirstCondition", - "type": "delay", - "timeDelay": "PT2M", + "type": "sleep", + "duration": "PT2M", "end": true }, { diff --git a/diagram/src/test/resources/examples/singleswitchstateeventconditions.yml b/diagram/src/test/resources/examples/singleswitchstateeventconditions.yml index 2464ae3c..87762649 100644 --- a/diagram/src/test/resources/examples/singleswitchstateeventconditions.yml +++ b/diagram/src/test/resources/examples/singleswitchstateeventconditions.yml @@ -22,8 +22,8 @@ states: eventRef: fourthEvent end: true - name: FromFirstCondition - type: delay - timeDelay: PT2M + type: sleep + duration: PT2M end: true - name: FromSecondCondition type: inject diff --git a/validation/src/main/java/io/serverlessworkflow/validation/WorkflowValidatorImpl.java b/validation/src/main/java/io/serverlessworkflow/validation/WorkflowValidatorImpl.java index 5148b283..29cb3ed3 100644 --- a/validation/src/main/java/io/serverlessworkflow/validation/WorkflowValidatorImpl.java +++ b/validation/src/main/java/io/serverlessworkflow/validation/WorkflowValidatorImpl.java @@ -298,10 +298,10 @@ public List validate() { } } - if (s instanceof DelayState) { - DelayState delayState = (DelayState) s; - if (delayState.getTimeDelay() == null || delayState.getTimeDelay().length() < 1) { - addValidationError("Delay state should have a non-empty time delay", + if (s instanceof SleepState) { + SleepState sleepState = (SleepState) s; + if (sleepState.getDuration() == null || sleepState.getDuration().length() < 1) { + addValidationError("Sleep state should have a non-empty time delay", ValidationError.WORKFLOW_VALIDATION); } } diff --git a/validation/src/test/java/io/serverlessworkflow/validation/test/WorkflowValidationTest.java b/validation/src/test/java/io/serverlessworkflow/validation/test/WorkflowValidationTest.java index 3c1947e8..299d7ded 100644 --- a/validation/src/test/java/io/serverlessworkflow/validation/test/WorkflowValidationTest.java +++ b/validation/src/test/java/io/serverlessworkflow/validation/test/WorkflowValidationTest.java @@ -19,7 +19,7 @@ import io.serverlessworkflow.api.end.End; import io.serverlessworkflow.api.interfaces.WorkflowValidator; import io.serverlessworkflow.api.start.Start; -import io.serverlessworkflow.api.states.DelayState; +import io.serverlessworkflow.api.states.SleepState; import io.serverlessworkflow.api.validation.ValidationError; import io.serverlessworkflow.validation.WorkflowValidatorImpl; import org.junit.jupiter.api.Assertions; @@ -28,7 +28,7 @@ import java.util.Arrays; import java.util.List; -import static io.serverlessworkflow.api.states.DefaultState.Type.DELAY; +import static io.serverlessworkflow.api.states.DefaultState.Type.SLEEP; public class WorkflowValidationTest { @@ -58,11 +58,11 @@ public void testFromIncompleteWorkflow() { new Start() ) .withStates(Arrays.asList( - new DelayState().withName("delayState").withType(DELAY) + new SleepState().withName("sleepState").withType(SLEEP) .withEnd( new End() ) - .withTimeDelay("PT1M") + .withDuration("PT1M") ) );