1 package org.openecomp.sdc.be.components.merge.property;
3 import org.openecomp.sdc.be.dao.utils.MapUtil;
4 import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
5 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
6 import org.openecomp.sdc.be.model.InputDefinition;
8 import java.util.ArrayList;
11 import java.util.stream.Collectors;
13 class PropertyInstanceMergeDataBuilder {
15 private PropertyInstanceMergeDataBuilder() {
18 static <T extends PropertyDataDefinition> List<MergePropertyData> buildDataForMerging(List<T> oldProps,
19 List<InputDefinition> oldInputs,
21 List<InputDefinition> newInputs) {
23 Map<String, T> oldPropsByName = MapUtil.toMap(oldProps, T::getName);
24 Map<String, InputDefinition> oldInputsByName = MapUtil.toMap(oldInputs, InputDefinition::getName);
25 Map<String, T> newPropsByName = MapUtil.toMap(newProps, T::getName);
26 Map<String, InputDefinition> newInputsByName = MapUtil.toMap(newInputs, InputDefinition::getName);
27 return buildMergeData(oldPropsByName, oldInputsByName, newPropsByName, newInputsByName);
31 private static <T extends PropertyDataDefinition> List<MergePropertyData> buildMergeData(Map<String, T> oldPropsByName, Map<String, InputDefinition> oldInputsByName, Map<String, T> newPropsByName, Map<String, InputDefinition> newInputsByName) {
32 List<MergePropertyData> mergeData = new ArrayList<>();
33 newPropsByName.forEach((name, prop) -> {
34 if (oldPropsByName.containsKey(name)) {
35 mergeData.add(buildMergePropertyData(oldPropsByName.get(name), oldInputsByName, prop, newInputsByName));
41 private static MergePropertyData buildMergePropertyData(PropertyDataDefinition oldProp,
42 Map<String, InputDefinition> oldInputsByName,
43 PropertyDataDefinition newProp,
44 Map<String, InputDefinition> newInputsByName) {
45 MergePropertyData mergePropertyData = new MergePropertyData();
46 mergePropertyData.setOldProp(oldProp)
48 if (oldProp.isGetInputProperty()) {
49 setGetInputData(oldProp, oldInputsByName, newInputsByName, mergePropertyData);
52 return mergePropertyData;
55 private static void setGetInputData(PropertyDataDefinition oldProp, Map<String, InputDefinition> oldInputsByName, Map<String, InputDefinition> newInputsByName, MergePropertyData mergePropertyData) {
56 List<String> oldDeclaredByUserInputNames = getOldDeclaredInputsByUser(oldProp.getGetInputValues(), oldInputsByName);
57 List<String> oldGetInputNamesWhichExistInNewVersion = getOldGetInputNamesWhichExistInNewVersion(oldProp.getGetInputValues(), newInputsByName);
58 mergePropertyData.addAddGetInputNamesToMerge(oldDeclaredByUserInputNames);
59 mergePropertyData.addAddGetInputNamesToMerge(oldGetInputNamesWhichExistInNewVersion);
62 private static List<String> getOldGetInputNamesWhichExistInNewVersion(List<GetInputValueDataDefinition> getInputValues, Map<String, InputDefinition> newInputsByName) {
63 return getInputValues.stream().map(GetInputValueDataDefinition::getInputName).filter(newInputsByName::containsKey).collect(Collectors.toList());
66 private static List<String> getOldDeclaredInputsByUser(List<GetInputValueDataDefinition> getInputValues, Map<String, InputDefinition> oldInputsByName) {
67 return getInputValues.stream().map(GetInputValueDataDefinition::getInputName)
68 .map(oldInputsByName::get)
69 .filter(oldInput -> oldInput.getInstanceUniqueId() != null)
70 .map(PropertyDataDefinition::getName)
71 .collect(Collectors.toList());