Catalog alignment
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / merge / utils / MergeInstanceUtils.java
index 9098883..00a2f68 100644 (file)
@@ -27,13 +27,24 @@ import org.openecomp.sdc.be.components.impl.utils.ExceptionUtils;
 import org.openecomp.sdc.be.components.merge.instance.RelationMergeInfo;
 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
-import org.openecomp.sdc.be.model.*;
+import org.openecomp.sdc.be.model.CapabilityDefinition;
+import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.ComponentInstance;
+import org.openecomp.sdc.be.model.RelationshipInfo;
+import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
+import org.openecomp.sdc.be.model.RequirementDefinition;
+import org.openecomp.sdc.be.model.Resource;
 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
 import org.openecomp.sdc.be.model.jsonjanusgraph.utils.ModelConverter;
 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
 import org.openecomp.sdc.common.log.wrappers.Logger;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
@@ -99,11 +110,11 @@ public class MergeInstanceUtils {
      * @param newResource - new version of the same Resource
      * @return list of updated Relations created in UI
      */
-    public List<RequirementCapabilityRelDef> updateUiRelationsInResource(Resource oldResource, Resource newResource) {
+    public List<RequirementCapabilityRelDef> getUpdatedUiRelations(Component oldResource, Component newResource) {
         Map<String, ComponentInstance> mapOldComponentInstances = buildComponentInstanceMap(oldResource, ComponentInstance::getUniqueId);
         Map<String, ComponentInstance> mapNewComponentInstances = buildComponentInstanceMap(newResource, ComponentInstance::getName);
 
-        return getUpdatedCapReqDefs(oldResource,
+        return getUpdatedCapReqDefs(oldResource, newResource,
                 mapOldComponentInstances,
                 mapNewComponentInstances,
                 RequirementCapabilityRelDef::isOriginUI);
@@ -276,12 +287,12 @@ public class MergeInstanceUtils {
     
 
 
-    private Map<String, ComponentInstance> buildComponentInstanceMap(Resource oldRresource, Function<ComponentInstance, String> getKeyFunc) {
+    private Map<String, ComponentInstance> buildComponentInstanceMap(Component oldRresource, Function<ComponentInstance, String> getKeyFunc) {
         return oldRresource.getComponentInstances().stream()
                 .collect(Collectors.toMap(getKeyFunc, Function.identity(), (p1, p2) -> p1));
     }
 
-    private List<RequirementCapabilityRelDef> getUpdatedCapReqDefs(Resource oldResource,
+    private List<RequirementCapabilityRelDef> getUpdatedCapReqDefs(Component oldResource, Component newComponent,
                                                                    Map<String, ComponentInstance> mapOldComponentInstances,
                                                                    Map<String, ComponentInstance> mapNewComponentInstances,
                                                                    Predicate<? super RequirementCapabilityRelDef> filter) {
@@ -290,9 +301,36 @@ public class MergeInstanceUtils {
                         .map(rel -> createRelationMergeInfoPair(rel, mapOldComponentInstances))
                         .map(infoPair -> restoreRequirementCapabilityRelDef(infoPair, mapNewComponentInstances))
                         .filter(Objects::nonNull)
+                        .filter(r-> capReqMatchExist(r, newComponent))
                         .collect(Collectors.toList());
     }
 
+
+    private boolean capReqMatchExist(RequirementCapabilityRelDef rel, Component currentComponent) {
+        return currentComponent.getComponentInstances().stream()
+                    .anyMatch(i->isFromInstance(i, rel)) &&
+                currentComponent.getComponentInstances().stream()
+                    .anyMatch(i->isToInstance(i, rel));
+    }
+
+    private boolean isToInstance(ComponentInstance inst, RequirementCapabilityRelDef rel) {
+        return inst.getUniqueId().equals(rel.getToNode()) &&
+                inst.getCapabilities().values()
+                        .stream()
+                        .flatMap(Collection::stream)
+                        .anyMatch(cap->cap.getName().equals(rel.resolveSingleRelationship().getRelation().getCapability())
+                                && cap.getOwnerId().equals(rel.resolveSingleRelationship().getRelation().getCapabilityOwnerId()));
+    }
+
+    private boolean isFromInstance(ComponentInstance inst, RequirementCapabilityRelDef rel) {
+        return inst.getUniqueId().equals(rel.getFromNode()) &&
+                inst.getRequirements().values()
+                        .stream()
+                        .flatMap(Collection::stream)
+                        .anyMatch(req->req.getName().equals(rel.resolveSingleRelationship().getRelation().getRequirement())
+                                && req.getOwnerId().equals(rel.resolveSingleRelationship().getRelation().getRequirementOwnerId()));
+    }
+
     private ImmutablePair<RelationMergeInfo, RelationMergeInfo> createRelationMergeInfoPair(RequirementCapabilityRelDef reqCapDef,
                                                                                             Map<String, ComponentInstance> mapOldComponentInstances) {
         
@@ -331,11 +369,13 @@ public class MergeInstanceUtils {
     }
 
     private RequirementCapabilityRelDef restoreRequirementRelDef(ImmutablePair<RelationMergeInfo, RelationMergeInfo> mergeInfoPair, Map<String, ComponentInstance> mapNewComponentInstances) {
-        RequirementCapabilityRelDef capRelDefFrom;
+        RequirementCapabilityRelDef capRelDefFrom = null;
         RelationMergeInfo mergeInfoFrom = mergeInfoPair.getLeft();
         if (mergeInfoFrom != null) {
             ComponentInstance newComponentInstanceFrom = mapNewComponentInstances.get(mergeInfoFrom.getCapOwnerName());
-            capRelDefFrom = restoreRequirementRelDef(newComponentInstanceFrom, mergeInfoFrom,  newComponentInstanceFrom.getUniqueId());
+            if(newComponentInstanceFrom != null){
+                capRelDefFrom = restoreRequirementRelDef(newComponentInstanceFrom, mergeInfoFrom,  newComponentInstanceFrom.getUniqueId());
+            }
         }
         else {
             capRelDefFrom = null;