package org.alien4cloud.tosca.editor.processors.nodetemplate;
import javax.annotation.Resource;
import org.alien4cloud.tosca.editor.EditionContextManager;
import org.alien4cloud.tosca.editor.operations.nodetemplate.RenameNodeOperation;
import alien4cloud.exception.InvalidNodeNameException;
import org.alien4cloud.tosca.model.templates.Topology;
import alien4cloud.paas.wf.WorkflowsBuilderService;
import alien4cloud.topology.TopologyService;
import alien4cloud.topology.TopologyUtils;
import lombok.extern.slf4j.Slf4j;
import org.alien4cloud.tosca.editor.processors.IEditorOperationProcessor;
import org.springframework.stereotype.Component;
/**
* Process a {@link RenameNodeOperation}
*/
@Slf4j
@Component
public class RenameNodeProcessor implements IEditorOperationProcessor<RenameNodeOperation> {
@Resource
private TopologyService topologyService;
@Resource
private WorkflowsBuilderService workflowBuilderService;
@Override
public void process(RenameNodeOperation operation) {
Topology topology = EditionContextManager.getTopology();
if (!TopologyUtils.isValidNodeName(operation.getNewName())) {
throw new InvalidNodeNameException("A name should only contains alphanumeric character from the basic Latin alphabet and the underscore.");
}
// ensure there is node templates
topologyService.isUniqueNodeTemplateName(topology, operation.getNewName());
TopologyUtils.renameNodeTemplate(topology, operation.getNodeName(), operation.getNewName());
workflowBuilderService.renameNode(topology, operation.getNodeName(), operation.getNewName());
log.debug("Renaming the Node template <{}> with <{}> in the topology <{}> .", operation.getNodeName(), operation.getNewName(), topology.getId());
}
}