Added oparent to sdc main
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / merge / capability / SimpleCapabilityResolver.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.components.merge.capability;
22
23 import org.openecomp.sdc.be.components.merge.utils.MergeInstanceUtils;
24 import org.openecomp.sdc.be.dao.utils.MapUtil;
25 import org.openecomp.sdc.be.model.CapabilityDefinition;
26 import org.openecomp.sdc.be.model.Component;
27 import org.openecomp.sdc.be.model.ComponentInstance;
28
29 import java.util.*;
30
31 import static java.util.stream.Collectors.toList;
32 import static org.openecomp.sdc.be.dao.utils.MapUtil.flattenMapValues;
33 @org.springframework.stereotype.Component
34 public class SimpleCapabilityResolver implements CapabilityResolver {
35
36     private MergeInstanceUtils mergeInstanceUtils;
37
38     public SimpleCapabilityResolver(MergeInstanceUtils mergeInstanceUtils) {
39         this.mergeInstanceUtils = mergeInstanceUtils;
40     }
41
42     @Override
43     public Map<CapabilityDefinition, CapabilityDefinition> resolvePrevCapToNewCapability(Component container, Component prevInstanceOrigNode, String cmptInstanceId, List<CapabilityDefinition> prevCapabilities) {
44         List<CapabilityDefinition> newCapabilities = resolveInstanceCapabilities(container, cmptInstanceId);
45         Map<String, String> oldCapOwnerToNewOwner = mapOldToNewCapabilitiesOwnerIds(container, prevInstanceOrigNode, cmptInstanceId, prevCapabilities);
46         return mapOldToNewCapabilities(prevCapabilities, newCapabilities, oldCapOwnerToNewOwner);
47     }
48
49     @Override
50     public Map<CapabilityDefinition, CapabilityDefinition> resolvePrevCapIdToNewCapability(ComponentInstance oldInstance, ComponentInstance currInstance) {
51         List<CapabilityDefinition> newCapabilities = flattenMapValues(currInstance.getCapabilities());
52         List<CapabilityDefinition> prevCapabilities = flattenMapValues(oldInstance.getCapabilities());
53         Map<String, String> oldCapOwnerToNewOwner = mergeInstanceUtils.mapOldToNewCapabilitiesOwnerIds(oldInstance, currInstance);
54         return mapOldToNewCapabilities(prevCapabilities, newCapabilities, oldCapOwnerToNewOwner);
55     }
56
57     private Map<CapabilityDefinition, CapabilityDefinition> mapOldToNewCapabilities(List<CapabilityDefinition> prevCapabilities, List<CapabilityDefinition> newCapabilities, Map<String, String> oldCapOwnerToNewOwner) {
58         Map<CapabilityDefinition, CapabilityDefinition> oldToNewCapability = findNewCapByPrevCapabilityNameTypeAndOwner(prevCapabilities, newCapabilities, oldCapOwnerToNewOwner);
59         removeNotFoundNewCapabilities(oldToNewCapability);
60         return oldToNewCapability;
61     }
62
63     private Map<CapabilityDefinition, CapabilityDefinition> findNewCapByPrevCapabilityNameTypeAndOwner(List<CapabilityDefinition> prevCapabilities, List<CapabilityDefinition> newCapabilities, Map<String, String> oldCapOwnerToNewOwner) {
64         Map<CapabilityDefinition, CapabilityDefinition> prevToNewCapabilityMapping = new HashMap<>();
65         prevCapabilities.forEach(prevCap -> {
66             CapabilityDefinition newCapability = mapOldToNewCapability(prevCap, newCapabilities, oldCapOwnerToNewOwner);
67             prevToNewCapabilityMapping.put(prevCap, newCapability);
68         });
69         return prevToNewCapabilityMapping;
70     }
71
72     private CapabilityDefinition mapOldToNewCapability(CapabilityDefinition prevCap, List<CapabilityDefinition> newCapabilities, Map<String, String> oldCapOwnerToNewOwner) {
73         String newOwnerId = oldCapOwnerToNewOwner.get(prevCap.getOwnerId());
74         return newCapabilities.stream()
75                        .filter(newCap -> newCap.getName().equals(prevCap.getName()))
76                        .filter(newCap -> newCap.getType().equals(prevCap.getType()))
77                        .filter(newCap -> newCap.getOwnerId().equals(newOwnerId))
78                        .findFirst()
79                        .orElse(null);
80     }
81
82
83     private Map<String, String> mapOldToNewCapabilitiesOwnerIds(Component container, Component origInstanceNode, String cmptInstanceId, List<CapabilityDefinition> prevCapabilities) {
84         List<String> prevCapOwnerIds = prevCapabilities.stream().map(CapabilityDefinition::getOwnerId).distinct().collect(toList());
85         return mergeInstanceUtils.mapOldToNewCapabilitiesOwnerIds(container, origInstanceNode, cmptInstanceId, prevCapOwnerIds);
86     }
87
88     private void removeNotFoundNewCapabilities(Map<CapabilityDefinition, CapabilityDefinition> oldToNewCapMap) {
89         oldToNewCapMap.values().removeIf(Objects::isNull);
90     }
91
92     private List<CapabilityDefinition> resolveInstanceCapabilities(Component capabilityOwnerContainer, String cmptInstanceId) {
93         return capabilityOwnerContainer.getComponentInstanceById(cmptInstanceId)
94                 .map(ComponentInstance::getCapabilities)
95                 .map(MapUtil::flattenMapValues)
96                 .orElse(new ArrayList<>());
97     }
98
99
100
101
102
103 }