[SDC-29] rebase continue work to align source
[sdc.git] / asdctool / src / main / java / org / openecomp / sdc / asdctool / impl / migration / v1707 / jsonmodel / NormativesMigration.java
1 package org.openecomp.sdc.asdctool.impl.migration.v1707.jsonmodel;
2
3 import fj.data.Either;
4 import jersey.repackaged.com.google.common.collect.Sets;
5 import org.openecomp.sdc.be.model.PropertyDefinition;
6 import org.openecomp.sdc.be.model.Resource;
7 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10
11 import java.util.List;
12 import java.util.Optional;
13 import java.util.Set;
14
15 public class NormativesMigration extends ComponentMigration<Resource> {
16
17     private static Logger LOGGER = LoggerFactory.getLogger(NormativesMigration.class);
18     private static final String JCP_VERSION_PROPERTY = "jcp-version";
19     private static final Set<String> e2eMalformedVfcs = Sets.newHashSet("71879ee1-ad63-46d0-9943-d33083a6fdbb", "e54e7c4d-6020-4c53-838b-42d34c0da5c9");
20
21     @javax.annotation.Resource(name = "normatives-resolver")
22     private NormativesResolver normativesResolver;
23
24     @javax.annotation.Resource(name = "resource-version-migration")
25     private VersionMigration<Resource> versionMigration;
26
27     @Override
28     public String description() {
29         return "migration of node types";
30     }
31
32     @Override
33     Either<List<Resource>, ?> getElementsToMigrate() {
34         return normativesResolver.getAllNodeTypeNormatives();
35     }
36
37     @Override
38     boolean save(Resource element) {
39         if (e2eMalformedVfcs.contains(element.getUniqueId())) {
40             replaceJcpVersionPropertyTypeToVersion(element);
41         }
42         return super.save(element);
43     }
44
45     private void replaceJcpVersionPropertyTypeToVersion(Resource element) {
46         getJcpIntegerProperty(element).ifPresent(propertyDefinition -> {
47             LOGGER.info("resource {} with id {}: found property jcp-version with type 'integer', changing type to 'version'", element.getName(), element.getUniqueId());
48             propertyDefinition.setType(ToscaPropertyType.VERSION.getType());
49         });
50     }
51
52     private Optional<PropertyDefinition> getJcpIntegerProperty(Resource element) {
53         if (element.getProperties() == null) return Optional.empty();
54         return element.getProperties().stream()
55                                .filter(prop -> prop.getName().equals(JCP_VERSION_PROPERTY))
56                                .filter(prop -> prop.getType().equals(ToscaPropertyType.INTEGER.getType()))
57                                .findAny();
58
59     }
60
61     @Override
62     boolean doPostMigrateOperation(List<Resource> elements) {
63         LOGGER.info("migrating node types versions");
64         return versionMigration.buildComponentsVersionChain(elements);
65     }
66 }