package org.alien4cloud.tosca.editor.processors.nodetemplate;
import java.util.Map;
import javax.annotation.Resource;
import org.alien4cloud.tosca.editor.EditionContextManager;
import org.alien4cloud.tosca.editor.operations.nodetemplate.ResetNodeDeploymentArtifactOperation;
import org.alien4cloud.tosca.editor.processors.IEditorOperationProcessor;
import org.alien4cloud.tosca.model.definitions.DeploymentArtifact;
import org.alien4cloud.tosca.model.templates.NodeTemplate;
import org.alien4cloud.tosca.model.templates.Topology;
import org.alien4cloud.tosca.model.types.NodeType;
import org.springframework.stereotype.Component;
import alien4cloud.exception.NotFoundException;
import alien4cloud.topology.TopologyServiceCore;
/**
* Process an {@link ResetNodeDeploymentArtifactOperation}.
*/
@Component
public class ResetNodeDeploymentArtifactProcessor implements IEditorOperationProcessor<ResetNodeDeploymentArtifactOperation> {
@Resource
private TopologyServiceCore topologyServiceCore;
@Override
public void process(ResetNodeDeploymentArtifactOperation operation) {
Topology topology = EditionContextManager.getTopology();
// Get the node template's artifacts to reset
Map<String, NodeTemplate> nodeTemplates = TopologyServiceCore.getNodeTemplates(topology);
NodeTemplate nodeTemplate = TopologyServiceCore.getNodeTemplate(topology.getId(), operation.getNodeName(), nodeTemplates);
DeploymentArtifact currentArtifact = nodeTemplate.getArtifacts() == null ? null : nodeTemplate.getArtifacts().get(operation.getArtifactName());
if (currentArtifact == null) {
throw new NotFoundException(
"Artifact with key [" + operation.getArtifactName() + "] do not exist in node template [" + nodeTemplate.getName() + "].");
}
// Get the node type's artifact
Map<String, NodeType> nodeTypes = topologyServiceCore.getIndexedNodeTypesFromTopology(topology, false, false, true);
NodeType nodeType = nodeTypes.get(nodeTemplate.getType());
DeploymentArtifact artifactFromNodeType = nodeType.getArtifacts() == null ? null : nodeType.getArtifacts().get(operation.getArtifactName());
if (artifactFromNodeType == null) {
throw new NotFoundException("Artifact with key [" + operation.getArtifactName() + "] do not exist in node type [" + nodeType.getId() + "].");
}
currentArtifact.setArtifactRef(artifactFromNodeType.getArtifactRef());
currentArtifact.setArtifactName(artifactFromNodeType.getArtifactName());
currentArtifact.setArtifactType(artifactFromNodeType.getArtifactType());
currentArtifact.setArtifactRepository(artifactFromNodeType.getArtifactRepository());
currentArtifact.setRepositoryName(artifactFromNodeType.getRepositoryName());
currentArtifact.setRepositoryURL(artifactFromNodeType.getRepositoryURL());
currentArtifact.setRepositoryCredential(artifactFromNodeType.getRepositoryCredential());
}
}