re base code
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / merge / capability / SimpleCapabilityResolver.java
1 package org.openecomp.sdc.be.components.merge.capability;
2
3 import org.openecomp.sdc.be.components.merge.utils.MergeInstanceUtils;
4 import org.openecomp.sdc.be.dao.utils.MapUtil;
5 import org.openecomp.sdc.be.model.CapabilityDefinition;
6 import org.openecomp.sdc.be.model.Component;
7 import org.openecomp.sdc.be.model.ComponentInstance;
8
9 import java.util.*;
10
11 import static java.util.stream.Collectors.toList;
12 import static org.openecomp.sdc.be.dao.utils.MapUtil.flattenMapValues;
13 @org.springframework.stereotype.Component
14 public class SimpleCapabilityResolver implements CapabilityResolver {
15
16     private MergeInstanceUtils mergeInstanceUtils;
17
18     public SimpleCapabilityResolver(MergeInstanceUtils mergeInstanceUtils) {
19         this.mergeInstanceUtils = mergeInstanceUtils;
20     }
21
22     @Override
23     public Map<CapabilityDefinition, CapabilityDefinition> resolvePrevCapToNewCapability(Component container, Component prevInstanceOrigNode, String cmptInstanceId, List<CapabilityDefinition> prevCapabilities) {
24         List<CapabilityDefinition> newCapabilities = resolveInstanceCapabilities(container, cmptInstanceId);
25         Map<String, String> oldCapOwnerToNewOwner = mapOldToNewCapabilitiesOwnerIds(container, prevInstanceOrigNode, cmptInstanceId, prevCapabilities);
26         return mapOldToNewCapabilities(prevCapabilities, newCapabilities, oldCapOwnerToNewOwner);
27     }
28
29     @Override
30     public Map<CapabilityDefinition, CapabilityDefinition> resolvePrevCapIdToNewCapability(ComponentInstance oldInstance, ComponentInstance currInstance) {
31         List<CapabilityDefinition> newCapabilities = flattenMapValues(currInstance.getCapabilities());
32         List<CapabilityDefinition> prevCapabilities = flattenMapValues(oldInstance.getCapabilities());
33         Map<String, String> oldCapOwnerToNewOwner = mergeInstanceUtils.mapOldToNewCapabilitiesOwnerIds(oldInstance, currInstance);
34         return mapOldToNewCapabilities(prevCapabilities, newCapabilities, oldCapOwnerToNewOwner);
35     }
36
37     private Map<CapabilityDefinition, CapabilityDefinition> mapOldToNewCapabilities(List<CapabilityDefinition> prevCapabilities, List<CapabilityDefinition> newCapabilities, Map<String, String> oldCapOwnerToNewOwner) {
38         Map<CapabilityDefinition, CapabilityDefinition> oldToNewCapability = findNewCapByPrevCapabilityNameTypeAndOwner(prevCapabilities, newCapabilities, oldCapOwnerToNewOwner);
39         removeNotFoundNewCapabilities(oldToNewCapability);
40         return oldToNewCapability;
41     }
42
43     private Map<CapabilityDefinition, CapabilityDefinition> findNewCapByPrevCapabilityNameTypeAndOwner(List<CapabilityDefinition> prevCapabilities, List<CapabilityDefinition> newCapabilities, Map<String, String> oldCapOwnerToNewOwner) {
44         Map<CapabilityDefinition, CapabilityDefinition> prevToNewCapabilityMapping = new HashMap<>();
45         prevCapabilities.forEach(prevCap -> {
46             CapabilityDefinition newCapability = mapOldToNewCapability(prevCap, newCapabilities, oldCapOwnerToNewOwner);
47             prevToNewCapabilityMapping.put(prevCap, newCapability);
48         });
49         return prevToNewCapabilityMapping;
50     }
51
52     private CapabilityDefinition mapOldToNewCapability(CapabilityDefinition prevCap, List<CapabilityDefinition> newCapabilities, Map<String, String> oldCapOwnerToNewOwner) {
53         String newOwnerId = oldCapOwnerToNewOwner.get(prevCap.getOwnerId());
54         return newCapabilities.stream()
55                        .filter(newCap -> newCap.getName().equals(prevCap.getName()))
56                        .filter(newCap -> newCap.getType().equals(prevCap.getType()))
57                        .filter(newCap -> newCap.getOwnerId().equals(newOwnerId))
58                        .findFirst()
59                        .orElse(null);
60     }
61
62
63     private Map<String, String> mapOldToNewCapabilitiesOwnerIds(Component container, Component origInstanceNode, String cmptInstanceId, List<CapabilityDefinition> prevCapabilities) {
64         List<String> prevCapOwnerIds = prevCapabilities.stream().map(CapabilityDefinition::getOwnerId).distinct().collect(toList());
65         return mergeInstanceUtils.mapOldToNewCapabilitiesOwnerIds(container, origInstanceNode, cmptInstanceId, prevCapOwnerIds);
66     }
67
68     private void removeNotFoundNewCapabilities(Map<CapabilityDefinition, CapabilityDefinition> oldToNewCapMap) {
69         oldToNewCapMap.values().removeIf(Objects::isNull);
70     }
71
72     private List<CapabilityDefinition> resolveInstanceCapabilities(Component capabilityOwnerContainer, String cmptInstanceId) {
73         return capabilityOwnerContainer.getComponentInstanceById(cmptInstanceId)
74                 .map(ComponentInstance::getCapabilities)
75                 .map(MapUtil::flattenMapValues)
76                 .orElse(new ArrayList<>());
77     }
78
79
80
81
82
83 }