package com.sequenceiq.cloudbreak.core.flow2.stack.start; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartEvent.COLLECT_METADATA_FAILED_EVENT; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartEvent.COLLECT_METADATA_FINISHED_EVENT; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartEvent.STACK_START_EVENT; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartEvent.START_FAILURE_EVENT; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartEvent.START_FAIL_HANDLED_EVENT; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartEvent.START_FINALIZED_EVENT; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartEvent.START_FINISHED_EVENT; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartState.COLLECTING_METADATA; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartState.FINAL_STATE; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartState.INIT_STATE; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartState.START_FAILED_STATE; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartState.START_FINISHED_STATE; import static com.sequenceiq.cloudbreak.core.flow2.stack.start.StackStartState.START_STATE; import java.util.List; import org.springframework.stereotype.Component; import com.sequenceiq.cloudbreak.core.flow2.config.AbstractFlowConfiguration; @Component public class StackStartFlowConfig extends AbstractFlowConfiguration<StackStartState, StackStartEvent> { private static final List<Transition<StackStartState, StackStartEvent>> TRANSITIONS = new Transition.Builder<StackStartState, StackStartEvent>() .defaultFailureEvent(START_FAILURE_EVENT) .from(INIT_STATE).to(START_STATE).event(STACK_START_EVENT).noFailureEvent() .from(START_STATE).to(COLLECTING_METADATA).event(START_FINISHED_EVENT).defaultFailureEvent() .from(COLLECTING_METADATA).to(START_FINISHED_STATE).event(COLLECT_METADATA_FINISHED_EVENT).failureEvent(COLLECT_METADATA_FAILED_EVENT) .from(START_FINISHED_STATE).to(FINAL_STATE).event(START_FINALIZED_EVENT).defaultFailureEvent() .build(); private static final FlowEdgeConfig<StackStartState, StackStartEvent> EDGE_CONFIG = new FlowEdgeConfig<>(INIT_STATE, FINAL_STATE, START_FAILED_STATE, START_FAIL_HANDLED_EVENT); public StackStartFlowConfig() { super(StackStartState.class, StackStartEvent.class); } @Override public StackStartEvent[] getEvents() { return StackStartEvent.values(); } @Override public StackStartEvent[] getInitEvents() { return new StackStartEvent[] { StackStartEvent.STACK_START_EVENT }; } @Override protected List<Transition<StackStartState, StackStartEvent>> getTransitions() { return TRANSITIONS; } @Override protected FlowEdgeConfig<StackStartState, StackStartEvent> getEdgeConfig() { return EDGE_CONFIG; } }