package org.alien4cloud.tosca.editor.processors; import java.util.List; import java.util.Set; import javax.inject.Inject; import org.alien4cloud.tosca.editor.EditionContextManager; import org.alien4cloud.tosca.editor.operations.AbstractEditorOperation; import org.alien4cloud.tosca.editor.operations.ChangeDependencyVersionOperation; import org.alien4cloud.tosca.editor.services.EditorTopologyRecoveryHelperService; import org.alien4cloud.tosca.model.CSARDependency; import org.alien4cloud.tosca.model.templates.Topology; import org.springframework.stereotype.Component; import com.google.common.collect.Sets; import alien4cloud.topology.TopologyService; /** * Process {@link ChangeDependencyVersionOperation}. * It will recover the topology after a dependency have change. * This can lead to node / relationship deletion or rebuild. */ @Component public class ChangeDependencyVersionProcessor implements IEditorOperationProcessor<ChangeDependencyVersionOperation> { @Inject private EditorTopologyRecoveryHelperService recoveryHelperService; @Inject private TopologyService topologyService; @Override public void process(ChangeDependencyVersionOperation operation) { Topology topology = EditionContextManager.getTopology(); CSARDependency newDependency = new CSARDependency(operation.getDependencyName(), operation.getDependencyVersion()); // Check for missing type and update the topology's dependencies topologyService.updateDependencies(EditionContextManager.get(), newDependency); Set<CSARDependency> dependencies = Sets.newHashSet(newDependency); List<AbstractEditorOperation> recoveringOperations = recoveryHelperService.buildRecoveryOperations(topology, dependencies); // process every recovery operation recoveryHelperService.processRecoveryOperations(topology, recoveringOperations); } }