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