1 package org.openecomp.sdc.be.components.merge;
3 import org.openecomp.sdc.be.model.ComponentInstance;
4 import org.openecomp.sdc.be.model.RelationshipInfo;
5 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
6 import org.openecomp.sdc.be.model.Resource;
7 import org.springframework.stereotype.Component;
11 import java.util.Optional;
14 public class RelationsComparator {
18 * @param oldResource the old resource
19 * @param newResource the new resource
20 * @return true if there was a change in one of the relations between the old and new resource
21 * a change in relation is determine by comparing the relations type, node, capability and requirement name
23 public boolean isRelationsChanged(Resource oldResource, Resource newResource) {
24 Map<String, List<RequirementCapabilityRelDef>> oldRelationsByInstance = oldResource.groupRelationsByInstanceName(oldResource);
25 Map<String, List<RequirementCapabilityRelDef>> newRelationsByInstance = newResource.groupRelationsByInstanceName(newResource);
26 for (Map.Entry<String, List<RequirementCapabilityRelDef>> relationByInst : newRelationsByInstance.entrySet()) {
27 List<RequirementCapabilityRelDef> oldRelations = oldRelationsByInstance.get(relationByInst.getKey());
28 List<RequirementCapabilityRelDef> newRelations = relationByInst.getValue();
29 if (isInstanceRelationsChanged(oldResource, oldRelations, newResource, newRelations)) {
37 private boolean isInstanceRelationsChanged(Resource oldResource, List<RequirementCapabilityRelDef> oldRelations, Resource newResource, List<RequirementCapabilityRelDef> newRelations) {
38 if (oldRelations == null || oldRelations.size() != newRelations.size()){
41 return newRelations.stream().anyMatch(newRelation -> !findRelation(oldResource, oldRelations, newResource, newRelation));
46 private boolean findRelation(Resource oldResource, List<RequirementCapabilityRelDef> oldRelations, Resource newResource, RequirementCapabilityRelDef newRelation) {
47 for (RequirementCapabilityRelDef oldRelation : oldRelations) {
48 RelationshipInfo oldRelationship = oldRelation.resolveSingleRelationship().getRelation();
49 RelationshipInfo newRelationship = newRelation.resolveSingleRelationship().getRelation();
50 if (oldRelationship != null && newRelationship != null && isRelationEqual(oldRelationship, newRelationship) && isRelationToNodeEquals(oldResource, oldRelation, newResource, newRelation)) {
57 private boolean isRelationToNodeEquals(Resource oldResource, RequirementCapabilityRelDef oldRelation, Resource newResource, RequirementCapabilityRelDef newRelation) {
58 String oldToNodeId = oldRelation.getToNode();
59 String newToNodeId = newRelation.getToNode();
60 Optional<ComponentInstance> oldRelationToNode = oldResource.getComponentInstanceById(oldToNodeId);
61 Optional<ComponentInstance> newRelationToNode = newResource.getComponentInstanceById(newToNodeId);
62 return oldRelationToNode.isPresent() && newRelationToNode.isPresent() && oldRelationToNode.get().getName().equals(newRelationToNode.get().getName());
65 private boolean isRelationEqual(RelationshipInfo oldRelationship, RelationshipInfo newRelationship) {
66 return isRelationshipTypeEquals(oldRelationship, newRelationship) &&
67 isRelationshipCapabilityEquals(oldRelationship, newRelationship) &&
68 isRelationshipReqNameEquals(oldRelationship, newRelationship);
71 private boolean isRelationshipCapabilityEquals(RelationshipInfo oldRelationship, RelationshipInfo newRelationship) {
72 if(oldRelationship.getCapabilityUid() !=null && newRelationship.getCapabilityUid() != null){
73 return oldRelationship.getCapabilityUid().equals(newRelationship.getCapabilityUid());
75 else if(oldRelationship.getCapabilityUid() == null && newRelationship.getCapabilityUid() == null){
81 private boolean isRelationshipTypeEquals(RelationshipInfo oldRelationship, RelationshipInfo newRelationship) {
82 return oldRelationship.getRelationship().getType().equals(newRelationship.getRelationship().getType());
85 private boolean isRelationshipReqNameEquals(RelationshipInfo oldRelationship, RelationshipInfo newRelationship) {
86 if(oldRelationship.getRequirement() != null && newRelationship.getRequirement() != null){
87 return oldRelationship.getRequirement().equals(newRelationship.getRequirement());
89 else if(oldRelationship.getRequirement() == null && newRelationship.getRequirement() == null){