private String getWorkflowName(Topology topology, String name, int index) { String workflowName = name; if (index > 0) { workflowName += "_" + index; } if (topology.getWorkflows() != null && topology.getWorkflows().containsKey(workflowName)) { return getWorkflowName(topology, name, ++index); } else { return workflowName; } }
private void debugWorkflow(Topology topology) { if (log.isDebugEnabled()) { for (Workflow wf : topology.getWorkflows().values()) { log.debug(WorkflowUtils.debugWorkflow(wf)); } } }
private void ensureUniqueness(Topology topology, String name) { if (topology.getWorkflows().containsKey(name)) { throw new AlreadyExistException(String.format("The workflow '%s' already exists in topology '%s'.", name, topology.getId())); } } }
private boolean hasCustomWorkflows(Topology topology) { for (Workflow wf : safe(topology.getWorkflows()).values()) { if (wf.isHasCustomModifications()) { return true; } } return false; } }
/** * Simplify all the workflows which have no custom modifications * @param tc Topology Context */ public void simplifyWorkflow(TopologyContext tc) { simplifyWorkflow(tc, tc.getTopology().getWorkflows().keySet()); }
public void renameStep(Topology topology, Csar csar, String workflowName, String stepId, String newStepName) { TopologyContext topologyContext = buildTopologyContext(topology, csar); Workflow wf = topology.getWorkflows().get(workflowName); if (wf == null) { throw new NotFoundException(String.format("The workflow '%s' can not be found", workflowName)); } AbstractWorkflowBuilder builder = getWorkflowBuilder(topologyContext.getDSLVersion(), wf); builder.renameStep(wf, stepId, newStepName); if (log.isDebugEnabled()) { log.debug(WorkflowUtils.debugWorkflow(wf)); } }
public void removeStep(Topology topology, Csar csar, String workflowName, String stepId) { TopologyContext topologyContext = buildTopologyContext(topology, csar); Workflow wf = topology.getWorkflows().get(workflowName); if (wf == null) { throw new NotFoundException(String.format("The workflow '%s' can not be found", workflowName)); } AbstractWorkflowBuilder builder = getWorkflowBuilder(topologyContext.getDSLVersion(), wf); builder.removeStep(wf, stepId, false); if (log.isDebugEnabled()) { log.debug(WorkflowUtils.debugWorkflow(wf)); } workflowValidator.validate(topologyContext, wf); }
public void refreshTopologyWorkflows(TopologyContext tc) { // Copy the original workflow than put them into the simplified workflow map tc.getTopology().getWorkflows().putAll(WorkflowUtils.cloneWorkflowMap(tc.getTopology().getUnprocessedWorkflows())); workflowSimplifyService.simplifyWorkflow(tc); for (Workflow wf : tc.getTopology().getWorkflows().values()) { workflowValidator.validate(tc, wf); } debugWorkflow(tc.getTopology()); }
private void doWithNode(TopologyContext tc, DoWithNodeCallBack callback, Set<String> whiteList) { // Attention: workflows with custom modifications are not processed AlienUtils.safe(tc.getTopology().getWorkflows()).values().stream() .filter(wf -> !wf.isHasCustomModifications() && whiteList.contains(wf.getName())) .forEach(wf -> AlienUtils.safe(tc.getTopology().getNodeTemplates()).keySet().forEach(nodeId -> { SubGraphFilter stepFilter = new NodeSubGraphFilter(wf, nodeId, tc.getTopology()); SubGraph subGraph = new SubGraph(wf, stepFilter); callback.doWithNode(subGraph, wf); })); }
public void addNode(TopologyContext topologyContext, String nodeName) { boolean forceOperation = WorkflowUtils.isComputeOrNetwork(nodeName, topologyContext); // Use the unprocessed workflow to perform add node as we know that every steps / links will be present as it's defined in declarative workflow topologyContext.getTopology().getWorkflows().putAll(topologyContext.getTopology().getUnprocessedWorkflows()); for (Workflow wf : topologyContext.getTopology().getWorkflows().values()) { AbstractWorkflowBuilder builder = getWorkflowBuilder(topologyContext.getDSLVersion(), wf); builder.addNode(wf, nodeName, topologyContext, forceOperation); WorkflowUtils.fillHostId(wf, topologyContext); } postProcessTopologyWorkflows(topologyContext); }
public Workflow connectStepFrom(Topology topology, Csar csar, String workflowName, String stepId, String[] stepNames) { TopologyContext topologyContext = buildTopologyContext(topology, csar); Workflow wf = topology.getWorkflows().get(workflowName); if (wf == null) { throw new NotFoundException(String.format("The workflow '%s' can not be found", workflowName)); } AbstractWorkflowBuilder builder = getWorkflowBuilder(topologyContext.getDSLVersion(), wf); builder.connectStepFrom(wf, stepId, stepNames); workflowValidator.validate(topologyContext, wf); return wf; }
public Workflow connectStepTo(Topology topology, Csar csar, String workflowName, String stepId, String[] stepNames) { TopologyContext topologyContext = buildTopologyContext(topology, csar); Workflow wf = topology.getWorkflows().get(workflowName); if (wf == null) { throw new NotFoundException(String.format("The workflow '%s' can not be found", workflowName)); } AbstractWorkflowBuilder builder = getWorkflowBuilder(topologyContext.getDSLVersion(), wf); builder.connectStepTo(wf, stepId, stepNames); workflowValidator.validate(topologyContext, wf); return wf; }
public Workflow removeEdge(Topology topology, Csar csar, String workflowName, String from, String to) { TopologyContext topologyContext = buildTopologyContext(topology, csar); Workflow wf = topology.getWorkflows().get(workflowName); if (wf == null) { throw new NotFoundException(String.format("The workflow '%s' can not be found", workflowName)); } AbstractWorkflowBuilder builder = getWorkflowBuilder(topologyContext.getDSLVersion(), wf); builder.removeEdge(wf, from, to); workflowValidator.validate(topologyContext, wf); return wf; }
public void removeNode(Topology topology, Csar csar, String nodeName) { TopologyContext topologyContext = buildTopologyContext(topology, csar); topologyContext.getTopology().getWorkflows().putAll(topologyContext.getTopology().getUnprocessedWorkflows()); for (Workflow wf : topology.getWorkflows().values()) { AbstractWorkflowBuilder builder = getWorkflowBuilder(topologyContext.getDSLVersion(), wf); builder.removeNode(wf, nodeName); WorkflowUtils.fillHostId(wf, topologyContext); } postProcessTopologyWorkflows(topologyContext); debugWorkflow(topology); }
public void addRelationship(TopologyContext topologyContext, String nodeTemplateName, String relationshipName) { topologyContext.getTopology().getWorkflows().putAll(topologyContext.getTopology().getUnprocessedWorkflows()); NodeTemplate nodeTemplate = topologyContext.getTopology().getNodeTemplates().get(nodeTemplateName); RelationshipTemplate relationshipTemplate = nodeTemplate.getRelationships().get(relationshipName); for (Workflow wf : topologyContext.getTopology().getWorkflows().values()) { AbstractWorkflowBuilder builder = getWorkflowBuilder(topologyContext.getDSLVersion(), wf); builder.addRelationship(wf, nodeTemplateName, nodeTemplate, relationshipName, relationshipTemplate, topologyContext); WorkflowUtils.fillHostId(wf, topologyContext); } postProcessTopologyWorkflows(topologyContext); debugWorkflow(topologyContext.getTopology()); }
private void initStandardWorkflow(String name, TopologyContext topologyContext) { Workflow workflow = new Workflow(); workflow.setName(name); workflow.setStandard(true); workflow.setHasCustomModifications(false); topologyContext.getTopology().getWorkflows().put(name, workflow); reinitWorkflow(name, topologyContext, false); }
public Workflow createWorkflow(Topology topology, String name) { String workflowName = getWorkflowName(topology, name, 0); Workflow wf = new Workflow(); wf.setName(workflowName); wf.setStandard(false); wf.setHasCustomModifications(true); Map<String, Workflow> wfs = topology.getWorkflows(); if (wfs == null) { wfs = Maps.newLinkedHashMap(); topology.setWorkflows(wfs); } wfs.put(workflowName, wf); return wf; }
@Then("^The workflow step \"(.*?)\" has no followers$") public void the_workflow_step_has_no_followers(String stepId) throws Throwable { String topologyResponseText = Context.getInstance().getRestResponse(); RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyResponseText, TopologyDTO.class, Context.getJsonMapper()); String workflowName = Context.getInstance().getCurrentWorkflowName(); Workflow workflow = topologyResponse.getData().getTopology().getWorkflows().get(workflowName); WorkflowStep step = workflow.getSteps().get(stepId); assertTrue(step.getOnSuccess() == null || step.getOnSuccess().isEmpty()); }
@Then("^The workflow step \"(.*?)\" has no predecessors$") public void the_workflow_step_has_no_predecessors(String stepId) throws Throwable { String topologyResponseText = Context.getInstance().getRestResponse(); RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyResponseText, TopologyDTO.class, Context.getJsonMapper()); String workflowName = Context.getInstance().getCurrentWorkflowName(); Workflow workflow = topologyResponse.getData().getTopology().getWorkflows().get(workflowName); WorkflowStep step = workflow.getSteps().get(stepId); assertTrue(step.getPrecedingSteps() == null || step.getPrecedingSteps().isEmpty()); }
@Then("^the workflow should exist in the topology and I start editing it$") public void the_workflow_should_exist_in_the_topology_and_I_start_editing_it() throws Throwable { String topologyId = Context.getInstance().getTopologyId(); RestResponse<Workflow> workflowResponse = JsonUtil.read(Context.getInstance().takeRestResponse(), Workflow.class, Context.getJsonMapper()); String workflowName = workflowResponse.getData().getName(); String topologyRestResponse = Context.getRestClientInstance().get("/rest/v1/topologies/" + topologyId); RestResponse<TopologyDTO> topologyResponse = JsonUtil.read(topologyRestResponse, TopologyDTO.class, Context.getJsonMapper()); assertTrue(topologyResponse.getData().getTopology().getWorkflows().containsKey(workflowName)); Context.getInstance().setCurrentWorkflowName(workflowName); } }