public boolean isPropertiesCompatible(ToscaNode left, ToscaNode right) { if (left.getTemplate().getProperties() != null) { if (right.getTemplate().getProperties() != null) { for (Entry<String, String> leftEntry : left.getTemplate().getProperties().getKVProperties().entrySet()) { if (!isPropertyCompatible(leftEntry, right.getTemplate().getProperties().getKVProperties())) { return false; } } } else { return false; } } return true; }
public void applyPropertyMappings(RefinementCandidate refinement, String detectorNodeId, TNodeTemplate matchingNode, TTopologyTemplate topology, Map<String, String> idMapping) { TPatternRefinementModel.TPrmPropertyMappings propertyMappings = ((TPatternRefinementModel) refinement.getRefinementModel()).getPropertyMappings(); if (Objects.nonNull(propertyMappings)) { propertyMappings.getPropertyMapping() .stream() .filter(mapping -> mapping.getDetectorNode().getId().equals(detectorNodeId)) .forEach(mapping -> { Map<String, String> sourceProperties = matchingNode.getProperties().getKVProperties(); TEntityTemplate.Properties properties = topology .getNodeTemplate(idMapping.get(mapping.getRefinementNode().getId())) .getProperties(); Map<String, String> targetProperties = properties.getKVProperties(); if (Objects.nonNull(matchingNode.getProperties()) && Objects.nonNull(sourceProperties) && !sourceProperties.isEmpty() && Objects.nonNull(targetProperties)) { if (mapping.getType() == TPrmPropertyMappingType.ALL) { sourceProperties.forEach(targetProperties::replace); } else { // TPrmPropertyMappingType.SELECTIVE String sourceValue = sourceProperties.get(mapping.getDetectorProperty()); targetProperties.put(mapping.getRefinementProperty(), sourceValue); } // because of the dynamical generation of the KV properties, we must set them again to persist them... properties.setKVProperties(targetProperties); } }); } }
@NonNull public Map<String, TNodeTemplate> convert(org.eclipse.winery.model.tosca.TNodeTemplate node, @NonNull List<org.eclipse.winery.model.tosca.TRelationshipTemplate> rTs) { if (Objects.isNull(node)) return new LinkedHashMap<>(); return Collections.singletonMap( node.getIdFromIdOrNameField(), new TNodeTemplate.Builder( convert( node.getType(), new NodeTypeId(node.getType()) )) .setProperties(convert(node, node.getProperties())) .setRequirements(convert(node.getRequirements())) .addRequirements(rTs.stream() .filter(entry -> Objects.nonNull(entry.getSourceElement()) && entry.getSourceElement().getRef().equals(node)) .map(entry -> new LinkedHashMap.SimpleEntry<>( Optional.ofNullable(entry.getName()).orElse(entry.getId()), new TRequirementAssignment.Builder() .setNode(new QName(entry.getTargetElement().getRef().getId())) .build() )) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)) ) .setCapabilities(convert(node.getCapabilities())) .setArtifacts(convert(node.getDeploymentArtifacts())) .build() ); }
/** * @param nodeTemplate which should be cloned * @return copy of nodeTemplate */ public static TNodeTemplate clone(TNodeTemplate nodeTemplate) { TNodeTemplate nodeTemplateClone = new TNodeTemplate(); nodeTemplateClone.setType(nodeTemplate.getType()); nodeTemplateClone.setId(nodeTemplate.getId()); nodeTemplateClone.setDeploymentArtifacts(nodeTemplate.getDeploymentArtifacts()); // returns 1 if null -> !original.equals(cloned) nodeTemplateClone.setMaxInstances(nodeTemplate.getMaxInstances()); nodeTemplateClone.setMinInstances(nodeTemplate.getMinInstances()); nodeTemplateClone.setName(nodeTemplate.getName()); nodeTemplateClone.setPolicies(nodeTemplate.getPolicies()); nodeTemplateClone.setRequirements(nodeTemplate.getRequirements()); nodeTemplateClone.setCapabilities(nodeTemplate.getCapabilities()); nodeTemplateClone.setProperties(nodeTemplate.getProperties()); nodeTemplateClone.setPropertyConstraints(nodeTemplate.getPropertyConstraints()); nodeTemplateClone.setX(nodeTemplate.getX()); nodeTemplateClone.setY(nodeTemplate.getY()); if (ModelUtilities.getTargetLabel(nodeTemplate).isPresent()) { ModelUtilities.setTargetLabel(nodeTemplateClone, ModelUtilities.getTargetLabel(nodeTemplate).get()); } return nodeTemplateClone; }