package alien4cloud.deployment;
import java.util.Map;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import alien4cloud.model.deployment.Deployment;
import alien4cloud.model.deployment.DeploymentTopology;
import alien4cloud.orchestrators.plugin.IOrchestratorPlugin;
import alien4cloud.paas.IPaaSCallback;
import alien4cloud.paas.OrchestratorPluginService;
import alien4cloud.paas.model.PaaSDeploymentContext;
import lombok.extern.slf4j.Slf4j;
/**
* Manages topology workflows.
*/
@Service
@Slf4j
public class WorkflowExecutionService {
@Inject
private OrchestratorPluginService orchestratorPluginService;
@Inject
private DeploymentService deploymentService;
@Inject
private DeploymentRuntimeStateService deploymentRuntimeStateService;
/**
* Launch a given workflow.
*/
public synchronized void launchWorkflow(String applicationEnvironmentId, String workflowName, Map<String, Object> params, IPaaSCallback<?> iPaaSCallback) {
Deployment deployment = deploymentService.getActiveDeploymentOrFail(applicationEnvironmentId);
DeploymentTopology deploymentTopology = deploymentRuntimeStateService.getRuntimeTopologyFromEnvironment(deployment.getEnvironmentId());
IOrchestratorPlugin orchestratorPlugin = orchestratorPluginService.getOrFail(deployment.getOrchestratorId());
PaaSDeploymentContext deploymentContext = new PaaSDeploymentContext(deployment, deploymentTopology);
orchestratorPlugin.launchWorkflow(deploymentContext, workflowName, params, iPaaSCallback);
}
}