re base code
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / merge / heat / HeatEnvArtifactsMergeBusinessLogic.java
1 package org.openecomp.sdc.be.components.merge.heat;
2
3 import org.openecomp.sdc.be.dao.utils.MapUtil;
4 import org.openecomp.sdc.be.model.ArtifactDefinition;
5 import org.openecomp.sdc.be.model.HeatParameterDefinition;
6 import org.springframework.stereotype.Component;
7 import org.springframework.util.CollectionUtils;
8
9 import java.util.ArrayList;
10 import java.util.List;
11 import java.util.Map;
12
13 /**
14  * Created by chaya on 9/14/2017.
15  */
16 @Component
17 public class HeatEnvArtifactsMergeBusinessLogic {
18
19     public List<ArtifactDefinition> mergeInstanceHeatEnvArtifacts(List<ArtifactDefinition> origHeatEnvArtifacts, List<ArtifactDefinition> newHeatEnvArtifacts) {
20         Map<String, ArtifactDefinition> origArtifactDefinitionByLabel = MapUtil.toMap(origHeatEnvArtifacts, ArtifactDefinition::getArtifactLabel);
21         List<ArtifactDefinition> artifactsToUpdate = new ArrayList<>();
22         newHeatEnvArtifacts.stream()
23                 .filter(heatEnvArtifact -> origArtifactDefinitionByLabel.containsKey(heatEnvArtifact.getArtifactLabel()))
24                 .forEach(heatEnvArtifact -> {
25                     ArtifactDefinition origHeatEnvArtifact = origArtifactDefinitionByLabel.get(heatEnvArtifact.getArtifactLabel());
26                     Boolean wasMergedHeatEnvArtifact = mergeHeatEnvArtifactsParameters(heatEnvArtifact, origHeatEnvArtifact);
27                     if (wasMergedHeatEnvArtifact) {
28                         artifactsToUpdate.add(heatEnvArtifact);
29                     }
30                 });
31         return artifactsToUpdate;
32     }
33
34     private Boolean mergeHeatEnvArtifactsParameters(ArtifactDefinition currArtifact, ArtifactDefinition origArtifact) {
35         List<HeatParameterDefinition> currentHeatEnvParams = currArtifact.getListHeatParameters();
36         List<HeatParameterDefinition> origHeatEnvParams = origArtifact.getListHeatParameters();
37         boolean wasChanged = false;
38
39         if (CollectionUtils.isEmpty(origHeatEnvParams) || CollectionUtils.isEmpty(currentHeatEnvParams)) {
40             return false;
41         }
42
43         Map<String, HeatParameterDefinition> origHeatParametersByName = MapUtil.toMap(origHeatEnvParams, HeatParameterDefinition::getName);
44
45         for (HeatParameterDefinition currHeatParam : currentHeatEnvParams) {
46             String paramName = currHeatParam.getName();
47             HeatParameterDefinition origHeatParam = origHeatParametersByName.get(paramName);
48             if (isSameHeatWithDiffValue(origHeatParam, currHeatParam)) {
49                 currHeatParam.setCurrentValue(origHeatParam.getCurrentValue());
50                 wasChanged = true;
51             }
52         }
53         currArtifact.setListHeatParameters(currentHeatEnvParams);
54         return wasChanged;
55     }
56
57     private boolean isSameHeatWithDiffValue(HeatParameterDefinition origHeatParam, HeatParameterDefinition newHeatParam) {
58         return origHeatParam != null &&
59                origHeatParam.getCurrentValue() != null &&
60                origHeatParam.getType().equals(newHeatParam.getType()) &&
61               !origHeatParam.getCurrentValue().equals(newHeatParam.getCurrentValue());
62     }
63
64 }