diff --git a/src/main/java/io/iworkflow/core/StateDecision.java b/src/main/java/io/iworkflow/core/StateDecision.java index 950af713..c282ba67 100644 --- a/src/main/java/io/iworkflow/core/StateDecision.java +++ b/src/main/java/io/iworkflow/core/StateDecision.java @@ -64,19 +64,19 @@ public static StateDecision forceFailWorkflow() { } - public static StateDecision forceCompleteIfInternalChannelEmptyOrElse(final String internalChannelName, final Class orElseStateClass) { + public static StateDecision forceCompleteIfInternalChannelEmptyOrElse(final String internalChannelName, final Class> orElseStateClass) { return forceCompleteIfInternalChannelEmptyOrElse(internalChannelName, orElseStateClass, null); } - public static StateDecision forceCompleteIfInternalChannelEmptyOrElse(final String internalChannelName, final Class orElseStateClass, final Object stateInput) { + public static StateDecision forceCompleteIfInternalChannelEmptyOrElse(final String internalChannelName, final Class> orElseStateClass, final I stateInput) { return forceCompleteIfInternalChannelEmptyOrElse(null, internalChannelName, StateMovement.create(orElseStateClass, stateInput)); } - public static StateDecision forceCompleteIfInternalChannelEmptyOrElse(final Object completionOutput, final String internalChannelName, final Class orElseStateClass) { + public static StateDecision forceCompleteIfInternalChannelEmptyOrElse(final Object completionOutput, final String internalChannelName, final Class> orElseStateClass) { return forceCompleteIfInternalChannelEmptyOrElse(completionOutput, internalChannelName, orElseStateClass, null); } - public static StateDecision forceCompleteIfInternalChannelEmptyOrElse(final Object completionOutput, final String internalChannelName, final Class orElseStateClass, final Object stateInput) { + public static StateDecision forceCompleteIfInternalChannelEmptyOrElse(final Object completionOutput, final String internalChannelName, final Class> orElseStateClass, final I stateInput) { return forceCompleteIfInternalChannelEmptyOrElse(completionOutput, internalChannelName, StateMovement.create(orElseStateClass, stateInput)); } @@ -107,19 +107,19 @@ public static StateDecision forceCompleteIfInternalChannelEmptyOrElse(final Obje .build(); } - public static StateDecision forceCompleteIfSignalChannelEmptyOrElse(final String signalChannelName, final Class orElseStateClass) { + public static StateDecision forceCompleteIfSignalChannelEmptyOrElse(final String signalChannelName, final Class> orElseStateClass) { return forceCompleteIfSignalChannelEmptyOrElse(signalChannelName, orElseStateClass, null); } - public static StateDecision forceCompleteIfSignalChannelEmptyOrElse(final String signalChannelName, final Class orElseStateClass, final Object stateInput) { + public static StateDecision forceCompleteIfSignalChannelEmptyOrElse(final String signalChannelName, final Class> orElseStateClass, final I stateInput) { return forceCompleteIfSignalChannelEmptyOrElse(null, signalChannelName, StateMovement.create(orElseStateClass, stateInput)); } - public static StateDecision forceCompleteIfSignalChannelEmptyOrElse(final Object completionOutput, final String signalChannelName, final Class orElseStateClass) { + public static StateDecision forceCompleteIfSignalChannelEmptyOrElse(final Object completionOutput, final String signalChannelName, final Class> orElseStateClass) { return forceCompleteIfSignalChannelEmptyOrElse(completionOutput, signalChannelName, orElseStateClass, null); } - public static StateDecision forceCompleteIfSignalChannelEmptyOrElse(final Object completionOutput, final String signalChannelName, final Class orElseStateClass, final Object stateInput) { + public static StateDecision forceCompleteIfSignalChannelEmptyOrElse(final Object completionOutput, final String signalChannelName, final Class> orElseStateClass, final I stateInput) { return forceCompleteIfSignalChannelEmptyOrElse(completionOutput, signalChannelName, StateMovement.create(orElseStateClass, stateInput)); } @@ -147,43 +147,45 @@ public static StateDecision forceCompleteIfSignalChannelEmptyOrElse(final Object } /** - * - * @param stateClass required - * @param stateInput optional, can be null - * @param stateOptionsOverride optional, can be null. It is used to override the defined one in the State class + * @param Class type of the WorkflowState input + * @param stateClass required + * @param stateInput optional, can be null + * @param stateOptionsOverride optional, can be null. It is used to override the defined one in the State class * @return state decision */ - public static StateDecision singleNextState(final Class stateClass, final Object stateInput, final WorkflowStateOptions stateOptionsOverride) { + public static StateDecision singleNextState(final Class> stateClass, final I stateInput, final WorkflowStateOptions stateOptionsOverride) { return singleNextState(stateClass.getSimpleName(), stateInput, stateOptionsOverride); } /** - * - * @param stateClass required - * @param stateInput optional, can be null + * @param Class type of the WorkflowState input + * @param stateClass required + * @param stateInput optional, can be null * @return state decision */ - public static StateDecision singleNextState(final Class stateClass, final Object stateInput) { + public static StateDecision singleNextState(final Class> stateClass, final I stateInput) { return singleNextState(stateClass, stateInput, null); } /** - * - * @param stateClass required + * @param Class type of the WorkflowState input + * @param stateClass required * @return state decision */ - public static StateDecision singleNextState(final Class stateClass) { + public static StateDecision singleNextState(final Class> stateClass) { return singleNextState(stateClass, null, null); } /** * use the other one with WorkflowState class param if the stateId is provided by default, to make your code cleaner - * @param stateId required. StateId of next state - * @param stateInput optional, can be null. Input for next state - * @param stateOptionsOverride optional, can be null. It is used to override the defined one in the State class + * + * @param Class type of the WorkflowState input + * @param stateId required. StateId of next state + * @param stateInput optional, can be null. Input for next state + * @param stateOptionsOverride optional, can be null. It is used to override the defined one in the State class * @return state decision */ - public static StateDecision singleNextState(final String stateId, final Object stateInput, final WorkflowStateOptions stateOptionsOverride) { + public static StateDecision singleNextState(final String stateId, final I stateInput, final WorkflowStateOptions stateOptionsOverride) { return ImmutableStateDecision.builder().nextStates(Arrays.asList( StateMovement.create(stateId, stateInput, stateOptionsOverride) )).build(); @@ -191,7 +193,8 @@ public static StateDecision singleNextState(final String stateId, final Object s /** * use the other one with WorkflowState class param if the stateId is provided by default, to make your code cleaner - * @param stateId stateId of next state + * + * @param stateId stateId of next state * @return state decision */ public static StateDecision singleNextState(final String stateId) { @@ -199,7 +202,6 @@ public static StateDecision singleNextState(final String stateId) { } /** - * * @param stateMovements required * @return state decision */ @@ -208,7 +210,6 @@ public static StateDecision multiNextStates(final List stateMovem } /** - * * @param stateMovements required * @return state decision */ @@ -219,6 +220,7 @@ public static StateDecision multiNextStates(final StateMovement... stateMovement /** * use the other one with WorkflowState class param if the stateId is provided by default, to make your code cleaner * or use other ones with a list of StateMovement to enable the WorkflowStateOptions overriding + * * @param stateIds stateIds of next states * @return state decision */ @@ -232,6 +234,7 @@ public static StateDecision multiNextStates(final String... stateIds) { /** * use other ones with a list of StateMovement to enable the WorkflowStateOptions overriding + * * @param states required * @return state decision */ diff --git a/src/main/java/io/iworkflow/core/StateMovement.java b/src/main/java/io/iworkflow/core/StateMovement.java index 2031c33e..3bdae3d2 100644 --- a/src/main/java/io/iworkflow/core/StateMovement.java +++ b/src/main/java/io/iworkflow/core/StateMovement.java @@ -11,6 +11,7 @@ public abstract class StateMovement { public abstract String getStateId(); public abstract Optional getStateInput(); + public abstract Optional getStateOptionsOverride(); public final static String RESERVED_STATE_ID_PREFIX = "_SYS_"; @@ -53,43 +54,45 @@ public static StateMovement forceFailWorkflow(final Object output) { } /** - * - * @param stateClass required - * @param stateInput optional, can be null - * @param stateOptionsOverride optional, can be null. It is used to override the defined one in the State class + * @param Class type of the WorkflowState input + * @param stateClass required + * @param stateInput optional, can be null + * @param stateOptionsOverride optional, can be null. It is used to override the defined one in the State class * @return state movement */ - public static StateMovement create(final Class stateClass, final Object stateInput, final WorkflowStateOptions stateOptionsOverride) { + public static StateMovement create(final Class> stateClass, final I stateInput, final WorkflowStateOptions stateOptionsOverride) { return create(stateClass.getSimpleName(), stateInput, stateOptionsOverride); } /** - * - * @param stateClass required - * @param stateInput optional, can be null + * @param Class type of the WorkflowState input + * @param stateClass required + * @param stateInput optional, can be null * @return state movement */ - public static StateMovement create(final Class stateClass, final Object stateInput) { + public static StateMovement create(final Class> stateClass, final I stateInput) { return create(stateClass, stateInput, null); } /** - * - * @param stateClass required + * @param Class type of the WorkflowState input + * @param stateClass required * @return state movement */ - public static StateMovement create(final Class stateClass) { + public static StateMovement create(final Class> stateClass) { return create(stateClass, null, null); } /** * use the other one with WorkflowState class param if the stateId is provided by default, to make your code cleaner - * @param stateId required - * @param stateInput optional, can be null - * @param stateOptionsOverride optional, can be null. It is used to override the defined one in the State class + * + * @param Class type of the WorkflowState input + * @param stateId required + * @param stateInput optional, can be null + * @param stateOptionsOverride optional, can be null. It is used to override the defined one in the State class * @return state movement */ - public static StateMovement create(final String stateId, final Object stateInput, final WorkflowStateOptions stateOptionsOverride) { + public static StateMovement create(final String stateId, final I stateInput, final WorkflowStateOptions stateOptionsOverride) { if (stateId.startsWith(RESERVED_STATE_ID_PREFIX)) { throw new WorkflowDefinitionException("Cannot use reserved stateId prefix for your stateId"); } @@ -110,7 +113,8 @@ public static StateMovement create(final String stateId, final Object stateInput /** * use the other one with WorkflowState class param if the stateId is provided by default, to make your code cleaner - * @param stateId stateId + * + * @param stateId stateId * @return state movement */ public static StateMovement create(final String stateId) {