package org.alien4cloud.tosca.editor.processors.nodetemplate;
import java.util.Map;
import org.alien4cloud.tosca.editor.EditionContextManager;
import org.alien4cloud.tosca.editor.operations.nodetemplate.UpdateNodeDeploymentArtifactOperation;
import org.alien4cloud.tosca.editor.processors.FileProcessorHelper;
import org.alien4cloud.tosca.editor.processors.IEditorOperationProcessor;
import org.apache.commons.lang3.NotImplementedException;
import org.springframework.stereotype.Component;
import alien4cloud.component.repository.ArtifactRepositoryConstants;
import alien4cloud.exception.NotFoundException;
import org.alien4cloud.tosca.model.definitions.DeploymentArtifact;
import org.alien4cloud.tosca.model.templates.NodeTemplate;
import org.alien4cloud.tosca.model.templates.Topology;
import alien4cloud.topology.TopologyServiceCore;
/**
* Process an {@link UpdateNodeDeploymentArtifactOperation}.
*/
@Component
public class UpdateNodeDeploymentArtifactProcessor implements IEditorOperationProcessor<UpdateNodeDeploymentArtifactOperation> {
@Override
public void process(UpdateNodeDeploymentArtifactOperation operation) {
Topology topology = EditionContextManager.getTopology();
// Get the node template's artifacts to update
Map<String, NodeTemplate> nodeTemplates = TopologyServiceCore.getNodeTemplates(topology);
NodeTemplate nodeTemplate = TopologyServiceCore.getNodeTemplate(topology.getId(), operation.getNodeName(), nodeTemplates);
DeploymentArtifact artifact = nodeTemplate.getArtifacts() == null ? null : nodeTemplate.getArtifacts().get(operation.getArtifactName());
if (artifact == null) {
throw new NotFoundException("Artifact with key [" + operation.getArtifactName() + "] do not exist");
}
if (operation.getArtifactRepository() == null) {
// this is an archive file, ensure that the file exists within the archive
FileProcessorHelper.getFileTreeNode(operation.getArtifactReference());
artifact.setArtifactRepository(ArtifactRepositoryConstants.ALIEN_TOPOLOGY_REPOSITORY);
artifact.setRepositoryName(null);
artifact.setRepositoryURL(null);
} else {
artifact.setArtifactRepository(operation.getArtifactRepository());
artifact.setRepositoryName(operation.getRepositoryName());
artifact.setRepositoryURL(operation.getRepositoryUrl());
}
artifact.setArtifactRef(operation.getArtifactReference());
}
}