private static void fillRequirementsMap(Map<String, Requirement> map, List<RequirementDefinition> elements, Map<String, Requirement> mapToMerge, boolean adaptToType) { if (elements == null) { return; } for (RequirementDefinition requirement : elements) { Requirement toAddRequirement = MapUtils.getObject(mapToMerge, requirement.getId()); // the type of a requirement is a capability type in TOSCA as they match each other. CapabilityType requirementType = ToscaContext.get(CapabilityType.class, requirement.getType()); if (toAddRequirement == null || !Objects.equals(toAddRequirement.getType(), requirement.getType())) { toAddRequirement = new Requirement(); toAddRequirement.setType(requirement.getType()); } Map<String, AbstractPropertyValue> properties = Maps.newLinkedHashMap(); fillProperties(properties, requirementType != null ? requirementType.getProperties() : null, toAddRequirement.getProperties(), adaptToType); toAddRequirement.setProperties(properties); map.put(requirement.getId(), toAddRequirement); } }
@Override public void process(Map.Entry<String, Requirement> instance) { String definitionVersion = ParsingContextExecution.getDefinitionVersion(); // Note both post processors below are optional post processors and applied based on DSL version. // In previous alien DSL we authorized a dependency on a node type and not just capability type. // TODO Handle multiple version post processor switch (definitionVersion) { case "tosca_simple_yaml_1_0_0_wd03": case "alien_dsl_1_1_0": case "alien_dsl_1_2_0": capabilityOrNodeReferencePostProcessor.process(new ReferencePostProcessor.TypeReference(instance, instance.getValue().getType())); break; default: // In latest versions we process the capability only. capabilityReferencePostProcessor.process(new ReferencePostProcessor.TypeReference(instance, instance.getValue().getType())); break; } CapabilityType capabilityType = ToscaContext.get(CapabilityType.class, instance.getValue().getType()); propertyValueChecker.checkProperties(capabilityType, instance.getValue().getProperties(), instance.getKey()); } }
&& requirements.get(capabilityOrRequirementName).getProperties() != null) { propertyValue = requirements.get(capabilityOrRequirementName).getProperties().get(elementName);
/** * Check if the upperBound of a requirement is reached on a node template * * @param nodeTemplate the node to check for requirement bound * @param requirementName the name of the requirement * @param dependencies the dependencies of the topology * @return true if requirement upper bound is reached, false otherwise */ public boolean isRequirementUpperBoundReachedForSource(NodeTemplate nodeTemplate, String requirementName, Set<CSARDependency> dependencies) { NodeType relatedIndexedNodeType = toscaTypeSearchService.getRequiredElementInDependencies(NodeType.class, nodeTemplate.getType(), dependencies); Requirement requirement = nodeTemplate.getRequirements().get(requirementName); if (nodeTemplate.getRelationships() == null || nodeTemplate.getRelationships().isEmpty()) { return false; } RequirementDefinition requirementDefinition = getRequirementDefinition(relatedIndexedNodeType.getRequirements(), requirementName, requirement.getType()); if (requirementDefinition.getUpperBound() == Integer.MAX_VALUE) { return false; } int count = countRelationshipsForRequirement(nodeTemplate, requirementDefinition); return count >= requirementDefinition.getUpperBound(); }
for (Entry<String, Requirement> requirementEntry : nodeTemplate.getRequirements().entrySet()) { Requirement requirement = requirementEntry.getValue(); processGetInput(evaluatorContext, nodeTemplate, requirement.getProperties());
relationshipTemplate.setTargetedCapabilityName(operation.getTargetedCapabilityName()); relationshipTemplate.setRequirementName(operation.getRequirementName()); relationshipTemplate.setRequirementType(sourceNode.getRequirements().get(operation.getRequirementName()).getType()); relationshipTemplate.setType(indexedRelationshipType.getElementId()); relationshipTemplate.setArtifacts(newLinkedHashMap(indexedRelationshipType.getArtifacts()));
Requirement requirement = safe(((NodeTemplate) targetTemplate).getRequirements()).get(function.getCapabilityOrRequirementName()); if (requirement != null) { propertyValue = getFromPath(evaluatorContext, targetTemplate, requirement.getProperties(), function.getElementNameToFetch());