use of org.eclipse.winery.model.tosca.TRequirementDefinition in project winery by eclipse.
the class DataFlowResource method createNodeTemplate.
/**
* Create a NodeTemplate corresponding to the given filter with the given type, properties and artifacts and add it
* to the topology of the incomplete deployment model.
*/
private TTopologyTemplate createNodeTemplate(TTopologyTemplate topology, NodeTypeId nodeTypeId, String templateName, Map<String, String> properties, List<QName> artifacts) {
// get NodeType to access Requirements for the completion and available properties
IRepository repo = RepositoryFactory.getRepository();
TNodeType nodeType = repo.getElement(nodeTypeId);
if (Objects.isNull(nodeType)) {
return null;
}
TNodeTemplate.Builder templateBuilder = new TNodeTemplate.Builder(templateName, nodeTypeId.getQName());
// add the defined properties to the NodeTemplate
if (Objects.nonNull(properties)) {
LinkedHashMap<String, String> propertyList = new LinkedHashMap<>();
if (Objects.nonNull(nodeType.getWinerysPropertiesDefinition())) {
// add empty property for NodeType properties to avoid errors due to missing properties
WinerysPropertiesDefinition def = nodeType.getWinerysPropertiesDefinition();
for (PropertyDefinitionKV prop : def.getPropertyDefinitions()) {
propertyList.put(prop.getKey(), "");
}
}
// add all properties which are defined at the filter
propertyList.putAll(properties);
TEntityTemplate.WineryKVProperties nodeProperties = new TEntityTemplate.WineryKVProperties();
nodeProperties.setKVProperties(propertyList);
templateBuilder.setProperties(nodeProperties);
}
// add all requirements which are defined by the corresponding NodeType
if (nodeType.getRequirementDefinitions() != null) {
for (TRequirementDefinition requirementDef : nodeType.getRequirementDefinitions()) {
String requirementId = templateName + "-" + requirementDef.getName();
templateBuilder.addRequirement(new TRequirement.Builder(requirementId, requirementDef.getName(), requirementDef.getRequirementType()).build());
}
}
// add the DAs to the NodeTemplate
if (Objects.nonNull(artifacts) && !artifacts.isEmpty()) {
LOGGER.debug("{} artifacts specified for filter {}", artifacts.size(), templateName);
// get the IDs of all available ArtifactTemplates
List<ArtifactTemplateId> artifactTemplateIds = repo.getAllDefinitionsChildIds().stream().filter(id -> id.getGroup().equals(ARTIFACT_TEMPLATE_GROUP) && id instanceof ArtifactTemplateId).map(id -> (ArtifactTemplateId) id).collect(Collectors.toList());
for (QName artifactName : artifacts) {
Optional<ArtifactTemplateId> idOptional = artifactTemplateIds.stream().filter(id -> id.getQName().equals(artifactName)).findFirst();
if (idOptional.isPresent()) {
ArtifactTemplateId artifactTemplateId = idOptional.get();
TArtifactTemplate artifactTemplate = repo.getElement(artifactTemplateId);
templateBuilder.addDeploymentArtifact(new TDeploymentArtifact.Builder(artifactName.toString(), artifactTemplate.getType()).setArtifactRef(artifactName).build());
} else {
LOGGER.warn("Filter '{}' specifies DA with name '{}' but no such artifact available in repository!", templateName, artifactName);
}
}
}
topology.addNodeTemplate(templateBuilder.build());
return topology;
}
Aggregations