f5ff96284fa5759849d0210e1aa5a50cf06fa21a
[sdc.git] /
1 package org.openecomp.sdc.asdctool.impl.migration.v1707.jsonmodel;
2
3 import fj.data.Either;
4 import org.openecomp.sdc.be.datatypes.elements.ComponentInstanceDataDefinition;
5 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
6 import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
7 import org.openecomp.sdc.be.model.ComponentInstanceAttribute;
8 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
9 import org.openecomp.sdc.be.model.Service;
10 import org.openecomp.sdc.be.model.operations.api.IServiceOperation;
11 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
12 import org.openecomp.sdc.be.model.operations.migration.MigrationErrorInformer;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 import javax.annotation.Resource;
17 import java.util.List;
18 import java.util.Map;
19 import java.util.stream.Collectors;
20
21 public class ServicesMigration extends ComponentMigration<Service> {
22
23     private static Logger LOGGER = LoggerFactory.getLogger(ServicesMigration.class);
24
25     @Resource(name = "service-operation")
26     private IServiceOperation serviceOperation;
27
28     @Resource(name = "service-version-migration")
29     private VersionMigration<Service> versionMigration;
30
31     @Override
32     public String description() {
33         return "migrate services";
34     }
35
36     @Override
37     Either<List<Service>, ?> getElementsToMigrate() {
38         return serviceOperation.getAll();
39     }
40
41     @Override
42     Either<Service, StorageOperationStatus> save(Service element) {
43         MigrationErrorInformer.logIfServiceUsingMalformedVfs(element);
44         filterOutVFInstancePropsAndAttrs(element);
45         element.setConformanceLevel("0.0");
46         requirementsCapabilitiesMigrationService.overrideInstanceCapabilitiesRequirements(element);
47         return super.save(element);
48     }
49
50     @Override
51     boolean doPostSaveOperation(Service element) {
52         return element.getComponentInstances() == null ||
53                (requirementsCapabilitiesMigrationService.associateFulfilledRequirements(element, NodeTypeEnum.Service) &&
54                 requirementsCapabilitiesMigrationService.associateFulfilledCapabilities(element, NodeTypeEnum.Service));
55     }
56
57     @Override
58     boolean doPostMigrateOperation(List<Service> elements) {
59         LOGGER.info("migrating services versions");
60         return versionMigration.buildComponentsVersionChain(elements);
61     }
62
63     private void filterOutVFInstancePropsAndAttrs(Service element) {
64         if (element.getComponentInstances() != null) {
65             List<String> vfInstancesIds = getVFInstancesIds(element);
66             filterOutVFInstacnecProps(element, vfInstancesIds);
67             filterOutVFInstanceAttrs(element, vfInstancesIds);
68         }
69     }
70
71     private void filterOutVFInstanceAttrs(Service element, List<String> vfInstancesIds) {
72         Map<String, List<ComponentInstanceAttribute>> componentInstancesAttributes = element.getComponentInstancesAttributes();
73         if (componentInstancesAttributes != null) {
74             element.setComponentInstancesAttributes(filterOutVFInstanceAttributes(componentInstancesAttributes, vfInstancesIds));
75         }
76     }
77
78     private void filterOutVFInstacnecProps(Service element, List<String> vfInstancesIds) {
79         Map<String, List<ComponentInstanceProperty>> componentInstancesProperties = element.getComponentInstancesProperties();
80         if (componentInstancesProperties != null) {
81             element.setComponentInstancesProperties(filterOutVFInstanceProperties(componentInstancesProperties, vfInstancesIds));
82         }
83     }
84
85     private Map<String, List<ComponentInstanceProperty>> filterOutVFInstanceProperties(Map<String, List<ComponentInstanceProperty>> instances, List<String> vfInstanceIds) {
86         return instances.entrySet()
87                 .stream()
88                 .filter(entry -> !vfInstanceIds.contains(entry.getKey()))
89                 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
90     }
91
92     private Map<String, List<ComponentInstanceAttribute>> filterOutVFInstanceAttributes(Map<String, List<ComponentInstanceAttribute>> instances, List<String> vfInstanceIds) {
93         return instances.entrySet()
94                 .stream()
95                 .filter(entry -> !vfInstanceIds.contains(entry.getKey()))
96                 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
97     }
98
99     private List<String> getVFInstancesIds(Service service) {
100         return service.getComponentInstances()
101                     .stream()
102                     .filter(componentInstance -> componentInstance.getOriginType() == OriginTypeEnum.VF)
103                     .map(ComponentInstanceDataDefinition::getUniqueId)
104                     .collect(Collectors.toList());
105     }
106
107 }