package com.sequenceiq.cloudbreak.core.flow2.cluster.upgrade; import java.util.Optional; import javax.inject.Inject; import org.springframework.statemachine.StateContext; import com.sequenceiq.cloudbreak.cloud.event.Payload; import com.sequenceiq.cloudbreak.core.flow2.AbstractAction; import com.sequenceiq.cloudbreak.core.flow2.cluster.ClusterContext; import com.sequenceiq.cloudbreak.domain.Cluster; 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.cluster.ClusterService; import com.sequenceiq.cloudbreak.service.stack.StackService; public abstract class AbstractClusterUpgradeAction<P extends Payload> extends AbstractAction<ClusterUpgradeState, ClusterUpgradeEvent, ClusterContext, P> { @Inject private StackService stackService; @Inject private ClusterService clusterService; protected AbstractClusterUpgradeAction(Class<P> payloadClass) { super(payloadClass); } @Override protected ClusterContext createFlowContext(String flowId, StateContext<ClusterUpgradeState, ClusterUpgradeEvent> stateContext, P payload) { Stack stack = stackService.getById(payload.getStackId()); Cluster cluster = clusterService.retrieveClusterByStackId(stack.getId()); MDCBuilder.buildMdcContext(stack); return new ClusterContext(flowId, stack, cluster); } @Override protected Object getFailurePayload(P payload, Optional<ClusterContext> flowContext, Exception ex) { return new StackFailureEvent(payload.getStackId(), ex); } }