/* * Copyright 2011-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.services.stepfunctions.builder; import com.amazonaws.services.stepfunctions.builder.conditions.AndCondition; import com.amazonaws.services.stepfunctions.builder.conditions.BooleanEqualsCondition; import com.amazonaws.services.stepfunctions.builder.conditions.Condition; import com.amazonaws.services.stepfunctions.builder.conditions.NotCondition; import com.amazonaws.services.stepfunctions.builder.conditions.NumericEqualsCondition; import com.amazonaws.services.stepfunctions.builder.conditions.NumericGreaterThanCondition; import com.amazonaws.services.stepfunctions.builder.conditions.NumericGreaterThanOrEqualCondition; import com.amazonaws.services.stepfunctions.builder.conditions.NumericLessThanCondition; import com.amazonaws.services.stepfunctions.builder.conditions.NumericLessThanOrEqualCondition; import com.amazonaws.services.stepfunctions.builder.conditions.OrCondition; import com.amazonaws.services.stepfunctions.builder.conditions.StringEqualsCondition; import com.amazonaws.services.stepfunctions.builder.conditions.StringGreaterThanCondition; import com.amazonaws.services.stepfunctions.builder.conditions.StringGreaterThanOrEqualCondition; import com.amazonaws.services.stepfunctions.builder.conditions.StringLessThanCondition; import com.amazonaws.services.stepfunctions.builder.conditions.StringLessThanOrEqualCondition; import com.amazonaws.services.stepfunctions.builder.conditions.TimestampEqualsCondition; import com.amazonaws.services.stepfunctions.builder.conditions.TimestampGreaterThanCondition; import com.amazonaws.services.stepfunctions.builder.conditions.TimestampGreaterThanOrEqualCondition; import com.amazonaws.services.stepfunctions.builder.conditions.TimestampLessThanCondition; import com.amazonaws.services.stepfunctions.builder.conditions.TimestampLessThanOrEqualCondition; import com.amazonaws.services.stepfunctions.builder.states.Branch; import com.amazonaws.services.stepfunctions.builder.states.Catcher; import com.amazonaws.services.stepfunctions.builder.states.Choice; import com.amazonaws.services.stepfunctions.builder.states.ChoiceState; import com.amazonaws.services.stepfunctions.builder.states.EndTransition; import com.amazonaws.services.stepfunctions.builder.states.FailState; import com.amazonaws.services.stepfunctions.builder.states.NextStateTransition; import com.amazonaws.services.stepfunctions.builder.states.ParallelState; import com.amazonaws.services.stepfunctions.builder.states.PassState; import com.amazonaws.services.stepfunctions.builder.states.Retrier; import com.amazonaws.services.stepfunctions.builder.states.SucceedState; import com.amazonaws.services.stepfunctions.builder.states.TaskState; import com.amazonaws.services.stepfunctions.builder.states.Transition; import com.amazonaws.services.stepfunctions.builder.states.WaitFor; import com.amazonaws.services.stepfunctions.builder.states.WaitForSeconds; import com.amazonaws.services.stepfunctions.builder.states.WaitForSecondsPath; import com.amazonaws.services.stepfunctions.builder.states.WaitForTimestamp; import com.amazonaws.services.stepfunctions.builder.states.WaitForTimestampPath; import com.amazonaws.services.stepfunctions.builder.states.WaitState; import java.util.Date; /** * Fluent API for creating a {@link StateMachine} object. */ public final class StepFunctionBuilder { private StepFunctionBuilder() { } /** * Represents a StepFunctions state machine. A state machine must have at least one state. * * @return Builder used to configure a {@link StateMachine}. * @see <a href="https://states-language.net/spec.html#toplevelfields">https://states-language.net/spec.html#toplevelfields</a> */ public static StateMachine.Builder stateMachine() { return StateMachine.builder(); } /** * State that allows for parallel execution of {@link Branch}s. A Parallel state causes the interpreter to execute each * branch starting with the state named in its “StartAt” field, as concurrently as possible, and wait until each branch * terminates * (reaches a terminal state) before processing the Parallel state's “Next” field. * * @return Builder used to configure a {@link ParallelState}. * @see <a href="https://states-language.net/spec.html#parallel-state">https://states-language.net/spec.html#parallel-state</a> */ public static ParallelState.Builder parallelState() { return ParallelState.builder(); } /** * A single branch of parallel execution in a state machine. See {@link ParallelState}. * * @return Builder used to configure a {@link Branch}. */ public static Branch.Builder branch() { return Branch.builder(); } /** * The Pass State simply passes its input to its output, performing no work. Pass States are useful when constructing and * debugging state machines. * * <p>A Pass State MAY have a field named “Result”. If present, its value is treated as the output of a virtual task, and * placed as prescribed by the “ResultPath” field, if any, to be passed on to the next state.</p> * * @return Builder used to configure a {@link PassState}. * @see <a href="https://states-language.net/spec.html#pass-state">https://states-language.net/spec.html#pass-state</a> */ public static PassState.Builder passState() { return PassState.builder(); } /** * The Succeed State terminates a state machine successfully. The Succeed State is a useful target for Choice-state branches * that don't do anything but terminate the machine. * * @return Builder used to configure a {@link SucceedState}. * @see <a href="https://states-language.net/spec.html#succeed-state">https://states-language.net/spec.html#succeed-state</a> */ public static SucceedState.Builder succeedState() { return SucceedState.builder(); } /** * Terminal state that terminates the state machine and marks it as a failure. * * @return Builder used to configure a {@link FailState}. * @see <a href="https://states-language.net/spec.html#fail-state">https://states-language.net/spec.html#fail-state</a> */ public static FailState.Builder failState() { return FailState.builder(); } /** * A Wait state causes the interpreter to delay the machine from continuing for a specified time. The time can be specified * as a wait duration, specified in seconds, or an absolute expiry time, specified as an ISO-8601 extended offset date-time * format string. * * @return Builder used to configure a {@link WaitState}. * @see <a href="https://states-language.net/spec.html#wait-state">https://states-language.net/spec.html#wait-state</a> */ public static WaitState.Builder waitState() { return WaitState.builder(); } /** * The Task State causes the interpreter to execute the work identified by the state’s “Resource” field. * * <p>Currently allowed resources include Lambda functions and States activities.</p> * * @return Builder used to configure a {@link TaskState}. * @see <a href="https://states-language.net/spec.html#task-state">https://states-language.net/spec.html#task-state</a> */ public static TaskState.Builder taskState() { return TaskState.builder(); } /** * A Choice state adds branching logic to a state machine. A Choice state consists of a list of choices, each of which * contains a potential transition state and a condition that determines if that choice is evaluated, and a default state * that the state machine transitions to if no choice branches are matched. * * @return Builder used to configure a {@link ChoiceState}. * @see <a href="https://states-language.net/spec.html#choice-state>https://states-language.net/spec.html#choice-state</a> */ public static ChoiceState.Builder choiceState() { return ChoiceState.builder(); } /** * Class representing a choice rule to be included in a {@link ChoiceState}. A choice consists of a condition and a state * that the state machine will transition to if the condition evaluates to true. * * @return Builder used to configure a {@link Choice}. * @see <a href="https://states-language.net/spec.html#choice-state>https://states-language.net/spec.html#choice-state</a> */ public static Choice.Builder choice() { return Choice.builder(); } /** * Describes retry behavior for a state. A Retrier consists of a list of error codes that the retrier applies to and * parameters controlling the behavior when a retry is performed. * * @return Builder used to configure a {@link Retrier}. * @see <a href="https://states-language.net/spec.html#errors">https://states-language.net/spec.html#errors</a> */ public static Retrier.Builder retrier() { return Retrier.builder(); } /** * Catches an error from a {@link ParallelState} or a {@link TaskState} and transitions into the specified recovery state. * The * recovery state will receive the error output as input unless otherwise specified by a ResultPath. * * @return Builder used to configure a {@link Catcher}. * @see <a href="https://states-language.net/spec.html#errors">https://states-language.net/spec.html#errors</a> */ public static Catcher.Builder catcher() { return Catcher.builder(); } /** * Binary condition for String equality comparison. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static StringEqualsCondition.Builder eq(String variable, String expectedValue) { return StringEqualsCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Numeric equality comparison. Supports both integral and floating point numeric types. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static NumericEqualsCondition.Builder eq(String variable, long expectedValue) { return NumericEqualsCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Numeric equality comparison. Supports both integral and floating point numeric types. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static NumericEqualsCondition.Builder eq(String variable, double expectedValue) { return NumericEqualsCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Boolean equality comparison. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static BooleanEqualsCondition.Builder eq(String variable, boolean expectedValue) { return BooleanEqualsCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Timestamp equality comparison. Dates are converted to ISO8601 UTC timestamps. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static TimestampEqualsCondition.Builder eq(String variable, Date expectedValue) { return TimestampEqualsCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for String greater than comparison. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static StringGreaterThanCondition.Builder gt(String variable, String expectedValue) { return StringGreaterThanCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Numeric greater than comparison. Supports both integral and floating point numeric types. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static NumericGreaterThanCondition.Builder gt(String variable, long expectedValue) { return NumericGreaterThanCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Numeric greater than comparison. Supports both integral and floating point numeric types. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static NumericGreaterThanCondition.Builder gt(String variable, double expectedValue) { return NumericGreaterThanCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Timestamp greater than comparison. Dates are converted to ISO8601 UTC timestamps. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static TimestampGreaterThanCondition.Builder gt(String variable, Date expectedValue) { return TimestampGreaterThanCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for String greater than or equal to comparison. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static StringGreaterThanOrEqualCondition.Builder gte(String variable, String expectedValue) { return StringGreaterThanOrEqualCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Numeric greater than comparison. Supports both integral and floating point numeric types. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static NumericGreaterThanOrEqualCondition.Builder gte(String variable, long expectedValue) { return NumericGreaterThanOrEqualCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Numeric greater than comparison. Supports both integral and floating point numeric types. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static NumericGreaterThanOrEqualCondition.Builder gte(String variable, double expectedValue) { return NumericGreaterThanOrEqualCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Timestamp greater than or equal to comparison. Dates are converted to ISO8601 UTC timestamps. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static TimestampGreaterThanOrEqualCondition.Builder gte(String variable, Date expectedValue) { return TimestampGreaterThanOrEqualCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for String less than comparison. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static StringLessThanCondition.Builder lt(String variable, String expectedValue) { return StringLessThanCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Numeric less than comparison. Supports both integral and floating point numeric types. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static NumericLessThanCondition.Builder lt(String variable, long expectedValue) { return NumericLessThanCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Numeric less than comparison. Supports both integral and floating point numeric types. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static NumericLessThanCondition.Builder lt(String variable, double expectedValue) { return NumericLessThanCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Timestamp less than comparison. Dates are converted to ISO8601 UTC timestamps. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static TimestampLessThanCondition.Builder lt(String variable, Date expectedValue) { return TimestampLessThanCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for String less than or equal to comparison. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static StringLessThanOrEqualCondition.Builder lte(String variable, String expectedValue) { return StringLessThanOrEqualCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Numeric less than or equal to comparison. Supports both integral and floating point numeric types. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static NumericLessThanOrEqualCondition.Builder lte(String variable, long expectedValue) { return NumericLessThanOrEqualCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Numeric less than or equal to comparison. Supports both integral and floating point numeric types. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static NumericLessThanOrEqualCondition.Builder lte(String variable, double expectedValue) { return NumericLessThanOrEqualCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Binary condition for Timestamp less than or equal to comparison. Dates are converted to ISO8601 UTC timestamps. * * @param variable The JSONPath expression that determines which piece of the input document is used for the comparison. * @param expectedValue The expected value for this condition. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> * @see com.amazonaws.services.stepfunctions.builder.states.Choice */ public static TimestampLessThanOrEqualCondition.Builder lte(String variable, Date expectedValue) { return TimestampLessThanOrEqualCondition.builder().variable(variable).expectedValue(expectedValue); } /** * Represents the logical NOT of a single condition. May be used in a {@link com.amazonaws.services.stepfunctions.builder.states.ChoiceState}. * * @param conditionBuilder The condition to be negated. May be another composite condition or a simple condition. * @return Builder used to configure a {@link NotCondition}. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> */ public static NotCondition.Builder not(Condition.Builder conditionBuilder) { return NotCondition.builder().condition(conditionBuilder); } /** * Represents the logical AND of multiple conditions. May be used in a {@link com.amazonaws.services.stepfunctions.builder.states.ChoiceState}. * * @param conditionBuilders The conditions to AND together. May be another composite condition or a simple condition. * @return Builder used to configure a {@link AndCondition}. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> */ public static AndCondition.Builder and(Condition.Builder... conditionBuilders) { return AndCondition.builder().conditions(conditionBuilders); } /** * Represents the logical OR of multiple conditions. May be used in a {@link com.amazonaws.services.stepfunctions.builder.states.ChoiceState}. * * @param conditionBuilders The conditions to OR together. May be another composite condition or a simple condition. * @return Builder used to configure a {@link OrCondition}. * @see <a href="https://states-language.net/spec.html#choice-state">https://states-language.net/spec.html#choice-state</a> */ public static OrCondition.Builder or(Condition.Builder... conditionBuilders) { return OrCondition.builder().conditions(conditionBuilders); } /** * A transition to another state in the state machine. * * @param nextStateName Name of state to transition to. * @return Transition to another state in the state machine. * @see <a href="https://states-language.net/spec.html#transition">https://states-language.net/spec.html#transition</a> */ public static NextStateTransition.Builder next(String nextStateName) { return NextStateTransition.builder().nextStateName(nextStateName); } /** * Transition indicating the state machine should terminate execution. * * @return EndTransition * @see <a href="https://states-language.net/spec.html#transition">https://states-language.net/spec.html#transition</a> */ public static Transition.Builder end() { return EndTransition.builder(); } /** * {@link WaitFor} that can be used in a {@link WaitState}. Instructs the {@link WaitState} to wait for the * given number of seconds. * * @param seconds Number of seconds to wait. Must be positive. * @see <a href="https://states-language.net/spec.html#wait-state">https://states-language.net/spec.html#wait-state</a> */ public static WaitFor.Builder seconds(int seconds) { return WaitForSeconds.builder().seconds(seconds); } /** * {@link WaitFor} that can be used in a {@link WaitState}. Instructs the {@link WaitState} to wait for the * number of seconds specified at the reference path in the input to the state. * * @param secondsPath Reference path to the location in the input data containing the number of seconds to wait. * @see <a href="https://states-language.net/spec.html#wait-state">https://states-language.net/spec.html#wait-state</a> */ public static WaitFor.Builder secondsPath(String secondsPath) { return WaitForSecondsPath.builder().secondsPath(secondsPath); } /** * {@link WaitFor} that can be used in a {@link WaitState}. Instructs the {@link WaitState} to wait until * the given timestamp. * * @param timestamp Date to wait until before proceeding. * @see <a href="https://states-language.net/spec.html#wait-state">https://states-language.net/spec.html#wait-state</a> */ public static WaitFor.Builder timestamp(Date timestamp) { return WaitForTimestamp.builder().timestamp(timestamp); } /** * {@link WaitFor} that can be used in a {@link WaitState}. Instructs the {@link WaitState} to wait until * the date specified at the reference path in the input to the state. * * @param timestampPath Reference path to the location in the input data containing the date to wait until. * @see <a href="https://states-language.net/spec.html#wait-state">https://states-language.net/spec.html#wait-state</a> */ public static WaitFor.Builder timestampPath(String timestampPath) { return WaitForTimestampPath.builder().timestampPath(timestampPath); } }