1 package org.openecomp.sdc.be.components.merge.property;
3 import java.util.Objects;
4 import org.openecomp.sdc.be.dao.utils.MapUtil;
5 import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
6 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
7 import org.openecomp.sdc.be.model.InputDefinition;
9 import java.util.ArrayList;
10 import java.util.List;
12 import java.util.stream.Collectors;
14 class PropertyInstanceMergeDataBuilder {
16 private PropertyInstanceMergeDataBuilder() {
19 static <T extends PropertyDataDefinition> List<MergePropertyData> buildDataForMerging(List<T> oldProps,
20 List<InputDefinition> oldInputs,
22 List<InputDefinition> newInputs) {
24 Map<String, T> oldPropsByName = MapUtil.toMap(oldProps, T::getName);
25 Map<String, InputDefinition> oldInputsByName = MapUtil.toMap(oldInputs, InputDefinition::getName);
26 Map<String, T> newPropsByName = MapUtil.toMap(newProps, T::getName);
27 Map<String, InputDefinition> newInputsByName = MapUtil.toMap(newInputs, InputDefinition::getName);
28 return buildMergeData(oldPropsByName, oldInputsByName, newPropsByName, newInputsByName);
32 private static <T extends PropertyDataDefinition> List<MergePropertyData> buildMergeData(Map<String, T> oldPropsByName, Map<String, InputDefinition> oldInputsByName, Map<String, T> newPropsByName, Map<String, InputDefinition> newInputsByName) {
33 List<MergePropertyData> mergeData = new ArrayList<>();
34 newPropsByName.forEach((name, prop) -> {
35 if (oldPropsByName.containsKey(name)) {
36 mergeData.add(buildMergePropertyData(oldPropsByName.get(name), oldInputsByName, prop, newInputsByName));
42 private static MergePropertyData buildMergePropertyData(PropertyDataDefinition oldProp,
43 Map<String, InputDefinition> oldInputsByName,
44 PropertyDataDefinition newProp,
45 Map<String, InputDefinition> newInputsByName) {
46 MergePropertyData mergePropertyData = new MergePropertyData();
47 mergePropertyData.setOldProp(oldProp)
49 if (oldProp.isGetInputProperty()) {
50 setGetInputData(oldProp, oldInputsByName, newInputsByName, mergePropertyData);
53 return mergePropertyData;
56 private static void setGetInputData(PropertyDataDefinition oldProp, Map<String, InputDefinition> oldInputsByName, Map<String, InputDefinition> newInputsByName, MergePropertyData mergePropertyData) {
57 List<String> oldDeclaredByUserInputNames = getOldDeclaredInputsByUser(oldProp.getGetInputValues(), oldInputsByName);
58 List<String> oldGetInputNamesWhichExistInNewVersion = getOldGetInputNamesWhichExistInNewVersion(oldProp.getGetInputValues(), newInputsByName);
59 mergePropertyData.addAddGetInputNamesToMerge(oldDeclaredByUserInputNames);
60 mergePropertyData.addAddGetInputNamesToMerge(oldGetInputNamesWhichExistInNewVersion);
63 private static List<String> getOldGetInputNamesWhichExistInNewVersion(List<GetInputValueDataDefinition> getInputValues, Map<String, InputDefinition> newInputsByName) {
64 return getInputValues.stream().map(GetInputValueDataDefinition::getInputName).filter(newInputsByName::containsKey).collect(Collectors.toList());
67 private static List<String> getOldDeclaredInputsByUser(List<GetInputValueDataDefinition> getInputValues, Map<String, InputDefinition> oldInputsByName) {
68 return getInputValues.stream().map(GetInputValueDataDefinition::getInputName)
69 .map(oldInputsByName::get)
70 .filter(oldInput -> Objects.nonNull(oldInput) && oldInput.getInstanceUniqueId() != null)
71 .map(PropertyDataDefinition::getName)
72 .collect(Collectors.toList());