1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
package org.openecomp.sdc.asdctool.impl.migration.v1707.jsonmodel.relations;
import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
import org.openecomp.sdc.be.model.CapabilityDefinition;
import org.openecomp.sdc.be.model.Component;
import org.openecomp.sdc.be.model.ComponentInstance;
import org.openecomp.sdc.be.model.RequirementDefinition;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class RequirementsCapabilitiesMigrationService<T extends Component> {
@Resource(name = "fulfilled-capabilities-mig-service")
FulfilledCapabilitiesMigrationService fulfilledCapabilityUpdate;
@Resource(name = "fulfilled-requirements-mig-service")
FulfilledRequirementsMigrationService fulfilledRequirementUpdate;
public boolean associateFulfilledCapabilities(T component, NodeTypeEnum nodeType) {
return fulfilledCapabilityUpdate.associateToscaDefinitions(component, nodeType);
}
public boolean associateFulfilledRequirements(T component, NodeTypeEnum nodeType) {
return fulfilledRequirementUpdate.associateToscaDefinitions(component, nodeType);
}
public void overrideInstanceCapabilitiesRequirements(T element) {
if (element.getComponentInstances() != null) {
clearInstancesCapabilitiesRequirements(element);
setInstancesRequirementsFromComponent(element);
setInstancesCapabilitiesFromComponent(element);
}
}
private void clearInstancesCapabilitiesRequirements(T element) {
element.getComponentInstances().forEach(componentInstance -> {
if (componentInstance.getCapabilities() != null) {
componentInstance.getCapabilities().clear();
}
if (componentInstance.getRequirements() != null) {
componentInstance.getRequirements().clear();
}
});
}
private void setInstancesCapabilitiesFromComponent(T element) {
if (element.getCapabilities() != null) {
Map<String, ComponentInstance> instancesById = groupInstancesById(element);
element.getCapabilities().forEach((type, definitions) -> { setCapabilitiesOnInstance(instancesById, type, definitions);});
}
}
private void setInstancesRequirementsFromComponent(T element) {
if (element.getRequirements() != null) {
Map<String, ComponentInstance> instancesById = groupInstancesById(element);
element.getRequirements().forEach((type, requirements) -> { setRequirementsOnInstance(instancesById, type, requirements);});
}
}
private void setCapabilitiesOnInstance(Map<String, ComponentInstance> instances, String capabilityType, List<CapabilityDefinition> definitions) {
Map<String, List<CapabilityDefinition>> capByInstance = definitions.stream().collect(Collectors.groupingBy(CapabilityDefinition::getOwnerId));
capByInstance.forEach((instanceId, capabilityDefinitions) -> { setCapabilitiesOnInstanceByType(instances.get(instanceId), capabilityType, capabilityDefinitions); });
}
private void setRequirementsOnInstance(Map<String, ComponentInstance> instances, String requirementType, List<RequirementDefinition> requirements) {
Map<String, List<RequirementDefinition>> reqByInstance = requirements.stream().collect(Collectors.groupingBy(RequirementDefinition::getOwnerId));
reqByInstance.forEach((instanceId, reqDefinitions) -> { setRequirementsOnInstanceByType(instances.get(instanceId), requirementType, reqDefinitions);});
}
private void setCapabilitiesOnInstanceByType(ComponentInstance instance, String capabilityType, List<CapabilityDefinition> capabilityDefinitions) {
instance.getCapabilities().putIfAbsent(capabilityType, new ArrayList<>());
instance.getCapabilities().get(capabilityType).addAll(capabilityDefinitions);
}
private void setRequirementsOnInstanceByType(ComponentInstance instance, String requirementType, List<RequirementDefinition> reqDefinitions) {
instance.getRequirements().putIfAbsent(requirementType, new ArrayList<>());
instance.getRequirements().get(requirementType).addAll(reqDefinitions);
}
private Map<String, ComponentInstance> groupInstancesById(T element) {
return element.getComponentInstances()
.stream()
.collect(Collectors.toMap(ComponentInstance::getUniqueId, Function.identity()));
}
}
|