content: package org.alien4cloud.tosca.editor.processors.inputs;
  
  import static alien4cloud.utils.AlienUtils.safe;
  
  import org.alien4cloud.tosca.editor.EditionContextManager;
  import org.alien4cloud.tosca.editor.operations.inputs.RenameInputArtifactOperation;
  import org.alien4cloud.tosca.editor.processors.IEditorOperationProcessor;
  
  import alien4cloud.exception.AlreadyExistException;
  import alien4cloud.exception.InvalidNameException;
  import alien4cloud.exception.NotFoundException;
  import org.alien4cloud.tosca.model.Csar;
  import org.alien4cloud.tosca.model.definitions.DeploymentArtifact;
  import org.alien4cloud.tosca.model.templates.NodeTemplate;
  import org.alien4cloud.tosca.model.templates.Topology;
  import alien4cloud.utils.InputArtifactUtil;
  import org.springframework.stereotype.Component;
  
  /**
   * Rename an input artifact.
   */
  @Component
  public class RenameInputArtifactProcessor implements IEditorOperationProcessor<RenameInputArtifactOperation> {
      @Override
      public void process(Csar csar, Topology topology, RenameInputArtifactOperation operation) {
          if (operation.getNewInputName() == null || operation.getNewInputName().isEmpty() || !operation.getNewInputName().matches("\\w+")) {
              throw new InvalidNameException("newInputName", operation.getNewInputName(), "\\w+");
          }
          if (safe(topology.getInputArtifacts()).containsKey(operation.getNewInputName())) {
              throw new AlreadyExistException("Input artifact with name <" + operation.getNewInputName() + "> already exists.");
          }
          if (!safe(topology.getInputArtifacts()).containsKey(operation.getInputName())) {
              throw new NotFoundException("Input artifact with name <" + operation.getInputName() + "> does not exists.");
          }
          DeploymentArtifact inputArtifact = topology.getInputArtifacts().remove(operation.getInputName());
          topology.getInputArtifacts().put(operation.getNewInputName(), inputArtifact);
          // change the value of concerned node template artifacts
          for (NodeTemplate nodeTemplate : safe(topology.getNodeTemplates()).values()) {
              for (DeploymentArtifact dArtifact : safe(nodeTemplate.getArtifacts()).values()) {
                  InputArtifactUtil.updateInputArtifactIdIfNeeded(dArtifact, operation.getInputName(), operation.getNewInputName());
              }
          }
      }
  }
  