2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.components.merge.capability;
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;
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 {
36 private MergeInstanceUtils mergeInstanceUtils;
38 public SimpleCapabilityResolver(MergeInstanceUtils mergeInstanceUtils) {
39 this.mergeInstanceUtils = mergeInstanceUtils;
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);
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);
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;
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);
69 return prevToNewCapabilityMapping;
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))
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);
88 private void removeNotFoundNewCapabilities(Map<CapabilityDefinition, CapabilityDefinition> oldToNewCapMap) {
89 oldToNewCapMap.values().removeIf(Objects::isNull);
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<>());