/**
  * Build a node template
  *
  * @param dependencies the dependencies on which new node will be constructed
  * @param indexedNodeType the type of the node
  * @param templateToMerge the template that can be used to merge into the new node template
  * @return new constructed node template
  */
 public static NodeTemplate buildNodeTemplate(
     Set<CSARDependency> dependencies,
     IndexedNodeType indexedNodeType,
     NodeTemplate templateToMerge,
     IToscaElementFinder toscaElementFinder) {
   NodeTemplate nodeTemplate = new NodeTemplate();
   nodeTemplate.setType(indexedNodeType.getElementId());
   Map<String, Capability> capabilities = Maps.newLinkedHashMap();
   Map<String, Requirement> requirements = Maps.newLinkedHashMap();
   Map<String, AbstractPropertyValue> properties = Maps.newLinkedHashMap();
   Map<String, DeploymentArtifact> deploymentArtifacts = null;
   Map<String, DeploymentArtifact> deploymentArtifactsToMerge =
       templateToMerge != null ? templateToMerge.getArtifacts() : null;
   if (deploymentArtifactsToMerge != null) {
     if (indexedNodeType.getArtifacts() != null) {
       deploymentArtifacts = Maps.newLinkedHashMap(indexedNodeType.getArtifacts());
       for (Entry<String, DeploymentArtifact> entryArtifact :
           deploymentArtifactsToMerge.entrySet()) {
         DeploymentArtifact existingArtifact = entryArtifact.getValue();
         if (deploymentArtifacts.containsKey(entryArtifact.getKey())) {
           deploymentArtifacts.put(entryArtifact.getKey(), existingArtifact);
         }
       }
     }
   } else if (indexedNodeType.getArtifacts() != null) {
     deploymentArtifacts = Maps.newLinkedHashMap(indexedNodeType.getArtifacts());
   }
   fillCapabilitiesMap(
       capabilities,
       indexedNodeType.getCapabilities(),
       dependencies,
       templateToMerge != null ? templateToMerge.getCapabilities() : null,
       toscaElementFinder);
   fillRequirementsMap(
       requirements,
       indexedNodeType.getRequirements(),
       dependencies,
       templateToMerge != null ? templateToMerge.getRequirements() : null,
       toscaElementFinder);
   fillProperties(
       properties,
       indexedNodeType.getProperties(),
       templateToMerge != null ? templateToMerge.getProperties() : null);
   nodeTemplate.setCapabilities(capabilities);
   nodeTemplate.setRequirements(requirements);
   nodeTemplate.setProperties(properties);
   nodeTemplate.setAttributes(indexedNodeType.getAttributes());
   nodeTemplate.setInterfaces(indexedNodeType.getInterfaces());
   nodeTemplate.setArtifacts(deploymentArtifacts);
   if (templateToMerge != null && templateToMerge.getRelationships() != null) {
     nodeTemplate.setRelationships(templateToMerge.getRelationships());
   }
   return nodeTemplate;
 }