package com.sequenceiq.cloudbreak.core.flow2.stack; import java.util.List; import java.util.Optional; import javax.inject.Inject; import org.springframework.statemachine.StateContext; import com.sequenceiq.cloudbreak.core.flow2.AbstractAction; import com.sequenceiq.cloudbreak.core.flow2.Flow; import com.sequenceiq.cloudbreak.core.flow2.FlowEvent; import com.sequenceiq.cloudbreak.core.flow2.FlowState; import com.sequenceiq.cloudbreak.core.flow2.PayloadConverter; import com.sequenceiq.cloudbreak.domain.Stack; import com.sequenceiq.cloudbreak.logger.MDCBuilder; import com.sequenceiq.cloudbreak.reactor.api.event.StackFailureEvent; import com.sequenceiq.cloudbreak.service.stack.StackService; public abstract class AbstractStackFailureAction<S extends FlowState, E extends FlowEvent> extends AbstractAction<S, E, StackFailureContext, StackFailureEvent> { @Inject private StackService stackService; protected AbstractStackFailureAction() { super(StackFailureEvent.class); } @Override protected StackFailureContext createFlowContext(String flowId, StateContext<S, E> stateContext, StackFailureEvent payload) { Flow flow = getFlow(flowId); Stack stack = stackService.getById(payload.getStackId()); MDCBuilder.buildMdcContext(stack); flow.setFlowFailed(); return new StackFailureContext(flowId, stack); } @Override protected Object getFailurePayload(StackFailureEvent payload, Optional<StackFailureContext> flowContext, Exception ex) { return null; } @Override protected void initPayloadConverterMap(List<PayloadConverter<StackFailureEvent>> payloadConverters) { payloadConverters.add(new CloudPlatformResponseToStackFailureConverter()); payloadConverters.add(new ClusterPlatformResponseToStackFailureConverter()); } }