1 package org.openecomp.sdc.asdctool.impl.migration.v1707.jsonmodel;
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;
16 import javax.annotation.Resource;
17 import java.util.List;
19 import java.util.stream.Collectors;
21 public class ServicesMigration extends ComponentMigration<Service> {
23 private static Logger LOGGER = LoggerFactory.getLogger(ServicesMigration.class);
25 @Resource(name = "service-operation")
26 private IServiceOperation serviceOperation;
28 @Resource(name = "service-version-migration")
29 private VersionMigration<Service> versionMigration;
32 public String description() {
33 return "migrate services";
37 Either<List<Service>, ?> getElementsToMigrate() {
38 return serviceOperation.getAll();
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);
51 boolean doPostSaveOperation(Service element) {
52 return element.getComponentInstances() == null ||
53 (requirementsCapabilitiesMigrationService.associateFulfilledRequirements(element, NodeTypeEnum.Service) &&
54 requirementsCapabilitiesMigrationService.associateFulfilledCapabilities(element, NodeTypeEnum.Service));
58 boolean doPostMigrateOperation(List<Service> elements) {
59 LOGGER.info("migrating services versions");
60 return versionMigration.buildComponentsVersionChain(elements);
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);
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));
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));
85 private Map<String, List<ComponentInstanceProperty>> filterOutVFInstanceProperties(Map<String, List<ComponentInstanceProperty>> instances, List<String> vfInstanceIds) {
86 return instances.entrySet()
88 .filter(entry -> !vfInstanceIds.contains(entry.getKey()))
89 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
92 private Map<String, List<ComponentInstanceAttribute>> filterOutVFInstanceAttributes(Map<String, List<ComponentInstanceAttribute>> instances, List<String> vfInstanceIds) {
93 return instances.entrySet()
95 .filter(entry -> !vfInstanceIds.contains(entry.getKey()))
96 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
99 private List<String> getVFInstancesIds(Service service) {
100 return service.getComponentInstances()
102 .filter(componentInstance -> componentInstance.getOriginType() == OriginTypeEnum.VF)
103 .map(ComponentInstanceDataDefinition::getUniqueId)
104 .collect(Collectors.toList());