1 package org.openecomp.sdc.asdctool.impl.migration.v1707.jsonmodel;
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;
11 import java.util.List;
12 import java.util.Optional;
15 public class NormativesMigration extends ComponentMigration<Resource> {
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");
21 @javax.annotation.Resource(name = "normatives-resolver")
22 private NormativesResolver normativesResolver;
24 @javax.annotation.Resource(name = "resource-version-migration")
25 private VersionMigration<Resource> versionMigration;
28 public String description() {
29 return "migration of node types";
33 Either<List<Resource>, ?> getElementsToMigrate() {
34 return normativesResolver.getAllNodeTypeNormatives();
38 boolean save(Resource element) {
39 if (e2eMalformedVfcs.contains(element.getUniqueId())) {
40 replaceJcpVersionPropertyTypeToVersion(element);
42 return super.save(element);
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());
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()))
62 boolean doPostMigrateOperation(List<Resource> elements) {
63 LOGGER.info("migrating node types versions");
64 return versionMigration.buildComponentsVersionChain(elements);