Improve test coverage
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / jsonjanusgraph / operations / TopologyTemplateOperation.java
index 3f28d72..c2cd29d 100644 (file)
@@ -23,22 +23,8 @@ package org.openecomp.sdc.be.model.jsonjanusgraph.operations;
 import com.google.gson.reflect.TypeToken;
 import fj.data.Either;
 import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.Optional;
-import java.util.stream.Collectors;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Optional;
 import java.util.stream.Collectors;
 import org.apache.commons.collections.MapUtils;
 import org.apache.tinkerpop.gremlin.structure.Direction;
@@ -48,6 +34,9 @@ import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
+import org.openecomp.sdc.be.datatypes.category.MetadataKeyDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.MapAttributesDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.MapCapabilityProperty;
 import org.openecomp.sdc.be.datatypes.elements.MapListCapabilityDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.AdditionalInfoParameterDataDefinition;
@@ -69,6 +58,7 @@ import org.openecomp.sdc.be.datatypes.elements.MapListRequirementDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.MapPropertiesDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.PolicyDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.SubstitutionFilterDataDefinition;
 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
@@ -103,14 +93,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 public class TopologyTemplateOperation extends ToscaElementOperation {
 
     private static final Logger log = Logger.getLogger(TopologyTemplateOperation.class);
-    private static final String PATH_DELIMITER = ".";
 
     @Autowired
     private ArchiveOperation archiveOperation;
 
     public Either<TopologyTemplate, StorageOperationStatus> createTopologyTemplate(TopologyTemplate topologyTemplate) {
-        Either<TopologyTemplate, StorageOperationStatus> result = null;
-
         topologyTemplate.generateUUID();
 
         topologyTemplate = getResourceMetaDataFromResource(topologyTemplate);
@@ -127,104 +114,82 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         if (createdVertex.isRight()) {
             JanusGraphOperationStatus status = createdVertex.right().value();
             log.debug( "Error returned after creating topology template data node {}. status returned is ", topologyTemplateVertex, status);
-            result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
-            return result;
+            return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
         }
 
-        topologyTemplateVertex = createdVertex.left().value();
-
-        StorageOperationStatus assosiateCommon = assosiateCommonForToscaElement(topologyTemplateVertex, topologyTemplate, null);
+        StorageOperationStatus assosiateCommon = assosiateCommonForToscaElement(topologyTemplateVertex, topologyTemplate);
         if (assosiateCommon != StorageOperationStatus.OK) {
-            result = Either.right(assosiateCommon);
-            return result;
+            return Either.right(assosiateCommon);
         }
 
         StorageOperationStatus associateCategory = assosiateMetadataToCategory(topologyTemplateVertex, topologyTemplate);
         if (associateCategory != StorageOperationStatus.OK) {
-            result = Either.right(associateCategory);
-            return result;
+            return Either.right(associateCategory);
         }
 
         StorageOperationStatus associateInputs = associateInputsToComponent(topologyTemplateVertex, topologyTemplate);
         if (associateInputs != StorageOperationStatus.OK) {
-            result = Either.right(associateInputs);
-            return result;
+            return Either.right(associateInputs);
         }
         StorageOperationStatus associateGroups = associateGroupsToComponent(topologyTemplateVertex, topologyTemplate);
         if (associateGroups != StorageOperationStatus.OK) {
-            result = Either.right(associateGroups);
-            return result;
+            return Either.right(associateGroups);
         }
         StorageOperationStatus associatePolicies = associatePoliciesToComponent(topologyTemplateVertex, topologyTemplate);
         if (associatePolicies != StorageOperationStatus.OK) {
-            result = Either.right(associatePolicies);
-            return result;
+            return Either.right(associatePolicies);
         }
         StorageOperationStatus associateInstAttr = associateInstAttributesToComponent(topologyTemplateVertex, topologyTemplate);
         if (associateInstAttr != StorageOperationStatus.OK) {
-            result = Either.right(associateInstAttr);
-            return result;
+            return Either.right(associateInstAttr);
         }
         StorageOperationStatus associateInstProperties = associateInstPropertiesToComponent(topologyTemplateVertex, topologyTemplate);
         if (associateInstProperties != StorageOperationStatus.OK) {
-            result = Either.right(associateInstProperties);
-            return result;
+            return Either.right(associateInstProperties);
         }
         StorageOperationStatus associateInstInputs = associateInstInputsToComponent(topologyTemplateVertex, topologyTemplate);
         if (associateInstProperties != StorageOperationStatus.OK) {
-            result = Either.right(associateInstInputs);
-            return result;
+            return Either.right(associateInstInputs);
         }
         StorageOperationStatus associateInstGroups = associateInstGroupsToComponent(topologyTemplateVertex, topologyTemplate);
         if (associateInstGroups != StorageOperationStatus.OK) {
-            result = Either.right(associateInstInputs);
-            return result;
+            return Either.right(associateInstInputs);
         }
 
         StorageOperationStatus associateRequirements = associateRequirementsToResource(topologyTemplateVertex, topologyTemplate);
         if (associateRequirements != StorageOperationStatus.OK) {
-            result = Either.right(associateRequirements);
-            return result;
+            return Either.right(associateRequirements);
         }
 
         StorageOperationStatus associateCapabilities = associateCapabilitiesToResource(topologyTemplateVertex, topologyTemplate);
         if (associateCapabilities != StorageOperationStatus.OK) {
-            result = Either.right(associateCapabilities);
-            return result;
+            return Either.right(associateCapabilities);
         }
 
         StorageOperationStatus associateArtifacts = associateTopologyTemplateArtifactsToComponent(topologyTemplateVertex, topologyTemplate);
         if (associateArtifacts != StorageOperationStatus.OK) {
-            result = Either.right(associateArtifacts);
-            return result;
+            return Either.right(associateArtifacts);
         }
 
         StorageOperationStatus addAdditionalInformation = addAdditionalInformationToResource(topologyTemplateVertex, topologyTemplate);
         if (addAdditionalInformation != StorageOperationStatus.OK) {
-            result = Either.right(addAdditionalInformation);
-            return result;
+            return Either.right(addAdditionalInformation);
         }
         StorageOperationStatus associateCapProperties = associateCapPropertiesToResource(topologyTemplateVertex, topologyTemplate);
         if (associateCapProperties != StorageOperationStatus.OK) {
-            result = Either.right(associateCapProperties);
-            return result;
+            return Either.right(associateCapProperties);
         }
 
         StorageOperationStatus associateInterfaces = associateInterfacesToComponent(topologyTemplateVertex, topologyTemplate);
         if (associateInterfaces != StorageOperationStatus.OK) {
-            result = Either.right(associateInterfaces);
-            return result;
+            return Either.right(associateInterfaces);
         }
 
         StorageOperationStatus associatePathProperties = associateForwardingPathToResource(topologyTemplateVertex, topologyTemplate);
         if (associateCapProperties != StorageOperationStatus.OK) {
-            result = Either.right(associatePathProperties);
-            return result;
+            return Either.right(associatePathProperties);
         }
-
-
         return Either.left(topologyTemplate);
-
     }
 
     private StorageOperationStatus associatePoliciesToComponent(GraphVertex nodeTypeVertex, TopologyTemplate topologyTemplate) {
@@ -250,13 +215,6 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         return associateForwardingPathToComponent(topologyTemplateVertex,forwardingPaths);
     }
 
-    private StorageOperationStatus associateNodeFilterToResource(GraphVertex topologyTemplateVertex,
-            TopologyTemplate topologyTemplate) {
-        Map<String, CINodeFilterDataDefinition> nodeFilters =
-                topologyTemplate.getNodeFilterComponents();
-        return associateNodeFiltersToComponent(topologyTemplateVertex, nodeFilters);
-    }
-
     private StorageOperationStatus associateCapPropertiesToResource(GraphVertex topologyTemplateVertex, TopologyTemplate topologyTemplate) {
         Map<String, MapCapabilityProperty> calculatedCapProperties = topologyTemplate
                 .getCalculatedCapabilitiesProperties();
@@ -545,7 +503,7 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
     }
 
     private StorageOperationStatus associateInstAttributesToComponent(GraphVertex nodeTypeVertex, TopologyTemplate topologyTemplate) {
-        Map<String, MapPropertiesDataDefinition> instAttr = topologyTemplate.getInstAttributes();
+        Map<String, MapAttributesDataDefinition> instAttr = topologyTemplate.getInstAttributes();
         return associateInstAttributeToComponent(nodeTypeVertex, instAttr);
     }
 
@@ -559,7 +517,7 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         return StorageOperationStatus.OK;
     }
 
-    public StorageOperationStatus associateInstAttributeToComponent(GraphVertex nodeTypeVertex, Map<String, MapPropertiesDataDefinition> instAttr) {
+    public StorageOperationStatus associateInstAttributeToComponent(GraphVertex nodeTypeVertex, Map<String, MapAttributesDataDefinition> instAttr) {
         if (instAttr != null && !instAttr.isEmpty()) {
             Either<GraphVertex, StorageOperationStatus> assosiateElementToData = associateElementToData(nodeTypeVertex, VertexTypeEnum.INST_ATTRIBUTES, EdgeLabelEnum.INST_ATTRIBUTES, instAttr);
             if (assosiateElementToData.isRight()) {
@@ -694,6 +652,12 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
                 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
             }
         }
+        if (!componentParametersView.isIgnoreComponentInstancesAttributes()) {
+            status = setComponentInstancesAttributesFromGraph(componentV, toscaElement);
+            if (status != JanusGraphOperationStatus.OK) {
+                return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
+            }
+        }
         if (!componentParametersView.isIgnoreCapabilities()) {
             status = setCapabilitiesFromGraph(componentV, toscaElement);
             if (status != JanusGraphOperationStatus.OK) {
@@ -751,6 +715,14 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
             }
 
         }
+
+        if (!componentParametersView.isIgnoreOutputs()) {
+            final JanusGraphOperationStatus storageStatus = setOutputsFromGraph(componentV, toscaElement);
+            if (storageStatus != JanusGraphOperationStatus.OK) {
+                return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(storageStatus));
+            }
+        }
+
         if (!componentParametersView.isIgnoreProperties()) {
             status = setPropertiesFromGraph(componentV, toscaElement);
             if (status != JanusGraphOperationStatus.OK) {
@@ -775,7 +747,7 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
             }
         }
 
-        if (!componentParametersView.isIgnoreForwardingPath()) {
+        if (!componentParametersView.isIgnoreServicePath()) {
             status = setForwardingGraphPropertiesFromGraph(componentV, toscaElement);
             if (status != JanusGraphOperationStatus.OK) {
                 return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
@@ -791,6 +763,14 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
             }
         }
 
+        if (!componentParametersView.isIgnoreSubstitutionFilter()) {
+            status = setSubstitutionFilterComponentFromGraph(componentV, toscaElement);
+            if (status != JanusGraphOperationStatus.OK) {
+                return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status));
+
+            }
+        }
+
         if (!componentParametersView.isIgnoreInterfaces()) {
             JanusGraphOperationStatus storageStatus = setInterfacesFromGraph(componentV, toscaElement);
             if (storageStatus != JanusGraphOperationStatus.OK) {
@@ -900,19 +880,6 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         return StorageOperationStatus.OK;
     }
 
-    public StorageOperationStatus associateNodeFiltersToComponent(GraphVertex nodeTypeVertex,
-            Map<String, CINodeFilterDataDefinition> filterMaps) {
-        if (filterMaps != null && !filterMaps.isEmpty()) {
-            Either<GraphVertex, StorageOperationStatus> assosiateElementToData = associateElementToData
-                                                                                         (nodeTypeVertex, VertexTypeEnum.NODE_FILTER_TEMPLATE,
-                                                                                                 EdgeLabelEnum.NODE_FILTER_TEMPLATE, filterMaps);
-            if (assosiateElementToData.isRight()) {
-                return assosiateElementToData.right().value();
-            }
-        }
-        return StorageOperationStatus.OK;
-    }
-
     private JanusGraphOperationStatus setForwardingGraphPropertiesFromGraph(GraphVertex componentV, TopologyTemplate topologyTemplate) {
         Either<Map<String, ForwardingPathDataDefinition>, JanusGraphOperationStatus> result = getDataFromGraph(componentV, EdgeLabelEnum.FORWARDING_PATH);
         if (result.isLeft()) {
@@ -984,6 +951,18 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         return JanusGraphOperationStatus.OK;
     }
 
+    private JanusGraphOperationStatus setComponentInstancesAttributesFromGraph(final GraphVertex componentV,
+                                                                               final TopologyTemplate topologyTemplate) {
+        final Either<Map<String, MapAttributesDataDefinition>, JanusGraphOperationStatus> result =
+            getDataFromGraph(componentV, EdgeLabelEnum.INST_ATTRIBUTES);
+        if (result.isLeft()) {
+            topologyTemplate.setInstAttributes(result.left().value());
+        } else if (result.right().value() != JanusGraphOperationStatus.NOT_FOUND) {
+            return result.right().value();
+        }
+        return JanusGraphOperationStatus.OK;
+    }
+
     private JanusGraphOperationStatus setComponentInstancesInputsFromGraph(GraphVertex componentV, TopologyTemplate topologyTemplate) {
         Either<Map<String, MapPropertiesDataDefinition>, JanusGraphOperationStatus> result = getDataFromGraph(componentV, EdgeLabelEnum.INST_INPUTS);
         if (result.isLeft()) {
@@ -996,11 +975,11 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         return JanusGraphOperationStatus.OK;
     }
 
-    private JanusGraphOperationStatus setNodeFilterComponentFromGraph(GraphVertex componentV,
-            TopologyTemplate topologyTemplate) {
-        Either<Map<String, CINodeFilterDataDefinition>, JanusGraphOperationStatus> result =
-                getDataFromGraph(componentV,
-                        EdgeLabelEnum.NODE_FILTER_TEMPLATE);
+    private JanusGraphOperationStatus setNodeFilterComponentFromGraph(final GraphVertex componentV,
+                                                                      final TopologyTemplate topologyTemplate) {
+
+        final Either<Map<String, CINodeFilterDataDefinition>, JanusGraphOperationStatus> result =
+            getDataFromGraph(componentV, EdgeLabelEnum.NODE_FILTER_TEMPLATE);
         if (result.isLeft()) {
             topologyTemplate.setNodeFilterComponents(result.left().value());
         } else {
@@ -1011,6 +990,22 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         return JanusGraphOperationStatus.OK;
     }
 
+    private JanusGraphOperationStatus setSubstitutionFilterComponentFromGraph(final GraphVertex componentV,
+                                                                              final TopologyTemplate topologyTemplate) {
+
+        final Either<Map<String, SubstitutionFilterDataDefinition>, JanusGraphOperationStatus> result =
+            getDataFromGraph(componentV, EdgeLabelEnum.SUBSTITUTION_FILTER_TEMPLATE);
+        if (result.isLeft()) {
+            topologyTemplate.setSubstitutionFilterDataDefinitionMap(result.left().value());
+        } else {
+            if (result.right().value() != JanusGraphOperationStatus.NOT_FOUND) {
+                return result.right().value();
+            }
+        }
+        return JanusGraphOperationStatus.OK;
+    }
+
+
     @Override
     protected <T extends ToscaElement> JanusGraphOperationStatus setRequirementsFromGraph(GraphVertex componentV, T toscaElement) {
         Either<Map<String, MapListRequirementDataDefinition>, JanusGraphOperationStatus> result = getDataFromGraph(componentV, EdgeLabelEnum.CALCULATED_REQUIREMENTS);
@@ -1124,6 +1119,20 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         return JanusGraphOperationStatus.OK;
     }
 
+    private JanusGraphOperationStatus setOutputsFromGraph(final GraphVertex componentV,
+                                                          final TopologyTemplate toscaElement) {
+        final Either<Map<String, AttributeDataDefinition>, JanusGraphOperationStatus> result =
+            getDataFromGraph(componentV, EdgeLabelEnum.OUTPUTS);
+        if (result.isLeft()) {
+            toscaElement.setOutputs(result.left().value());
+        } else {
+            if (result.right().value() != JanusGraphOperationStatus.NOT_FOUND) {
+                return result.right().value();
+            }
+        }
+        return JanusGraphOperationStatus.OK;
+    }
+
     private JanusGraphOperationStatus setGroupsFromGraph(GraphVertex componentV, TopologyTemplate toscaElement) {
         Either<Map<String, GroupDataDefinition>, JanusGraphOperationStatus> result = getDataFromGraph(componentV, EdgeLabelEnum.GROUPS);
         if (result.isLeft()) {
@@ -1164,10 +1173,17 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         category.setUniqueId(categoryV.getUniqueId());
         category.setNormalizedName((String) metadataProperties.get(GraphPropertyEnum.NORMALIZED_NAME));
         category.setName((String) metadataProperties.get(GraphPropertyEnum.NAME));
+        final Boolean useServiceSubstitutionForNestedServices = (Boolean)metadataProperties.get(GraphPropertyEnum.USE_SUBSTITUTION_FOR_NESTED_SERVICES);
+        category.setUseServiceSubstitutionForNestedServices(useServiceSubstitutionForNestedServices == null ? false : useServiceSubstitutionForNestedServices);
 
         Type listTypeCat = new TypeToken<List<String>>() {}.getType();
         List<String> iconsfromJsonCat = getGson().fromJson((String) metadataProperties.get(GraphPropertyEnum.ICONS.getProperty()), listTypeCat);
         category.setIcons(iconsfromJsonCat);
+        
+        final Type metadataKeysTypeCat = new TypeToken<List<MetadataKeyDataDefinition>>() {}.getType();
+        final List<MetadataKeyDataDefinition> metadataKeysfromJsonCat = getGson().fromJson((String) metadataProperties.get(GraphPropertyEnum.METADATA_KEYS), metadataKeysTypeCat);
+        category.setMetadataKeys(metadataKeysfromJsonCat);
+        
         categories.add(category);
         toscaElement.setCategories(categories);