content: package alien4cloud.paas.model;
  
  import java.nio.file.Path;
  import java.util.List;
  import java.util.Set;
  
  import lombok.EqualsAndHashCode;
  import lombok.Getter;
  import lombok.Setter;
  import org.alien4cloud.tosca.model.types.NodeType;
  import org.alien4cloud.tosca.model.templates.NodeTemplate;
  import org.alien4cloud.tosca.model.templates.ScalingPolicy;
  
  import com.google.common.collect.Lists;
  
  @Getter
  @Setter
  public class PaaSNodeTemplate extends AbstractPaaSTemplate<NodeType, NodeTemplate> {
  
      /** The path to the archive that contains the node type. **/
      private Path csarPath;
      /** The node tempalte that actually is the parent from the current node. */
      private PaaSNodeTemplate parent;
      /** flag to know if children must be processed in sequence or in parallel. */
      private boolean createChildrenSequence = false;
      /** List of node templates that are hosted on this node template. */
      private List<PaaSNodeTemplate> children = Lists.newArrayList();
  
      /** node template attached on this node template. Usually block storages */
      // TODO separate the simple PaaSNodeTemplate from the ComputePaaSNodeTemplate
      private List<PaaSNodeTemplate> storageNodes = Lists.newArrayList();
  
      // TODO put it in ComputePaaSNodeTemplate + must manage multiple network
      private List<PaaSNodeTemplate> networkNodes;
  
      /** List of relationships template with their types. */
      private List<PaaSRelationshipTemplate> relationshipTemplates = Lists.newArrayList();
      /** The scaling poilicy associated with the node if any. */
      private ScalingPolicy scalingPolicy;
      /** Groups to which this node belong to **/
      private Set<String> groups;
  
      /**
       * Create a PaaS node template from a given node template (out of a topology).
       *
       * @param wrapped
       *            The node template wrapped by this {@link PaaSNodeTemplate}.
       */
      public PaaSNodeTemplate(String id, NodeTemplate wrapped) {
          super(id, wrapped);
      }
  
      /**
       * Get a relationship template from it's id.
       *
       * @param id The id of the relationship template to get.
       * @return The {@link PaaSRelationshipTemplate} that matches the id or null if not found.
       */
      public PaaSRelationshipTemplate getRelationshipTemplate(String id, String sourceId) {
          for (PaaSRelationshipTemplate relationshipTemplate : relationshipTemplates) {
              if (relationshipTemplate.getId().equals(id) && relationshipTemplate.getSource().equals(sourceId)) {
                  return relationshipTemplate;
              }
          }
          return null;
      }
  
      /**
       * @deprecated use {@link #getTemplate()} instead.
       */
      public NodeTemplate getNodeTemplate() {
          return getTemplate();
      }
  
  }