content: package org.alien4cloud.tosca.editor.processors.inputs;
  
  import java.util.Map;
  
  import org.alien4cloud.tosca.editor.EditionContextManager;
  import org.alien4cloud.tosca.editor.operations.inputs.AbstractInputOperation;
  import org.alien4cloud.tosca.editor.processors.IEditorOperationProcessor;
  
  import com.google.common.collect.Maps;
  
  import alien4cloud.exception.NotFoundException;
  import org.alien4cloud.tosca.model.Csar;
  import org.alien4cloud.tosca.model.definitions.PropertyDefinition;
  import org.alien4cloud.tosca.model.templates.Topology;
  
  /**
   * Abstract class to process input operations. Saves common input checking.
   */
  public abstract class AbstractInputProcessor<T extends AbstractInputOperation> implements IEditorOperationProcessor<T> {
      @Override
      public void process(Csar csar, Topology topology, T operation) {
          Map<String, PropertyDefinition> inputs = topology.getInputs();
          if (inputs == null) {
              if (create()) {
                  inputs = Maps.newHashMap();
              } else {
                  throw new NotFoundException("The topology has no defined input");
              }
          }
          processInputOperation(csar, topology, operation, inputs);
      }
  
      /**
       * If true then the inputs map will be created rather than throwing an exception.
       * 
       * @return true if we should create the input map if none exists.
       */
      protected abstract boolean create();
  
      protected abstract void processInputOperation(Csar csar, Topology topology, T operation, Map<String, PropertyDefinition> inputs);
  }
  