Import VFC with i/f op impl extended notataion 15/129215/2
authorMichaelMorris <michael.morris@est.tech>
Thu, 12 May 2022 09:20:48 +0000 (10:20 +0100)
committerAndr� Schmid <andre.schmid@est.tech>
Fri, 13 May 2022 14:57:16 +0000 (14:57 +0000)
Support import of VFC with interface operation implementation extended notataion

Signed-off-by: MichaelMorris <michael.morris@est.tech>
Issue-ID: SDC-3999
Change-Id: Ie2affc2b11d4b65fe87565768406dc6a02f8c74a

catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceDefinitionHandler.java
common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ArtifactDataDefinition.java

index 9d9d864..b60e31a 100644 (file)
@@ -31,6 +31,7 @@ import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.TYPE;
 
 import com.google.gson.Gson;
 import fj.data.Either;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.LinkedHashMap;
@@ -49,9 +50,11 @@ import org.openecomp.sdc.be.datatypes.elements.InputDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition;
+import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
 import org.openecomp.sdc.be.model.InputDefinition;
 import org.openecomp.sdc.be.model.InterfaceDefinition;
 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
+import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
 import org.openecomp.sdc.be.tosca.utils.OperationArtifactUtil;
 import org.openecomp.sdc.exception.ResponseFormat;
 import org.slf4j.Logger;
@@ -217,19 +220,68 @@ public class InterfaceDefinitionHandler {
         }
     }
 
+    @SuppressWarnings("unchecked")
     private Optional<ArtifactDataDefinition> handleOperationImplementation(final Map<String, Object> operationDefinitionMap) {
         if (!operationDefinitionMap.containsKey(IMPLEMENTATION.getElementName())) {
             return Optional.empty();
         }
         final ArtifactDataDefinition artifactDataDefinition = new ArtifactDataDefinition();
-        final String artifactName = (String) operationDefinitionMap.get(IMPLEMENTATION.getElementName());
-        if (OperationArtifactUtil.artifactNameIsALiteralValue(artifactName)) {
-            artifactDataDefinition.setArtifactName(artifactName);
-        } else {
-            artifactDataDefinition.setArtifactName(QUOTE + artifactName + QUOTE);
+        if (operationDefinitionMap.get(IMPLEMENTATION.getElementName()) instanceof Map && 
+                ((Map)operationDefinitionMap.get(IMPLEMENTATION.getElementName())).containsKey("primary")) {
+            Map<String, Object> implDetails = (Map) ((Map)operationDefinitionMap.get(IMPLEMENTATION.getElementName())).get("primary");
+            
+            if (implDetails.get("file") != null) {
+                artifactDataDefinition.setArtifactName(implDetails.get("file").toString());
+            }
+            if (implDetails.get("type") != null) {
+                artifactDataDefinition.setArtifactType(implDetails.get("type").toString());
+            }
+            if (implDetails.get("artifact_version") != null) {
+                artifactDataDefinition.setArtifactVersion(implDetails.get("artifact_version").toString());
+            }
+            
+            if(implDetails.get("properties") instanceof Map) {
+                List<PropertyDataDefinition> operationProperties = artifactDataDefinition.getProperties() == null ? new ArrayList<>() : artifactDataDefinition.getProperties();
+                Map<String, Object> properties = (Map<String, Object>) implDetails.get("properties");
+                properties.forEach((k,v) -> {
+                    ToscaPropertyType type = getTypeFromObject(v);
+                    if (type != null) {
+                        PropertyDataDefinition propertyDef = new PropertyDataDefinition();
+                        propertyDef.setName(k);
+                        propertyDef.setType(type.getType());
+                        propertyDef.setValue(v.toString());
+                        artifactDataDefinition.addProperty(propertyDef);
+                    }
+                });
+            }
+        }
+        if (operationDefinitionMap.get(IMPLEMENTATION.getElementName()) instanceof String) {
+            final String artifactName = (String) operationDefinitionMap.get(IMPLEMENTATION.getElementName());
+            if (OperationArtifactUtil.artifactNameIsALiteralValue(artifactName)) {
+                artifactDataDefinition.setArtifactName(artifactName);
+            } else {
+                artifactDataDefinition.setArtifactName(QUOTE + artifactName + QUOTE);
+            }
         }
         return Optional.of(artifactDataDefinition);
     }
+    
+    private ToscaPropertyType getTypeFromObject(final Object value) {
+        if (value instanceof String) {
+            return ToscaPropertyType.STRING;
+        }
+        if (value instanceof Integer) {
+            return ToscaPropertyType.INTEGER;
+        }
+        if (value instanceof Boolean) {
+            return ToscaPropertyType.BOOLEAN;
+        }
+        if (value instanceof Float || value instanceof Double) {
+            return ToscaPropertyType.FLOAT;
+        }
+        return null;
+    }
+    
 
     private Map<String, InputDefinition> handleInputs(final Map<String, Object> interfaceDefinitionToscaMap) {
         if (!interfaceDefinitionToscaMap.containsKey(INPUTS.getElementName())) {
index 4eee042..5927a5a 100644 (file)
@@ -369,6 +369,15 @@ public class ArtifactDataDefinition extends ToscaDataDefinition {
     public List<PropertyDataDefinition> getProperties() {
         return (List<PropertyDataDefinition>) getToscaPresentationValue(JsonPresentationFields.PROPERTIES);
     }
+    
+    public void addProperty(final PropertyDataDefinition property) {
+        List<PropertyDataDefinition> properties =  (List<PropertyDataDefinition>) getToscaPresentationValue(JsonPresentationFields.PROPERTIES);
+        if (properties == null) {
+            properties = new ArrayList<>();
+            setProperties(properties);
+        }
+        properties.add(property);
+    }
 
     private void setProperties(final List<PropertyDataDefinition> properties) {
         setToscaPresentationValue(JsonPresentationFields.PROPERTIES, properties);