/** * 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; }