Fix wrongly generated tosca implementation
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / jsonjanusgraph / utils / ModelConverter.java
index 1932709..a246a1a 100644 (file)
@@ -32,6 +32,7 @@ import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
+import java.util.UUID;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.apache.commons.collections.CollectionUtils;
@@ -118,6 +119,7 @@ import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.TopologyTemplate;
 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElement;
 import org.openecomp.sdc.be.model.jsonjanusgraph.datamodel.ToscaElementTypeEnum;
 import org.openecomp.sdc.be.model.jsonjanusgraph.enums.JsonConstantKeysEnum;
+import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeTemplateOperation;
 import org.openecomp.sdc.be.model.operations.StorageException;
 import org.openecomp.sdc.be.resources.data.ComponentMetadataData;
 import org.openecomp.sdc.be.resources.data.ProductMetadataData;
@@ -253,6 +255,7 @@ public class ModelConverter {
             TopologyTemplate topologyTemplate = (TopologyTemplate) toscaElement;
             if (resource.getResourceType() == ResourceTypeEnum.VF || resource.getResourceType() == ResourceTypeEnum.PNF) {
                 resource.setCsarUUID((String) topologyTemplate.getMetadataValue(JsonPresentationFields.CSAR_UUID));
+                resource.setCsarVersionId((String) topologyTemplate.getMetadataValue(JsonPresentationFields.CSAR_VERSION_ID));
                 resource.setCsarVersion((String) topologyTemplate.getMetadataValue(JsonPresentationFields.CSAR_VERSION));
                 resource.setImportedToscaChecksum((String) topologyTemplate.getMetadataValue(JsonPresentationFields.IMPORTED_TOSCA_CHECKSUM));
                 convertInterfaces(topologyTemplate, resource);
@@ -424,9 +427,9 @@ public class ModelConverter {
                 operationUi.setOperationType(operationEntry.getKey());
                 operationUi.setInterfaceType(interfaceDataDefinition.getType());
                 final OperationDataDefinition operationDataDefinition = operationEntry.getValue();
-                final ArtifactDataDefinition implementation = operationDataDefinition.getImplementation();
-                if (implementation != null) {
-                    operationUi.setImplementation(implementation.getArtifactName());
+                final ArtifactDataDefinition artifactDataDefinition = operationDataDefinition.getImplementation();
+                if (artifactDataDefinition != null) {
+                    operationUi.setImplementation(artifactDataDefinition.getArtifactName());
                 }
                 final ListDataDefinition<OperationInputDefinition> inputs = operationDataDefinition.getInputs();
                 if (inputs != null && !inputs.isEmpty()) {
@@ -480,11 +483,57 @@ public class ModelConverter {
             requirementCapabilityRelDef.setType(p.getRelation().getRelationship().getType());
             requirementCapabilityRelDef.setCapability(p.getRelation().getCapability());
             requirementCapabilityRelDef.setOriginUI(relation.isOriginUI());
+            createRelationshipInterfaces(p.getOperations()).ifPresent(requirementCapabilityRelDef::setInterfaces);
             relationsList.add(requirementCapabilityRelDef);
         });
         return relationsList;
     }
 
+    private static Optional<ListDataDefinition<InterfaceDataDefinition>> createRelationshipInterfaces(final List<OperationUi> operationList) {
+        if (CollectionUtils.isEmpty(operationList)) {
+            return Optional.empty();
+        }
+        final ListDataDefinition<InterfaceDataDefinition> interfaceList = new ListDataDefinition<>();
+        final Map<String, List<OperationUi>> operationByInterfaceType = operationList.stream()
+            .collect(Collectors.groupingBy(OperationUi::getInterfaceType));
+        for (final Entry<String, List<OperationUi>> interfaceEntry : operationByInterfaceType.entrySet()) {
+            interfaceList.add(createInterface(interfaceEntry.getKey(), interfaceEntry.getValue()));
+        }
+        return Optional.of(interfaceList);
+    }
+
+    private static InterfaceDataDefinition createInterface(final String interfaceType, final List<OperationUi> operationList) {
+        final InterfaceDataDefinition interfaceDataDefinition = new InterfaceDataDefinition();
+        interfaceDataDefinition.setType(interfaceType);
+        if (CollectionUtils.isNotEmpty(operationList)) {
+            final Map<String, OperationDataDefinition> operationMap = operationList.stream()
+                .collect(Collectors.toMap(OperationUi::getOperationType, ModelConverter::createOperation));
+            interfaceDataDefinition.setOperations(operationMap);
+        }
+        return interfaceDataDefinition;
+    }
+
+    private static OperationDataDefinition createOperation(final OperationUi operation) {
+        final OperationDataDefinition operationDataDefinition = new OperationDataDefinition();
+        operationDataDefinition.setName(operation.getOperationType());
+        operationDataDefinition.setUniqueId(UUID.randomUUID().toString());
+        final ArtifactDataDefinition artifactDataDefinition = new ArtifactDataDefinition();
+        artifactDataDefinition.setArtifactName((String) operation.getImplementation());
+        operationDataDefinition.setImplementation(artifactDataDefinition);
+        if (CollectionUtils.isNotEmpty(operation.getInputs())) {
+            final ListDataDefinition<OperationInputDefinition> inputs = new ListDataDefinition<>();
+            operation.getInputs().forEach(input -> {
+                final OperationInputDefinition operationInputDefinition = new OperationInputDefinition();
+                operationInputDefinition.setLabel(input.getName());
+                operationInputDefinition.setType(input.getType());
+                operationInputDefinition.setValue(input.getValue());
+                inputs.add(operationInputDefinition);
+            });
+            operationDataDefinition.setInputs(inputs);
+        }
+        return operationDataDefinition;
+    }
+
     private static void convertCapabilities(Component component, TopologyTemplate topologyTemplate) {
         convertTopologyTemplateCapabilities(component, topologyTemplate);
         if (componentInstancesCapabilitiesExist(component) || groupsCapabilitiesExist(component)) {
@@ -736,13 +785,14 @@ public class ModelConverter {
             resource.setToscaResourceName((String) toscaElement.getMetadataValue(JsonPresentationFields.TOSCA_RESOURCE_NAME));
             resource.setVendorName((String) toscaElement.getMetadataValue(JsonPresentationFields.VENDOR_NAME));
             resource.setVendorRelease((String) toscaElement.getMetadataValue(JsonPresentationFields.VENDOR_RELEASE));
-            resource.setModel((String) toscaElement.getMetadataValue(JsonPresentationFields.MODEL));
             // field isn't mandatory , but shouldn't be null(should be an empty string instead)
             if (((String) toscaElement.getMetadataValue(JsonPresentationFields.RESOURCE_VENDOR_MODEL_NUMBER)) != null) {
                 resource.setResourceVendorModelNumber((String) toscaElement.getMetadataValue(JsonPresentationFields.RESOURCE_VENDOR_MODEL_NUMBER));
             } else {
                 resource.setResourceVendorModelNumber("");
             }
+            Boolean isNormative = toscaElement.getMetadataValue(JsonPresentationFields.NORMATIVE) == null ? false : (Boolean) toscaElement.getMetadataValue(JsonPresentationFields.NORMATIVE);
+            resource.getComponentMetadataDefinition().getMetadataDataDefinition().setNormative(isNormative);
         } else if (component.getComponentType() == ComponentTypeEnum.SERVICE) {
             Service service = (Service) component;
             if (((String) toscaElement.getMetadataValue(JsonPresentationFields.SERVICE_TYPE)) != null) {
@@ -769,6 +819,7 @@ public class ModelConverter {
         component.setContactId((String) toscaElement.getMetadataValue(JsonPresentationFields.CONTACT_ID));
         component.setUUID((String) toscaElement.getMetadataValue(JsonPresentationFields.UUID));
         component.setIsDeleted((Boolean) toscaElement.getMetadataValue(JsonPresentationFields.IS_DELETED));
+        component.setModel((String) toscaElement.getMetadataValue(JsonPresentationFields.MODEL));
         component.setToscaType(toscaElement.getToscaType().getValue());
         final List<MetadataKeyDataDefinition> metadataKeys = getCategorySpecificMetadataKeys(toscaElement);
         if (CollectionUtils.isNotEmpty(metadataKeys)) {
@@ -1112,6 +1163,7 @@ public class ModelConverter {
             topologyTemplate.setResourceType(resource.getResourceType());
             topologyTemplate.setMetadataValue(JsonPresentationFields.CSAR_UUID, resource.getCsarUUID());
             topologyTemplate.setMetadataValue(JsonPresentationFields.CSAR_VERSION, resource.getCsarVersion());
+            topologyTemplate.setMetadataValue(JsonPresentationFields.CSAR_VERSION_ID, resource.getCsarVersionId());
             topologyTemplate.setMetadataValue(JsonPresentationFields.IMPORTED_TOSCA_CHECKSUM, resource.getImportedToscaChecksum());
             convertTopologyTemplateInterfaces(resource, topologyTemplate);
         }
@@ -1306,6 +1358,7 @@ public class ModelConverter {
             } else {
                 toscaElement.setMetadataValue(JsonPresentationFields.RESOURCE_VENDOR_MODEL_NUMBER, "");
             }
+            toscaElement.setMetadataValue(JsonPresentationFields.NORMATIVE, ((Resource) component).getComponentMetadataDefinition().getMetadataDataDefinition().isNormative());
         } else if (component.getComponentType() == ComponentTypeEnum.SERVICE) {
             // field isn't mandatory , but shouldn't be null(should be an empty string instead)
             if (((Service) component).getServiceType() != null) {
@@ -1331,6 +1384,8 @@ public class ModelConverter {
         toscaElement.setMetadataValue(JsonPresentationFields.TAGS, component.getTags());
         toscaElement.setMetadataValue(JsonPresentationFields.INVARIANT_UUID, component.getInvariantUUID());
         toscaElement.setMetadataValue(JsonPresentationFields.CONTACT_ID, component.getContactId());
+        toscaElement.setMetadataValue(JsonPresentationFields.MODEL, component.getModel());
+        toscaElement.setModel(component.getModel());
         for (final String key : component.getCategorySpecificMetadata().keySet()) {
             toscaElement.setMetadataValue(key, component.getCategorySpecificMetadata().get(key));
         }