List<TRelationshipTemplate> removingIncomingRelationships = ModelUtilities.getAllRelationshipTemplates(topologyTemplate) .stream() .filter(ir -> replacementNodeTemplateCandidates.contains(ir.getTargetElement().getRef())) .collect(Collectors.toList()); List<TRelationshipTemplate> removingOutgoingRelationships = ModelUtilities.getAllRelationshipTemplates(topologyTemplate) .stream() .filter(ir -> replacementNodeTemplateCandidates.contains(ir.getSourceElement().getRef())) .collect(Collectors.toList());
if (substitutableNodeTemplate.getId().equals(tRelationshipTemplate.getSourceElement().getRef().getId())) { outgoingRelations.add(tRelationshipTemplate); if (substitutableNodeTemplate.getId().equals(tRelationshipTemplate.getTargetElement().getRef().getId())) { ingoingRelations.add(tRelationshipTemplate); ingoing.getTargetElement().setRef(tNodeTemplate); }); }); outgoing.getSourceElement().setRef(tNodeTemplate); }); });
/** * Converts TOSCA YAML RelationshipTemplate to TOSCA XML RelationshipTemplate Additional TOSCA YAML element * interfaces is not converted * * @param node TOSCA YAML RelationshipTemplate * @return TOSCA XML RelationshipTemplate */ private List<TRelationshipTemplate> convert(org.eclipse.winery.model.tosca.yaml.TRelationshipTemplate node, String id) { if (node == null) { return null; } List<TRelationshipTemplate> relationshipTemplates = new ArrayList<>(); int num = 0; String idName = id; while (this.relationshipSTMap.containsKey(idName)) { TRelationshipTemplate.SourceOrTargetElement sourceElement = new TRelationshipTemplate.SourceOrTargetElement(); sourceElement.setRef(this.nodeTemplateMap.get(this.relationshipSTMap.get(idName).getKey())); TRelationshipTemplate.SourceOrTargetElement targetElement = new TRelationshipTemplate.SourceOrTargetElement(); targetElement.setRef(this.nodeTemplateMap.get(this.relationshipSTMap.get(idName).getValue())); relationshipTemplates.add( new TRelationshipTemplate.Builder(idName, node.getType(), sourceElement, targetElement).build() ); idName = id + num++; } return relationshipTemplates; }
newHostedOnRelationship.setName(id); TRelationshipTemplate.SourceOrTargetElement sourceElement = new TRelationshipTemplate.SourceOrTargetElement(); TRelationshipTemplate.SourceOrTargetElement targetElement = new TRelationshipTemplate.SourceOrTargetElement(); sourceElement.setRef(predecessorOfNewHost); targetElement.setRef(newMatchingNodeTemplate); newHostedOnRelationship.setSourceElement(sourceElement); newHostedOnRelationship.setTargetElement(targetElement); .filter(rt -> rt.getSourceElement().getRef().equals(predecessorOfNewHost)) .forEach(rt -> rt.getTargetElement().setRef(newMatchingNodeTemplate)); ModelUtilities.getOutgoingRelationshipTemplates(topologyTemplate, originHost) .stream() .filter(r -> !getHostedOnSuccessorsOfNodeTemplate(topologyTemplate, originHost).contains(r.getTargetElement().getRef())) .collect(Collectors.toList());
.filter(rt -> rt.getSourceElement().getRef() instanceof TRequirement) .forEach(rt -> { TRequirement sourceElement = (TRequirement) rt.getSourceElement().getRef(); if (sourceElement.getId().equalsIgnoreCase(oldReq.getId())) { sourceElement.setId(req.getId()); .filter(rt -> rt.getTargetElement().getRef() instanceof TCapability) .forEach(rt -> { TCapability targetElement = (TCapability) rt.getTargetElement().getRef(); if (targetElement.getId().equalsIgnoreCase(oldCap.getId())) { targetElement.setId(cap.getId()); RelationshipSourceOrTarget source = rel.getSourceElement().getRef(); RelationshipSourceOrTarget target = rel.getTargetElement().getRef();
Object sourceElementIncommingRel = incomingRelationship.getSourceElement().getRef();
TNodeTemplate target = (TNodeTemplate) tRelationshipTemplate.getTargetElement().getRef(); TNodeTemplate source = (TNodeTemplate) tRelationshipTemplate.getSourceElement().getRef(); TNodeTemplateExtended targetNode = new TNodeTemplateExtended(); TNodeTemplateExtended sourceNode = new TNodeTemplateExtended();
if (outgoingRelationships != null && !outgoingRelationships.isEmpty()) { for (TRelationshipTemplate relationshipTemplate : outgoingRelationships) { if (relationshipTemplate.getSourceElement().getRef() instanceof TNodeTemplate) { successorsOfNodeTemplate.add((TNodeTemplate) relationshipTemplate.getTargetElement().getRef()); } else { TCapability targetElement = (TCapability) relationshipTemplate.getTargetElement().getRef(); successorsOfNodeTemplate.add(nodeTemplates.stream() .filter(nt -> nt.getCapabilities() != null)
TRelationshipTemplate clonedRT = cloneNotEqual(relationshipTemplate); if (relationshipTemplate.getSourceElement().getRef() instanceof TNodeTemplate) { clonedRT.setSourceNodeTemplate(clonedNTsByIds.get(relationshipTemplate.getSourceElement().getRef().getId())); } else { TRelationshipTemplate.SourceOrTargetElement source = new TRelationshipTemplate.SourceOrTargetElement(); source.setRef(relationshipTemplate.getSourceElement().getRef()); clonedRT.setSourceElement(source); if (relationshipTemplate.getTargetElement().getRef() instanceof TNodeTemplate) { clonedRT.setTargetNodeTemplate(clonedNTsByIds.get(relationshipTemplate.getTargetElement().getRef().getId())); } else { TRelationshipTemplate.SourceOrTargetElement target = new TRelationshipTemplate.SourceOrTargetElement(); target.setRef(relationshipTemplate.getTargetElement().getRef()); clonedRT.setTargetElement(target);
if (relationMapping.getDirection() == TRelationDirection.INGOING && (Objects.isNull(relationMapping.getValidSourceOrTarget()) || relationship.getSourceElement().getRef().getType().equals(relationMapping.getValidSourceOrTarget())) ) { || relationship.getTargetElement().getRef().getType().equals(relationMapping.getValidSourceOrTarget())) { if (Objects.nonNull(idMapping)) { String id = idMapping.get(relationMapping.getRefinementNode().getId());
matchingRelationshipTemplate.setName(id); matchingRelationshipTemplate.setType(relationshipTypeQName); TRelationshipTemplate.SourceOrTargetElement sourceElement = new TRelationshipTemplate.SourceOrTargetElement(); TRelationshipTemplate.SourceOrTargetElement targetElement = new TRelationshipTemplate.SourceOrTargetElement(); sourceElement.setRef(requirement); targetElement.setRef(capability); matchingRelationshipTemplate.setSourceElement(sourceElement); matchingRelationshipTemplate.setTargetElement(targetElement);
@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() ); }
/** * Switch the target of a relationship to a new node template * * @param incomingRel all relationships which has to be switched to a new target element * @param newTarget the new target element * @return list of the reassigned relationships */ private List<TRelationshipTemplate> reassignIncomingRelationships(List<TRelationshipTemplate> incomingRel, TNodeTemplate newTarget) { List<TRelationshipTemplate> newIncomingRel = new ArrayList<>(); for (TRelationshipTemplate incomingRelationship : incomingRel) { TRelationshipTemplate newIncomingRelationship = BackendUtils.clone(incomingRelationship); TRelationshipTemplate.SourceOrTargetElement targetElementNew = new TRelationshipTemplate.SourceOrTargetElement(); targetElementNew.setRef(newTarget); newIncomingRelationship.setTargetElement(targetElementNew); //TargetLable is only appended if not done yet if (incomingRelationship.getId().contains(ModelUtilities.getTargetLabel(newTarget).get())) { newIncomingRelationship.setId(Util.makeNCName(incomingRelationship.getId())); newIncomingRelationship.setName(Util.makeNCName(incomingRelationship.getName())); } else { newIncomingRelationship.setId(Util.makeNCName(incomingRelationship.getId() + "-" + ModelUtilities.getTargetLabel(newTarget).get())); newIncomingRelationship.setName(Util.makeNCName(incomingRelationship.getName() + "-" + ModelUtilities.getTargetLabel(newTarget).get())); } newIncomingRel.add(newIncomingRelationship); } return newIncomingRel; }
/** * This method instantiates a {@link TRelationshipTemplate} for a given {@link TRelationshipType}. * * @param relationshipType the {@link TRelationshipType} used for the {@link TRelationshipTemplate} * instantiation. * @param sourceNodeTemplate the source {@link TNodeTemplate} of the connection * @param targetNodeTemplate the target {@link TNodeTemplate} of the connection * @return the instantiated {@link TRelationshipTemplate} */ public static TRelationshipTemplate instantiateRelationshipTemplate(TRelationshipType relationshipType, TNodeTemplate sourceNodeTemplate, TNodeTemplate targetNodeTemplate) { TRelationshipTemplate relationshipTemplate = new TRelationshipTemplate(); relationshipTemplate.setId(UUID.randomUUID().toString()); relationshipTemplate.setName(relationshipType.getName()); relationshipTemplate.setType(new QName(relationshipType.getTargetNamespace(), relationshipType.getName())); // connect the NodeTemplates SourceOrTargetElement source = new SourceOrTargetElement(); source.setRef(sourceNodeTemplate); relationshipTemplate.setSourceElement(source); SourceOrTargetElement target = new SourceOrTargetElement(); target.setRef(targetNodeTemplate); relationshipTemplate.setTargetElement(target); return relationshipTemplate; }
/** * Switch the source of a relationship to a new node template * * @param outgoingRel all relationships which has to be switched to a new source element * @param newSource the new source element * @return list of the reassigned relationships */ private List<TRelationshipTemplate> reassignOutgoingRelationships(List<TRelationshipTemplate> outgoingRel, TNodeTemplate newSource) { List<TRelationshipTemplate> newOutgoingRel = new ArrayList<>(); for (TRelationshipTemplate outgoingRelationship : outgoingRel) { TRelationshipTemplate newOutgoingRelationship = BackendUtils.clone(outgoingRelationship); TRelationshipTemplate.SourceOrTargetElement sourceElementNew = new TRelationshipTemplate.SourceOrTargetElement(); sourceElementNew.setRef(newSource); newOutgoingRelationship.setSourceElement(sourceElementNew); //TargetLable is only appended if not done yet if (outgoingRelationship.getId().contains(ModelUtilities.getTargetLabel(newSource).get())) { newOutgoingRelationship.setId(Util.makeNCName(outgoingRelationship.getId())); newOutgoingRelationship.setName(Util.makeNCName(outgoingRelationship.getName())); } else { newOutgoingRelationship.setId(Util.makeNCName(outgoingRelationship.getId() + "-" + ModelUtilities.getTargetLabel(newSource).get())); newOutgoingRelationship.setName(Util.makeNCName(outgoingRelationship.getName() + "-" + ModelUtilities.getTargetLabel(newSource).get())); } newOutgoingRel.add(newOutgoingRelationship); } return newOutgoingRel; }
/** * Get the lowest node in a topology, this is the only node with any outgoing relation */ private void getLowestNode(TNodeTemplate baseNodeTemplate, List<TRelationshipTemplate> tRelationshipTemplateList) { List<TRelationshipTemplate> outgoing = new ArrayList<>(); List<TRelationshipTemplate> incoming = new ArrayList<>(); for (TRelationshipTemplate tRelationshipTemplate : tRelationshipTemplateList) { if (baseNodeTemplate.equals((tRelationshipTemplate.getSourceElement().getRef()))) { outgoing.add(tRelationshipTemplate); getLowestNode((TNodeTemplate) tRelationshipTemplate.getTargetElement().getRef(), tRelationshipTemplateList); break; } else { incoming.add(tRelationshipTemplate); } } if (outgoing.isEmpty()) { // lowestNode is set basisNodeTemplate = baseNodeTemplate; } } }
public static ToscaGraph createTOSCAGraph(TTopologyTemplate topologyTemplate) { ToscaGraph graph = new ToscaGraph(new ToscaEdgeFactory()); @NonNull List<TRelationshipTemplate> relationshipTemplates = topologyTemplate.getRelationshipTemplates(); @NonNull List<TNodeTemplate> nodeTemplates = topologyTemplate.getNodeTemplates(); Map<TNodeTemplate, ToscaNode> nodes = new HashMap<>(); for (TNodeTemplate nodeTemplate : nodeTemplates) { ToscaNode node = createAndInitializeTOSCANode(nodeTemplate); nodes.put(nodeTemplate, node); graph.addVertex(node); } for (TRelationshipTemplate tRelationshipTemplate : relationshipTemplates) { ToscaNode source = nodes.get(tRelationshipTemplate.getSourceElement().getRef()); ToscaNode target = nodes.get(tRelationshipTemplate.getTargetElement().getRef()); ToscaEdge edge = graph.addEdge(source, target); initializeTOSCAEdge(tRelationshipTemplate, edge); } return graph; }
public Stream<TRelationshipTemplate> getExternalRelations(TNodeTemplate matchingNode, RefinementCandidate candidate, TTopologyTemplate topology) { return topology.getRelationshipTemplates().stream() .filter(relationship -> // all relationships which have the matchingNode as source or target // -> \pi_1(rm_x) = \pi_2(sgm_i) matchingNode.getId().equals(relationship.getSourceElement().getRef().getId()) || matchingNode.getId().equals(relationship.getTargetElement().getRef().getId()) ).filter(relationship -> { // ignore all relationships which are part of the sub-graph // \nexists sgm_y \in sgms : \pi_1(sgm_y) = r_j return candidate.getDetectorGraph().edgeSet() .stream() .noneMatch(toscaEdge -> { ToscaEdge edgeCorrespondence = candidate.getGraphMapping().getEdgeCorrespondence(toscaEdge, false); return edgeCorrespondence.getTemplate().equals(relationship); }); }); }
private List<TEntityTemplate> breadthFirstSearch(TNodeTemplate nodeTemplate, TTopologyTemplate topologyTemplate) { List<TEntityTemplate> topologyFragmentElements = new ArrayList<>(); topologyFragmentElements.add(nodeTemplate); List<TRelationshipTemplate> outgoingRelationships = ModelUtilities.getOutgoingRelationshipTemplates(topologyTemplate, nodeTemplate); for (TRelationshipTemplate outgoingRelationship : outgoingRelationships) { Object successor = outgoingRelationship.getTargetElement().getRef(); if (successor instanceof TNodeTemplate) { topologyFragmentElements.add(outgoingRelationship); topologyFragmentElements.addAll(breadthFirstSearch((TNodeTemplate) successor, topologyTemplate)); } } return topologyFragmentElements; } }
public static TNodeTemplate getTargetNodeTemplateOfRelationshipTemplate(TTopologyTemplate topologyTemplate, TRelationshipTemplate relationshipTemplate) { if (relationshipTemplate.getTargetElement().getRef() instanceof TCapability) { TCapability capability = (TCapability) relationshipTemplate.getTargetElement().getRef(); return topologyTemplate.getNodeTemplates().stream() .filter(nt -> nt.getRequirements().getRequirement() != null) .filter(nt -> nt.getRequirements().getRequirement().contains(capability)) .findAny().get(); } else { return (TNodeTemplate) relationshipTemplate.getTargetElement().getRef(); } }