Adding Error code in  HEAT Validators

added error code in NestedResourceValidator and ResourceGroupResourceValidator
fixed sonar issues

Change-Id: I1705b7103a3b3c42338f97cb4a7a255a6c85e88f
Issue-ID: SDC-572
Signed-off-by: mojahidi <mojahidul.islam@amdocs.com>
Signed-off-by: vempo <vitaliy.emporopulo@amdocs.com>
diff --git a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/HeatTreeManagerUtil.java b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/HeatTreeManagerUtil.java
index 3802018..3749846 100644
--- a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/HeatTreeManagerUtil.java
+++ b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/tree/HeatTreeManagerUtil.java
@@ -1,22 +1,19 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+/*
+ * Copyright © 2016-2017 European Support Limited
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- * ============LICENSE_END=========================================================
- */
+*/
+
 
 package org.openecomp.sdc.heat.services.tree;
 
@@ -43,7 +40,11 @@
 
 public class HeatTreeManagerUtil {
 
-  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+  private static final String TYPE = "type";
+  private static final MdcDataDebugMessage MDC_DATA_DEBUG_MESSAGE = new MdcDataDebugMessage();
+  private HeatTreeManagerUtil() {
+
+  }
 
   /**
    * Init heat tree manager heat tree manager.
@@ -55,7 +56,7 @@
 
     HeatTreeManager heatTreeManager = new HeatTreeManager();
     fileContentMap.getFileList().stream().forEach(
-        fileName -> heatTreeManager.addFile(fileName, fileContentMap.getFileContent(fileName)));
+            fileName -> heatTreeManager.addFile(fileName, fileContentMap.getFileContent(fileName)));
 
     return heatTreeManager;
   }
@@ -63,161 +64,189 @@
   /**
    * Gets nested files.
    *
-   * @param filename      the filename
-   * @param hot           the hot
+   * @param filename the filename
+   * @param hot the hot
    * @param globalContext the global context
    * @return the nested files
    */
   public static Set<String> getNestedFiles(String filename, HeatOrchestrationTemplate hot,
                                            GlobalValidationContext globalContext) {
 
-
-    mdcDataDebugMessage.debugEntryMessage(null, null);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage(null, null);
 
     Set<String> nestedFileList = new HashSet<>();
-    Set<String> resourceDefNestedFiles;
     hot.getResources().values().stream().filter(
-        resource -> (resource.getType().endsWith(".yaml") || resource.getType().endsWith(".yml")))
-        .forEach(resource -> nestedFileList.add(resource.getType()));
+            resource -> resource.getType().endsWith(".yaml") || resource.getType().endsWith(".yml"))
+            .forEach(resource -> nestedFileList.add(resource.getType()));
 
-    resourceDefNestedFiles = getResourceDefNestedFiles(filename, hot, globalContext);
+    Set<String> resourceDefNestedFiles = getResourceDefNestedFiles(hot);
     nestedFileList.addAll(resourceDefNestedFiles);
 
-    mdcDataDebugMessage.debugExitMessage(null, null);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage(null, null);
     return nestedFileList;
   }
 
   /**
    * Gets artifact files.
    *
-   * @param filename      the filename
-   * @param hot           the hot
+   * @param filename the filename
+   * @param hot the hot
    * @param globalContext the global context
    * @return the artifact files
    */
   public static Set<String> getArtifactFiles(String filename, HeatOrchestrationTemplate hot,
                                              GlobalValidationContext globalContext) {
 
-
-    mdcDataDebugMessage.debugEntryMessage(null, null);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage(null, null);
 
     Set<String> artifactSet = new HashSet<>();
     Collection<Resource> resourcesValue =
-        hot.getResources() == null ? null : hot.getResources().values();
+            hot.getResources() == null ? null : hot.getResources().values();
     if (CollectionUtils.isNotEmpty(resourcesValue)) {
       for (Resource resource : resourcesValue) {
         Collection<Object> properties =
-            resource.getProperties() == null ? null : resource.getProperties().values();
-        if (CollectionUtils.isNotEmpty(properties)) {
-          for (Object property : properties) {
-            Set<String> artifactNames =
-                HeatStructureUtil.getReferencedValuesByFunctionName(filename, "get_file", property,
-                    globalContext);
-            artifactSet.addAll(artifactNames);
-          }
-        }
+                resource.getProperties() == null ? null : resource.getProperties().values();
+
+        artifactSet = getArtifactsFromPropertiesAndAddInArtifactSet(properties,
+                                      filename, globalContext);
       }
     }
 
-    mdcDataDebugMessage.debugExitMessage(null, null);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage(null, null);
     return artifactSet;
   }
 
-  private static Set<String> getResourceDefNestedFiles(String filename,
-                                                       HeatOrchestrationTemplate hot,
-                                                       GlobalValidationContext globalContext) {
+  private static Set<String> getArtifactsFromPropertiesAndAddInArtifactSet(Collection<Object> properties,
+                                                    String filename,
+                                                    GlobalValidationContext globalContext ){
+    Set<String> artifactSet = new HashSet<>();
+    if (CollectionUtils.isNotEmpty(properties)) {
 
+      for (Object property : properties) {
+        Set<String> artifactNames =
+                HeatStructureUtil.getReferencedValuesByFunctionName(filename, "get_file", property,
+                        globalContext);
+        artifactSet.addAll(artifactNames);
+      }
+    }
 
-    mdcDataDebugMessage.debugEntryMessage(null, null);
+    return artifactSet;
+  }
+
+  private static Set<String> getResourceDefNestedFiles(HeatOrchestrationTemplate hot) {
+
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage(null, null);
 
     Set<String> resourceDefNestedFiles = new HashSet<>();
     hot.getResources()
-        .entrySet().stream().filter(entry -> entry.getValue().getType()
-        .equals(HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource()))
-        .filter(entry ->
-            getResourceDef(filename, entry.getKey(), entry.getValue(), globalContext) != null
-                && HeatStructureUtil.isNestedResource(
-                getResourceDef(filename, entry.getKey(), entry.getValue(), globalContext)
-                    .getType()))
-        .forEach(entry -> resourceDefNestedFiles.add(
-            getResourceDef(filename, entry.getKey(), entry.getValue(), globalContext).getType()));
+            .entrySet().stream().filter(entry -> entry.getValue().getType()
+            .equals(HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource()))
+            .filter(entry ->
+                    getResourceDef(entry.getValue()) != null
+                            && HeatStructureUtil.isNestedResource(
+                            getResourceDef(entry.getValue())
+                                    .getType()))
+            .forEach(entry -> resourceDefNestedFiles.add(
+                    getResourceDef( entry.getValue()).getType()));
 
-    mdcDataDebugMessage.debugExitMessage(null, null);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage(null, null);
     return resourceDefNestedFiles;
   }
 
   /**
    * Gets resource def.
    *
-   * @param filename      the filename
-   * @param resourceName  the resource name
-   * @param resource      the resource
-   * @param globalContext the global context
+   * @param resource the resource
    * @return the resource def
    */
   @SuppressWarnings("unchecked")
-  public static Resource getResourceDef(String filename, String resourceName, Resource resource,
-                                        GlobalValidationContext globalContext) {
+  public static Resource getResourceDef( Resource resource) {
 
-
-    mdcDataDebugMessage.debugEntryMessage(null, null);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage(null, null);
 
     Resource resourceDef = null;
     Map<String, Object> resourceDefValueMap = resource.getProperties() == null ? null
-        : (Map<String, Object>) resource.getProperties().get(
+            : (Map<String, Object>) resource.getProperties().get(
             PropertiesMapKeyTypes.RESOURCE_DEF.getKeyMap());
-    if (MapUtils.isNotEmpty(resourceDefValueMap) && resourceDefValueMap != null) {
-      Object resourceDefType = resourceDefValueMap.get("type");
-      if (Objects.nonNull(resourceDefType)) {
-        if (resourceDefType instanceof String) {
-          boolean isNested =
-              checkIfResourceGroupTypeIsNested(filename, resourceName, (String) resourceDefType,
-                  globalContext);
-          if (isNested) {
-            resourceDef = new Resource();
-            resourceDef.setType((String) resourceDefType);
-            //noinspection unchecked
-            resourceDef.setProperties((Map<String, Object>) resourceDefValueMap.get("properties"));
-          }
-        } else {
-          globalContext.addMessage(filename, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
-                  .getErrorWithParameters(Messages.INVALID_RESOURCE_GROUP_TYPE.getErrorMessage(),
-                      resourceName, resourceDefType.toString()),
-              LoggerTragetServiceName.VALIDATE_RESOURCE_GROUP_TYPE, "Invalid resource group type");
-        }
-      } else {
-        globalContext.addMessage(filename, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
-                .getErrorWithParameters(Messages.INVALID_RESOURCE_TYPE.getErrorMessage(), "null",
-                    resourceName), LoggerTragetServiceName.VALIDATE_RESOURCE_GROUP_TYPE,
-            "Invalid resource type");
+    if (resourceDefValueMap != null && MapUtils.isNotEmpty(resourceDefValueMap) ) {
+      Object resourceDefType = resourceDefValueMap.get(TYPE);
+      if ( resourceDefType instanceof String && isResourceGroupTypeNested((String) resourceDefType)) {
+        resourceDef = new Resource();
+        resourceDef.setType((String) resourceDefType);
+        //noinspection unchecked
+        resourceDef.setProperties((Map<String, Object>) resourceDefValueMap.get("properties"));
       }
 
     }
 
-    mdcDataDebugMessage.debugExitMessage(null, null);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage(null, null);
     return resourceDef;
   }
 
-  /**
-   * Check if resource group type is nested boolean.
-   *
-   * @param filename        the filename
-   * @param resourceName    the resource name
-   * @param resourceDefType the resource def type
-   * @param globalContext   the global context
-   * @return the boolean
-   */
-  public static boolean checkIfResourceGroupTypeIsNested(String filename, String resourceName,
-                                                         String resourceDefType,
-                                                         GlobalValidationContext globalContext) {
-    if (!HeatStructureUtil.isNestedResource(resourceDefType)) {
-      globalContext.addMessage(filename, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
-              .getErrorWithParameters(Messages.INVALID_RESOURCE_GROUP_TYPE.getErrorMessage(),
-                  resourceName, resourceDefType),
-          LoggerTragetServiceName.VALIDATE_RESOURCE_GROUP_TYPE,
-          "Invalid resource group type");
-      return false;
+  @SuppressWarnings("unchecked")
+  public static void checkResourceGroupTypeValid(String filename, String resourceName,
+                                                 Resource resource,
+                                                 GlobalValidationContext globalContext) {
+    Map<String, Object> resourceDefValueMap = resource.getProperties() == null ? null
+            : (Map<String, Object>) resource.getProperties().get(
+            PropertiesMapKeyTypes.RESOURCE_DEF.getKeyMap());
+    if (resourceDefValueMap != null && MapUtils.isNotEmpty(resourceDefValueMap) ) {
+      Object resourceDefType = resourceDefValueMap.get(TYPE);
+      if (Objects.nonNull(resourceDefType) && !(resourceDefType instanceof String) ) {
+        globalContext.addMessage(filename, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
+                        .getErrorWithParameters(
+                                globalContext.getMessageCode(),
+                                Messages.INVALID_RESOURCE_GROUP_TYPE.getErrorMessage(),
+                                resourceName, resourceDefType.toString()),
+                LoggerTragetServiceName.VALIDATE_RESOURCE_GROUP_TYPE, "Invalid resource group type");
+      }
     }
-    return true;
+  }
+
+  @SuppressWarnings("unchecked")
+  public static void checkResourceTypeValid(String filename, String resourceName,
+                                            Resource resource,
+                                            GlobalValidationContext globalContext) {
+    Map<String, Object> resourceDefValueMap = resource.getProperties() == null ? null
+            : (Map<String, Object>) resource.getProperties().get(
+            PropertiesMapKeyTypes.RESOURCE_DEF.getKeyMap());
+    if (resourceDefValueMap != null && MapUtils.isNotEmpty(resourceDefValueMap) ) {
+      Object resourceDefType = resourceDefValueMap.get(TYPE);
+      if (Objects.isNull(resourceDefType)) {
+        globalContext.addMessage(filename, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
+                        .getErrorWithParameters(
+                                globalContext.getMessageCode(), Messages.INVALID_RESOURCE_TYPE.getErrorMessage(),
+                                "null", resourceName), LoggerTragetServiceName.VALIDATE_RESOURCE_GROUP_TYPE,
+                "Invalid resource type");
+      }
+    }
+  }
+
+  public static boolean isResourceGroupTypeNested(String resourceDefType) {
+    return HeatStructureUtil.isNestedResource(resourceDefType);
+  }
+
+  public static boolean checkIfResourceGroupTypeIsNested(String filename, String resourceName,
+                                                         Resource resource,
+                                                         GlobalValidationContext globalContext) {
+    //noinspection unchecked
+    Map<String, Object> resourceDefValueMap = resource.getProperties() == null ? null
+            : (Map<String, Object>) resource.getProperties().get(
+            PropertiesMapKeyTypes.RESOURCE_DEF.getKeyMap());
+    if (resourceDefValueMap != null && MapUtils.isNotEmpty(resourceDefValueMap) ) {
+      Object resourceDefType = resourceDefValueMap.get(TYPE);
+      if (resourceDefType instanceof String && isResourceGroupTypeNested((String) resourceDefType)) {
+
+        globalContext.addMessage(filename, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
+                        .getErrorWithParameters(
+                                globalContext.getMessageCode(),
+                                Messages.INVALID_RESOURCE_GROUP_TYPE.getErrorMessage(),
+                                resourceName, resourceDefType.toString()),
+                LoggerTragetServiceName.VALIDATE_RESOURCE_GROUP_TYPE,
+                "Invalid resource group type");
+        return true;
+      }
+    }
+    return false;
   }
 }
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/util/HeatValidationService.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/util/HeatValidationService.java
index d59d0a8..90750a4 100644
--- a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/util/HeatValidationService.java
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/util/HeatValidationService.java
@@ -1,36 +1,29 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+/*
+ * Copyright © 2016-2017 European Support Limited
+ *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- * ============LICENSE_END=========================================================
  */
 
 package org.openecomp.sdc.validation.impl.util;
 
 import org.apache.commons.collections4.CollectionUtils;
+import org.openecomp.sdc.heat.datatypes.model.*;
 import org.openecomp.sdc.tosca.services.YamlUtil;
 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
 import org.openecomp.core.validation.types.GlobalValidationContext;
 import org.openecomp.sdc.common.errors.Messages;
 import org.openecomp.sdc.datatypes.error.ErrorLevel;
 import org.openecomp.sdc.heat.datatypes.DefinedHeatParameterTypes;
-import org.openecomp.sdc.heat.datatypes.model.Environment;
-import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
-import org.openecomp.sdc.heat.datatypes.model.Parameter;
-import org.openecomp.sdc.heat.datatypes.model.Resource;
 import org.openecomp.sdc.logging.api.Logger;
 import org.openecomp.sdc.logging.api.LoggerFactory;
 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
@@ -42,45 +35,43 @@
 import org.openecomp.sdc.validation.impl.validators.HeatValidator;
 
 import java.io.InputStream;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 
 
 public class HeatValidationService {
 
-  private static final Logger logger = (Logger) LoggerFactory.getLogger(HeatValidator.class);
+  private static final Logger LOGGER = LoggerFactory.getLogger(HeatValidator.class);
   private static final String NESTED_FILE = "nested file";
-  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+  private static final String NO_CONTENT_IN_FILE_MSG = "The file ' %s ' has no content";
+  private static final MdcDataDebugMessage MDC_DATA_DEBUG_MESSAGE = new MdcDataDebugMessage();
+  private HeatValidationService(){
 
+  }
   /**
    * Check artifacts existence.
    *
-   * @param fileName       the file name
+   * @param fileName the file name
    * @param artifactsNames the artifacts names
-   * @param globalContext  the global context
+   * @param globalContext the global context
    */
   public static void checkArtifactsExistence(String fileName, Set<String> artifactsNames,
                                              GlobalValidationContext globalContext) {
 
 
-    mdcDataDebugMessage.debugEntryMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", fileName);
     artifactsNames
-        .stream()
-        .filter(artifactName -> !globalContext.getFileContextMap().containsKey(artifactName))
-        .forEach(artifactName -> {
-          globalContext.addMessage(fileName,
-              ErrorLevel.ERROR, ErrorMessagesFormatBuilder
-                  .getErrorWithParameters(globalContext.getMessageCode(),Messages.MISSING_ARTIFACT.getErrorMessage()
-                      ,artifactName),
-                  LoggerTragetServiceName.VALIDATE_ARTIFACTS_EXISTENCE,
-              LoggerErrorDescription.MISSING_FILE);
-        });
+            .stream()
+            .filter(artifactName -> !globalContext.getFileContextMap().containsKey(artifactName))
+            .forEach(artifactName ->
+              globalContext.addMessage(fileName,
+                      ErrorLevel.ERROR, ErrorMessagesFormatBuilder
+                              .getErrorWithParameters(
+                                      globalContext.getMessageCode(),
+                                      Messages.MISSING_ARTIFACT.getErrorMessage(), artifactName),
+                      LoggerTragetServiceName.VALIDATE_ARTIFACTS_EXISTENCE,
+                      LoggerErrorDescription.MISSING_FILE));
 
-    mdcDataDebugMessage.debugExitMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", fileName);
   }
 
   /**
@@ -109,74 +100,98 @@
     return stringBuilder.toString();
   }
 
-
   /**
    * Check nested parameters.
    *
-   * @param parentFileName         the calling nested file name
-   * @param nestedFileName         the nested file name
-   * @param resourceName           the resource name
-   * @param globalContext          the global context
-   * @param resourceFileProperties the resource file properties
+   * @param parentFileName the calling nested file name
+   * @param nestedFileName the nested file name
+   * @param globalContext the global context
+   * @param parentParameters parent parameters.
+   * @param nestedParameters nested parameters.
+   * @param nestedParametersNames nested parameter names.
    */
   public static void checkNestedParameters(String parentFileName, String nestedFileName,
-                                           String resourceName, Resource resource,
-                                           Set<String> resourceFileProperties,
-                                           Optional<String> indexVarValue,
-                                           GlobalValidationContext globalContext) {
+                                           GlobalValidationContext globalContext,
+                                           Map<String, Parameter> parentParameters,
+                                           Map<String, Parameter> nestedParameters,
+                                           Set<String> nestedParametersNames) {
 
-
-    mdcDataDebugMessage.debugEntryMessage("file", parentFileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", parentFileName);
 
     HeatOrchestrationTemplate parentHeatOrchestrationTemplate;
     HeatOrchestrationTemplate nestedHeatOrchestrationTemplate;
+
     try {
-      Optional<InputStream> fileContent = globalContext.getFileContent(nestedFileName);
-      if (fileContent.isPresent()) {
-        nestedHeatOrchestrationTemplate =
-            new YamlUtil().yamlToObject(fileContent.get(), HeatOrchestrationTemplate.class);
-      } else {
-        MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
-            LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
-            ErrorLevel.ERROR.name(), LoggerErrorCode.DATA_ERROR.getErrorCode(),
-            LoggerErrorDescription.EMPTY_FILE);
-        throw new Exception("The file '" + nestedFileName + "' has no content");
-      }
+      nestedHeatOrchestrationTemplate = getHeatOrchestrationTemplate(nestedFileName, globalContext);
+      parentHeatOrchestrationTemplate = getHeatOrchestrationTemplate(parentFileName, globalContext);
     } catch (Exception exception) {
-      logger.debug("",exception);
-      mdcDataDebugMessage.debugExitMessage("file", parentFileName);
+      MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", parentFileName);
       return;
     }
 
-    try {
-      Optional<InputStream> fileContent = globalContext.getFileContent(parentFileName);
-      if (fileContent.isPresent()) {
-        parentHeatOrchestrationTemplate =
-            new YamlUtil().yamlToObject(fileContent.get(), HeatOrchestrationTemplate.class);
-      } else {
-        MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
-            LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
-            ErrorLevel.ERROR.name(), LoggerErrorCode.DATA_ERROR.getErrorCode(),
-            LoggerErrorDescription.EMPTY_FILE);
-        throw new Exception("The file '" + parentFileName + "' has no content");
-      }
-    } catch (Exception exception) {
-      logger.debug("",exception);
-      mdcDataDebugMessage.debugExitMessage("file", parentFileName);
-      return;
+    parentParameters.putAll(parentHeatOrchestrationTemplate.getParameters());
+    nestedParameters.putAll(nestedHeatOrchestrationTemplate.getParameters());
+    if (!nestedParameters.isEmpty()) {
+      nestedParametersNames.addAll(nestedHeatOrchestrationTemplate.getParameters().keySet());
     }
-    Map<String, Parameter> parentParameters = parentHeatOrchestrationTemplate.getParameters();
-    Map<String, Parameter> nestedParameters = nestedHeatOrchestrationTemplate.getParameters();
-    Set<String> nestedParametersNames =
-        nestedParameters == null ? null : nestedHeatOrchestrationTemplate.getParameters().keySet();
+
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", parentFileName);
+  }
+
+  private static HeatOrchestrationTemplate getHeatOrchestrationTemplate(String fileName,
+                                                                        GlobalValidationContext globalContext)
+          throws Exception {
+
+    Optional<InputStream> fileContent = globalContext.getFileContent(fileName);
+    if (fileContent.isPresent()) {
+      return new YamlUtil().yamlToObject(fileContent.get(), HeatOrchestrationTemplate.class);
+    } else {
+      MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
+              LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
+              ErrorLevel.ERROR.name(), LoggerErrorCode.DATA_ERROR.getErrorCode(),
+              LoggerErrorDescription.EMPTY_FILE);
+      Exception exception = new Exception(String.format(NO_CONTENT_IN_FILE_MSG, fileName));
+      LOGGER.error("Error while reading file : " + fileName , exception);
+      throw exception;
+    }
+  }
+
+  public static void checkNestedParametersNoMissingParameterInNested(String parentFileName,
+                                                                     String nestedFileName,
+                                                                     String resourceName,
+                                                                     Set<String> resourceFileProperties,
+                                                                     GlobalValidationContext globalContext) {
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", parentFileName);
+
+    Map<String, Parameter> parentParameters = new HashMap<>();
+    Map<String, Parameter> nestedParameters = new HashMap<>();
+    Set<String> nestedParametersNames = new HashSet<>();
+    checkNestedParameters(parentFileName, nestedFileName, globalContext, parentParameters,
+            nestedParameters, nestedParametersNames);
 
     checkNoMissingParameterInNested(parentFileName, nestedFileName, resourceName,
-        resourceFileProperties, nestedParametersNames, globalContext);
-    checkNestedInputValuesAlignWithType(parentFileName, nestedFileName, parentParameters,
-        nestedParameters, resourceName, resource, indexVarValue, globalContext);
+            resourceFileProperties, nestedParametersNames, globalContext);
 
-    mdcDataDebugMessage.debugExitMessage("file", parentFileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", parentFileName);
+  }
 
+  public static void checkNestedInputValuesAlignWithType(String parentFileName,
+                                                         String nestedFileName,
+                                                         String resourceName, Resource resource,
+                                                         Optional<String> indexVarValue,
+                                                         GlobalValidationContext globalContext) {
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", parentFileName);
+
+    Map<String, Parameter> parentParameters = new HashMap<>();
+    Map<String, Parameter> nestedParameters = new HashMap<>();
+    Set<String> nestedParametersNames = new HashSet<>();
+    checkNestedParameters(parentFileName, nestedFileName, globalContext, parentParameters,
+            nestedParameters, nestedParametersNames);
+
+    checkNestedInputValuesAlignWithType(parentFileName, nestedFileName,
+            nestedParameters, resourceName, resource, indexVarValue, globalContext);
+
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", parentFileName);
   }
 
   private static void checkNoMissingParameterInNested(String parentFileName, String nestedFileName,
@@ -185,54 +200,49 @@
                                                       Set<String> nestedParametersNames,
                                                       GlobalValidationContext globalContext) {
 
-    mdcDataDebugMessage.debugEntryMessage(NESTED_FILE, nestedFileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("nested file", nestedFileName);
 
     if (CollectionUtils.isNotEmpty(nestedParametersNames)) {
       resourceFileProperties
-          .stream()
-          .filter(propertyName -> !nestedParametersNames.contains(propertyName))
-          .forEach(propertyName -> globalContext
-              .addMessage(parentFileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
-                      .getErrorWithParameters(Messages
-                              .MISSING_PARAMETER_IN_NESTED.getErrorMessage(),
-                          nestedFileName, resourceName, propertyName),
-                  LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
-                  LoggerErrorDescription.MISSING_PARAMETER_IN_NESTED));
+              .stream()
+              .filter(propertyName -> !nestedParametersNames.contains(propertyName))
+              .forEach(propertyName -> globalContext
+                      .addMessage(parentFileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
+                                      .getErrorWithParameters(
+                                              globalContext.getMessageCode(),
+                                              Messages.MISSING_PARAMETER_IN_NESTED.getErrorMessage(),
+                                              nestedFileName, resourceName, propertyName),
+                              LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
+                              LoggerErrorDescription.MISSING_PARAMETER_IN_NESTED));
     }
 
-    mdcDataDebugMessage.debugExitMessage(NESTED_FILE, nestedFileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage(NESTED_FILE, nestedFileName);
   }
 
-
   private static void checkNestedInputValuesAlignWithType(String parentFileName,
                                                           String nestedFileName,
-                                                          Map<String, Parameter> parentParameters,
                                                           Map<String, Parameter> nestedParameters,
                                                           String resourceName, Resource resource,
                                                           Optional<String> indexVarValue,
                                                           GlobalValidationContext globalContext) {
 
-
-    mdcDataDebugMessage.debugEntryMessage(NESTED_FILE, nestedFileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage(NESTED_FILE, nestedFileName);
 
     Map<String, Object> properties = resource.getProperties();
     for (Map.Entry<String, Object> propertyEntry : properties.entrySet()) {
       String parameterName = propertyEntry.getKey();
       Object parameterInputValue = propertyEntry.getValue();
-
-      if (Objects.nonNull(parameterInputValue)) {
-        if (parameterInputValue instanceof String) {
-          if (indexVarValue.isPresent() && indexVarValue.get().equals(parameterInputValue)) {
-            parameterInputValue = 3; //indexVarValue is actually number value in runtime
-          }
-          validateStaticValueForNestedInputParameter(parentFileName, nestedFileName, resourceName,
-              parameterName, parameterInputValue, nestedParameters.get(parameterName),
-              globalContext);
+      if (parameterInputValue instanceof String) {
+        if (indexVarValue.isPresent() && indexVarValue.get().equals(parameterInputValue)) {
+          parameterInputValue = 3; //indexVarValue is actually number value in runtime
         }
+        validateStaticValueForNestedInputParameter(parentFileName, nestedFileName, resourceName,
+                parameterName, parameterInputValue, nestedParameters.get(parameterName),
+                globalContext);
       }
     }
 
-    mdcDataDebugMessage.debugExitMessage(NESTED_FILE, nestedFileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage(NESTED_FILE, nestedFileName);
   }
 
   private static void validateStaticValueForNestedInputParameter(String parentFileName,
@@ -242,25 +252,24 @@
                                                                  Object staticValue,
                                                                  Parameter parameterInNested,
                                                                  GlobalValidationContext
-                                                                     globalContext) {
+                                                                         globalContext) {
 
-
-    mdcDataDebugMessage.debugEntryMessage(NESTED_FILE, nestedFileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage(NESTED_FILE, nestedFileName);
 
     if (parameterInNested == null) {
       return;
     }
     if (!DefinedHeatParameterTypes
-        .isValueIsFromGivenType(staticValue, parameterInNested.getType())) {
+            .isValueIsFromGivenType(staticValue, parameterInNested.getType())) {
       globalContext.addMessage(parentFileName, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
-              .getErrorWithParameters(Messages
-                      .WRONG_VALUE_TYPE_ASSIGNED_NESTED_INPUT.getErrorMessage(),
-                  resourceName, parameterName, nestedFileName),
-          LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
-          LoggerErrorDescription.WRONG_VALUE_ASSIGNED_NESTED_PARAMETER);
+                      .getErrorWithParameters(globalContext.getMessageCode(),
+                              Messages.WRONG_VALUE_TYPE_ASSIGNED_NESTED_INPUT.getErrorMessage(),
+                              resourceName, parameterName, nestedFileName),
+              LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
+              LoggerErrorDescription.WRONG_VALUE_ASSIGNED_NESTED_PARAMETER);
     }
 
-    mdcDataDebugMessage.debugExitMessage(NESTED_FILE, nestedFileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage(NESTED_FILE, nestedFileName);
   }
 
 
@@ -268,58 +277,72 @@
    * Is nested loop exist in file boolean.
    *
    * @param callingFileName the calling file name
-   * @param nestedFileName  the nested file name
-   * @param filesInLoop     the files in loop
-   * @param globalContext   the global context
+   * @param nestedFileName the nested file name
+   * @param filesInLoop the files in loop
+   * @param globalContext the global context
    * @return the boolean
    */
   public static boolean isNestedLoopExistInFile(String callingFileName, String nestedFileName,
                                                 List<String> filesInLoop,
                                                 GlobalValidationContext globalContext) {
 
-
-    mdcDataDebugMessage.debugEntryMessage("file", callingFileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", callingFileName);
 
     HeatOrchestrationTemplate nestedHeatOrchestrationTemplate;
     try {
-      Optional<InputStream> fileContent = globalContext.getFileContent(nestedFileName);
-      if (fileContent.isPresent()) {
-        nestedHeatOrchestrationTemplate =
-            new YamlUtil().yamlToObject(fileContent.get(), HeatOrchestrationTemplate.class);
-      } else {
-        MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
-            LoggerTragetServiceName.VALIDATE_NESTING_LOOPS, ErrorLevel.ERROR.name(),
-            LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.EMPTY_FILE);
-        throw new Exception("The file '" + nestedFileName + "' has no content");
-      }
-
+      nestedHeatOrchestrationTemplate = getNestedHeatOrchestrationTemplate(nestedFileName,
+                                          globalContext);
     } catch (Exception exception) {
-      logger.debug("",exception);
-      logger.warn("HEAT Validator will not be executed on file " + nestedFileName
-          + " due to illegal HEAT format");
+      LOGGER.error("Error while reading file :  " + nestedFileName, exception);
+      LOGGER.warn("HEAT Validator will not be executed on file " + nestedFileName
+              + " due to illegal HEAT format");
 
-      mdcDataDebugMessage.debugExitMessage("file", callingFileName);
+      MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", callingFileName);
       return false;
     }
     filesInLoop.add(nestedFileName);
     Collection<Resource> nestedResources =
-        nestedHeatOrchestrationTemplate.getResources() == null ? null
-            : nestedHeatOrchestrationTemplate.getResources().values();
+            nestedHeatOrchestrationTemplate.getResources() == null ? null
+                    : nestedHeatOrchestrationTemplate.getResources().values();
+    boolean isNestedLoopExist = addNestedFilesInLoopAndCheckIfNestedLoopExist(nestedResources,
+                    callingFileName, filesInLoop, globalContext);
+
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", callingFileName);
+    return isNestedLoopExist;
+  }
+  private static boolean addNestedFilesInLoopAndCheckIfNestedLoopExist(
+                Collection<Resource> nestedResources,String callingFileName,
+                List<String> filesInLoop,
+                GlobalValidationContext globalContext){
     if (CollectionUtils.isNotEmpty(nestedResources)) {
       for (Resource resource : nestedResources) {
         String resourceType = resource.getType();
 
         if (Objects.nonNull(resourceType) && isNestedResource(resourceType)) {
-          mdcDataDebugMessage.debugExitMessage("file", callingFileName);
+          MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", callingFileName);
           return resourceType.equals(callingFileName) || !filesInLoop.contains(resourceType)
-              && isNestedLoopExistInFile(callingFileName, resourceType, filesInLoop, globalContext);
+                  && isNestedLoopExistInFile(callingFileName, resourceType, filesInLoop, globalContext);
         }
       }
     }
-
-    mdcDataDebugMessage.debugExitMessage("file", callingFileName);
     return false;
   }
+  private static HeatOrchestrationTemplate getNestedHeatOrchestrationTemplate( String nestedFileName,
+                                          GlobalValidationContext globalContext) throws Exception {
+    Optional<InputStream> fileContent = globalContext.getFileContent(nestedFileName);
+    HeatOrchestrationTemplate nestedHeatOrchestrationTemplate;
+    if (fileContent.isPresent()) {
+      nestedHeatOrchestrationTemplate =
+              new YamlUtil().yamlToObject(fileContent.get(), HeatOrchestrationTemplate.class);
+    } else {
+      MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
+              LoggerTragetServiceName.VALIDATE_NESTING_LOOPS, ErrorLevel.ERROR.name(),
+              LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.EMPTY_FILE);
+      throw new Exception(String.format(NO_CONTENT_IN_FILE_MSG, nestedFileName));
+    }
+
+    return nestedHeatOrchestrationTemplate;
+  }
 
   public static boolean isNestedResource(String resourceType) {
     return resourceType.contains(".yaml") || resourceType.contains(".yml");
@@ -328,31 +351,30 @@
   /**
    * Validate env content environment.
    *
-   * @param fileName      the file name
-   * @param envFileName   the env file name
+   * @param fileName the file name
+   * @param envFileName the env file name
    * @param globalContext the global context
    * @return the environment
    */
   public static Environment validateEnvContent(String fileName, String envFileName,
                                                GlobalValidationContext globalContext) {
 
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("env file", envFileName);
 
-    mdcDataDebugMessage.debugEntryMessage("env file", envFileName);
-
-    Environment envContent = null;
+    Environment envContent;
     try {
       Optional<InputStream> fileContent = globalContext.getFileContent(envFileName);
       if (fileContent.isPresent()) {
         envContent = new YamlUtil().yamlToObject(fileContent.get(), Environment.class);
       } else {
         MdcDataErrorMessage.createErrorMessageAndUpdateMdc(LoggerConstants.TARGET_ENTITY_API,
-            LoggerTragetServiceName.VALIDATE_ENV_FILE, ErrorLevel.ERROR.name(),
-            LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.EMPTY_FILE);
-        throw new Exception("The file '" + envFileName + "' has no content");
+                LoggerTragetServiceName.VALIDATE_ENV_FILE, ErrorLevel.ERROR.name(),
+                LoggerErrorCode.DATA_ERROR.getErrorCode(), LoggerErrorDescription.EMPTY_FILE);
+        throw new Exception(String.format(NO_CONTENT_IN_FILE_MSG, envFileName));
       }
     } catch (Exception exception) {
-      logger.debug("",exception);
-      mdcDataDebugMessage.debugExitMessage("env file", envFileName);
+      LOGGER.error("Error while reading env file : " + envFileName, exception);
+      MDC_DATA_DEBUG_MESSAGE.debugExitMessage("env file", envFileName);
       return null;
     }
     return envContent;
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/NestedResourceValidator.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/NestedResourceValidator.java
index aa7b918..41897f4 100644
--- a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/NestedResourceValidator.java
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/NestedResourceValidator.java
@@ -1,6 +1,23 @@
+/*
+ * Copyright © 2016-2017 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.openecomp.sdc.validation.impl.validators.heatresource;
 
 import org.apache.commons.collections4.CollectionUtils;
+import org.openecomp.core.validation.ErrorMessageCode;
 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
 import org.openecomp.core.validation.types.GlobalValidationContext;
 import org.openecomp.sdc.common.errors.Messages;
@@ -24,71 +41,83 @@
  * Created by TALIO on 2/22/2017.
  */
 public class NestedResourceValidator implements ResourceValidator {
-  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+  private static final MdcDataDebugMessage MDC_DATA_DEBUG_MESSAGE = new MdcDataDebugMessage();
+  private static final ErrorMessageCode ERROR_CODE_HNR1 = new ErrorMessageCode("HNR1");
+  private static final ErrorMessageCode ERROR_CODE_HNR2 = new ErrorMessageCode("HNR2");
+  private static final ErrorMessageCode ERROR_CODE_HNR3 = new ErrorMessageCode("HNR3");
+  private static final ErrorMessageCode ERROR_CODE_HNR4 = new ErrorMessageCode("HNR4");
 
   @Override
   public void validate(String fileName, Map.Entry<String, Resource> resourceEntry,
-                       GlobalValidationContext globalContext, ValidationContext validationContext){
+                       GlobalValidationContext globalContext, ValidationContext validationContext) {
 
     handleNestedResourceType(fileName, resourceEntry.getKey(), resourceEntry.getValue(),
-        Optional.empty(), globalContext);
+            Optional.empty(), globalContext);
   }
 
   private static void handleNestedResourceType(String fileName, String resourceName,
                                                Resource resource, Optional<String> indexVarValue,
                                                GlobalValidationContext globalContext) {
 
-    mdcDataDebugMessage.debugEntryMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", fileName);
 
     validateAllPropertiesMatchNestedParameters(fileName, resourceName, resource, indexVarValue,
-        globalContext);
+            globalContext);
     validateLoopsOfNestingFromFile(fileName, resource.getType(), globalContext);
 
-    mdcDataDebugMessage.debugExitMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", fileName);
   }
 
   public static void validateAllPropertiesMatchNestedParameters(String fileName,
-                                                                 String resourceName,
-                                                                 Resource resource,
-                                                                 Optional<String> indexVarValue,
-                                                                 GlobalValidationContext
-                                                                     globalContext) {
+                                                                String resourceName,
+                                                                Resource resource,
+                                                                Optional<String> indexVarValue,
+                                                                GlobalValidationContext
+                                                                        globalContext) {
 
-    mdcDataDebugMessage.debugEntryMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", fileName);
 
     String resourceType = resource.getType();
     if (globalContext.getFileContextMap().containsKey(resourceType)) {
       Set<String> propertiesNames =
-          resource.getProperties() == null ? null : resource.getProperties().keySet();
+              resource.getProperties() == null ? null : resource.getProperties().keySet();
       if (CollectionUtils.isNotEmpty(propertiesNames)) {
+        globalContext.setMessageCode(ERROR_CODE_HNR3);
         HeatValidationService
-            .checkNestedParameters(fileName, resourceType, resourceName, resource, propertiesNames,
-                indexVarValue, globalContext);
+                .checkNestedParametersNoMissingParameterInNested(fileName, resourceType, resourceName,
+                         propertiesNames,
+                         globalContext);
+        globalContext.setMessageCode(ERROR_CODE_HNR4);
+        HeatValidationService
+                .checkNestedInputValuesAlignWithType(fileName, resourceType, resourceName, resource,
+                        indexVarValue, globalContext);
       }
     } else {
       globalContext.addMessage(resourceType, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
-              .getErrorWithParameters(Messages.MISSING_NESTED_FILE.getErrorMessage(), resourceType),
-          LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
-          LoggerErrorDescription.MISSING_FILE);
+                      .getErrorWithParameters(ERROR_CODE_HNR1,
+                              Messages.MISSING_NESTED_FILE.getErrorMessage(),
+                              resourceType),
+              LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
+              LoggerErrorDescription.MISSING_FILE);
     }
 
-    mdcDataDebugMessage.debugExitMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", fileName);
   }
 
   public static void validateLoopsOfNestingFromFile(String fileName, String resourceType,
-                                                     GlobalValidationContext globalContext) {
+                                                    GlobalValidationContext globalContext) {
 
-    mdcDataDebugMessage.debugEntryMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", fileName);
 
     List<String> filesInLoop = new ArrayList<>(Collections.singletonList(fileName));
     if (HeatValidationService
-        .isNestedLoopExistInFile(fileName, resourceType, filesInLoop, globalContext)) {
+            .isNestedLoopExistInFile(fileName, resourceType, filesInLoop, globalContext)) {
       globalContext.addMessage(fileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
-              .getErrorWithParameters(Messages.NESTED_LOOP.getErrorMessage(),
-                  HeatValidationService.drawFilesLoop(filesInLoop)),
-          LoggerTragetServiceName.VALIDATE_NESTING_LOOPS, LoggerErrorDescription.NESTED_LOOP);
+                      .getErrorWithParameters(ERROR_CODE_HNR2, Messages.NESTED_LOOP.getErrorMessage(),
+                              HeatValidationService.drawFilesLoop(filesInLoop)),
+              LoggerTragetServiceName.VALIDATE_NESTING_LOOPS, LoggerErrorDescription.NESTED_LOOP);
     }
 
-    mdcDataDebugMessage.debugExitMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", fileName);
   }
 }
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/ResourceGroupResourceValidator.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/ResourceGroupResourceValidator.java
index c94875c..0679492 100644
--- a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/ResourceGroupResourceValidator.java
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/ResourceGroupResourceValidator.java
@@ -1,6 +1,23 @@
+/*
+ * Copyright © 2016-2017 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.openecomp.sdc.validation.impl.validators.heatresource;
 
 import org.apache.commons.collections4.CollectionUtils;
+import org.openecomp.core.validation.ErrorMessageCode;
 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
 import org.openecomp.core.validation.types.GlobalValidationContext;
 import org.openecomp.sdc.common.errors.Messages;
@@ -27,7 +44,16 @@
  * Created by TALIO on 2/22/2017.
  */
 public class ResourceGroupResourceValidator implements ResourceValidator {
-  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+  private static final MdcDataDebugMessage MDC_DATA_DEBUG_MESSAGE = new MdcDataDebugMessage();
+
+  private static final ErrorMessageCode ERROR_CODE_HRR1 = new ErrorMessageCode("HRR1");
+  private static final ErrorMessageCode ERROR_CODE_HRR2 = new ErrorMessageCode("HRR2");
+  private static final ErrorMessageCode ERROR_CODE_HRR3 = new ErrorMessageCode("HRR3");
+  private static final ErrorMessageCode ERROR_CODE_HRR4 = new ErrorMessageCode("HRR4");
+  private static final ErrorMessageCode ERROR_CODE_HRR5 = new ErrorMessageCode("HRR5");
+  private static final ErrorMessageCode ERROR_CODE_HRR6 = new ErrorMessageCode("HRR6");
+  private static final ErrorMessageCode ERROR_CODE_HRR7 = new ErrorMessageCode("HRR7");
+  private static final ErrorMessageCode ERROR_CODE_HRR8 = new ErrorMessageCode("HRR8");
 
   @Override
   public void validate(String fileName, Map.Entry<String, Resource> resourceEntry,
@@ -39,28 +65,39 @@
                                                 Map.Entry<String, Resource> resourceEntry,
                                                 GlobalValidationContext globalContext) {
 
-    mdcDataDebugMessage.debugEntryMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", fileName);
 
+    globalContext.setMessageCode(ERROR_CODE_HRR6);
+    HeatTreeManagerUtil
+            .checkResourceTypeValid(fileName, resourceEntry.getKey(), resourceEntry.getValue(),
+                    globalContext);
+    globalContext.setMessageCode(ERROR_CODE_HRR7);
+    HeatTreeManagerUtil
+            .checkResourceGroupTypeValid(fileName, resourceEntry.getKey(), resourceEntry.getValue(),
+                    globalContext);
+    globalContext.setMessageCode(ERROR_CODE_HRR8);
+    HeatTreeManagerUtil.checkIfResourceGroupTypeIsNested(fileName, resourceEntry.getKey(),
+            resourceEntry.getValue(), globalContext);
     Resource resourceDef = HeatTreeManagerUtil
-        .getResourceDef(fileName, resourceEntry.getKey(), resourceEntry.getValue(), globalContext);
-    if (resourceDef != null) {
-      if (Objects.nonNull(resourceDef.getType())
-          && HeatValidationService.isNestedResource(resourceDef.getType())) {
+            .getResourceDef( resourceEntry.getValue());
+
+      if (resourceDef != null  && Objects.nonNull(resourceDef.getType())
+              && HeatValidationService.isNestedResource(resourceDef.getType())) {
         Optional<String> indexVarValue =
-            getResourceGroupIndexVarValue(resourceEntry, fileName, globalContext);
+                getResourceGroupIndexVarValue(resourceEntry, fileName, globalContext);
         handleNestedResourceType(fileName, resourceEntry.getKey(), resourceDef, indexVarValue,
-            globalContext);
-      }
+                globalContext);
+
     }
 
-    mdcDataDebugMessage.debugExitMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", fileName);
   }
 
   private static Optional<String> getResourceGroupIndexVarValue(
-      Map.Entry<String, Resource> resourceEntry, String fileName,
-      GlobalValidationContext globalContext) {
+          Map.Entry<String, Resource> resourceEntry, String fileName,
+          GlobalValidationContext globalContext) {
     Object indexVar =
-        resourceEntry.getValue().getProperties().get(HeatConstants.INDEX_PROPERTY_NAME);
+            resourceEntry.getValue().getProperties().get(HeatConstants.INDEX_PROPERTY_NAME);
     if (indexVar == null) {
       return Optional.of(HeatConstants.RESOURCE_GROUP_INDEX_VAR_DEFAULT_VALUE);
     }
@@ -69,9 +106,11 @@
       return Optional.of((String) indexVar);
     } else {
       globalContext.addMessage(fileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
-              .getErrorWithParameters(Messages.RESOURCE_GROUP_INVALID_INDEX_VAR.getErrorMessage(),
-                  resourceEntry.getKey()), LoggerTragetServiceName.VALIDATE_RESOURCE_GROUP_TYPE,
-          LoggerErrorDescription.INVALID_INDEX_VAR);
+                      .getErrorWithParameters(
+                              ERROR_CODE_HRR1, Messages.RESOURCE_GROUP_INVALID_INDEX_VAR.getErrorMessage(),
+                              resourceEntry.getKey()),
+              LoggerTragetServiceName.VALIDATE_RESOURCE_GROUP_TYPE,
+              LoggerErrorDescription.INVALID_INDEX_VAR);
       return Optional.empty();
     }
   }
@@ -80,13 +119,13 @@
                                                Resource resource, Optional<String> indexVarValue,
                                                GlobalValidationContext globalContext) {
 
-    mdcDataDebugMessage.debugEntryMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", fileName);
 
     validateAllPropertiesMatchNestedParameters(fileName, resourceName, resource, indexVarValue,
-        globalContext);
+            globalContext);
     validateLoopsOfNestingFromFile(fileName, resource.getType(), globalContext);
 
-    mdcDataDebugMessage.debugExitMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", fileName);
   }
 
   private static void validateAllPropertiesMatchNestedParameters(String fileName,
@@ -94,43 +133,52 @@
                                                                  Resource resource,
                                                                  Optional<String> indexVarValue,
                                                                  GlobalValidationContext
-                                                                     globalContext) {
+                                                                         globalContext) {
 
-    mdcDataDebugMessage.debugEntryMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", fileName);
 
     String resourceType = resource.getType();
     if (globalContext.getFileContextMap().containsKey(resourceType)) {
       Set<String> propertiesNames =
-          resource.getProperties() == null ? null : resource.getProperties().keySet();
+              resource.getProperties() == null ? null : resource.getProperties().keySet();
       if (CollectionUtils.isNotEmpty(propertiesNames)) {
+        globalContext.setMessageCode(ERROR_CODE_HRR4);
         HeatValidationService
-            .checkNestedParameters(fileName, resourceType, resourceName, resource, propertiesNames,
-                indexVarValue, globalContext);
+                .checkNestedParametersNoMissingParameterInNested(fileName, resourceType, resourceName,
+                         propertiesNames,
+                         globalContext);
+        globalContext.setMessageCode(ERROR_CODE_HRR5);
+        HeatValidationService
+                .checkNestedInputValuesAlignWithType(fileName, resourceType, resourceName, resource,
+                        indexVarValue, globalContext);
       }
     } else {
       globalContext.addMessage(resourceType, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
-              .getErrorWithParameters(Messages.MISSING_NESTED_FILE.getErrorMessage(), resourceType),
-          LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
-          LoggerErrorDescription.MISSING_FILE);
+                      .getErrorWithParameters(
+                              ERROR_CODE_HRR2, Messages.MISSING_NESTED_FILE.getErrorMessage(),
+                              resourceType),
+              LoggerTragetServiceName.VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS,
+              LoggerErrorDescription.MISSING_FILE);
     }
 
-    mdcDataDebugMessage.debugExitMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", fileName);
   }
 
   private static void validateLoopsOfNestingFromFile(String fileName, String resourceType,
                                                      GlobalValidationContext globalContext) {
 
-    mdcDataDebugMessage.debugEntryMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugEntryMessage("file", fileName);
 
     List<String> filesInLoop = new ArrayList<>(Collections.singletonList(fileName));
     if (HeatValidationService
-        .isNestedLoopExistInFile(fileName, resourceType, filesInLoop, globalContext)) {
+            .isNestedLoopExistInFile(fileName, resourceType, filesInLoop, globalContext)) {
       globalContext.addMessage(fileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
-              .getErrorWithParameters(Messages.NESTED_LOOP.getErrorMessage(),
-                  HeatValidationService.drawFilesLoop(filesInLoop)),
-          LoggerTragetServiceName.VALIDATE_NESTING_LOOPS, LoggerErrorDescription.NESTED_LOOP);
+                      .getErrorWithParameters(
+                              ERROR_CODE_HRR3, Messages.NESTED_LOOP.getErrorMessage(),
+                              HeatValidationService.drawFilesLoop(filesInLoop)),
+              LoggerTragetServiceName.VALIDATE_NESTING_LOOPS, LoggerErrorDescription.NESTED_LOOP);
     }
 
-    mdcDataDebugMessage.debugExitMessage("file", fileName);
+    MDC_DATA_DEBUG_MESSAGE.debugExitMessage("file", fileName);
   }
 }
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/NestedResourceValidatorTest.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/NestedResourceValidatorTest.java
index 96aa631..14a23d6 100644
--- a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/NestedResourceValidatorTest.java
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/NestedResourceValidatorTest.java
@@ -1,70 +1,124 @@
+/*
+ * Copyright © 2016-2017 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.openecomp.sdc.validation.impl.validators.heatresource;
 
+import org.openecomp.core.validation.types.GlobalValidationContext;
 import org.openecomp.core.validation.types.MessageContainer;
+import org.openecomp.sdc.heat.datatypes.model.Resource;
 import org.openecomp.sdc.validation.impl.validators.HeatResourceValidator;
 import org.openecomp.sdc.validation.util.ValidationTestUtil;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import java.io.IOException;
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * Created by TALIO on 2/28/2017.
  */
 public class NestedResourceValidatorTest {
 
-  HeatResourceValidator baseValidator = new HeatResourceValidator();
-  NestedResourceValidator resourceValidator = new NestedResourceValidator();
+  private final HeatResourceValidator baseValidator = new HeatResourceValidator();
+  private final NestedResourceValidator resourceValidator = new NestedResourceValidator();
+  private static final String  PATH = "/org/openecomp/validation/validators/heat_validator/";
 
   @Test
-  public void testNoLoopsNesting() throws IOException {
+  public void testNoLoopsNesting() {
+
     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(baseValidator,
-        resourceValidator, null,
-        "/org/openecomp/validation/validators/heat_validator/no_loops_nesting/negative_test/input");
+            resourceValidator, null,
+            PATH + "no_loops_nesting/negative_test/input");
 
     Assert.assertNotNull(messages);
     Assert.assertEquals(messages.size(), 4);
 
     Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 1);
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
-        "ERROR: Nested files loop - [hot-nimbus-psm_v1.0.yaml -- nested-psm_v1.0.yaml -- nested-points-to-hot-nimbus-psm.yaml -- hot-nimbus-psm_v1.0.yaml]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
+            "ERROR: [HNR2]: Nested files loop - [hot-nimbus-psm_v1.0.yaml -- nested-psm_v1.0.yaml -- nested-points-to-hot-nimbus-psm.yaml -- hot-nimbus-psm_v1.0.yaml]");
 
     Assert.assertEquals(
-        messages.get("nested-points-to-hot-nimbus-psm.yaml").getErrorMessageList().size(), 2);
+            messages.get("nested-points-to-hot-nimbus-psm.yaml").getErrorMessageList().size(), 2);
     Assert.assertEquals(
-        messages.get("nested-points-to-hot-nimbus-psm.yaml").getErrorMessageList().get(0)
-            .getMessage(),
-        "ERROR: Nested files loop - [nested-points-to-hot-nimbus-psm.yaml -- hot-nimbus-psm_v1.0.yaml -- nested-psm_v1.0.yaml -- nested-points-to-hot-nimbus-psm.yaml]");
+            messages.get("nested-points-to-hot-nimbus-psm.yaml").getErrorMessageList().get(0)
+                    .getMessage(),
+            "ERROR: [HNR2]: Nested files loop - [nested-points-to-hot-nimbus-psm.yaml -- hot-nimbus-psm_v1.0.yaml -- nested-psm_v1.0.yaml -- nested-points-to-hot-nimbus-psm.yaml]");
     Assert.assertEquals(
-        messages.get("nested-points-to-hot-nimbus-psm.yaml").getErrorMessageList().get(1)
-            .getMessage(),
-        "ERROR: Nested files loop - [nested-points-to-hot-nimbus-psm.yaml -- nested-psm_v1.0.yaml -- nested-points-to-hot-nimbus-psm.yaml]");
+            messages.get("nested-points-to-hot-nimbus-psm.yaml").getErrorMessageList().get(1)
+                    .getMessage(),
+            "ERROR: [HNR2]: Nested files loop - [nested-points-to-hot-nimbus-psm.yaml -- nested-psm_v1.0.yaml -- nested-points-to-hot-nimbus-psm.yaml]");
 
     Assert.assertEquals(messages.get("yaml-point-to-itself.yaml").getErrorMessageList().size(), 1);
     Assert.assertEquals(
-        messages.get("yaml-point-to-itself.yaml").getErrorMessageList().get(0).getMessage(),
-        "ERROR: Nested files loop - [yaml-point-to-itself.yaml -- yaml-point-to-itself.yaml]");
+            messages.get("yaml-point-to-itself.yaml").getErrorMessageList().get(0).getMessage(),
+            "ERROR: [HNR2]: Nested files loop - [yaml-point-to-itself.yaml -- yaml-point-to-itself.yaml]");
 
     Assert.assertEquals(messages.get("nested-psm_v1.0.yaml").getErrorMessageList().size(), 1);
     Assert.assertEquals(
-        messages.get("nested-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
-        "ERROR: Nested files loop - [nested-psm_v1.0.yaml -- nested-points-to-hot-nimbus-psm.yaml -- hot-nimbus-psm_v1.0.yaml -- nested-psm_v1.0.yaml]");
+            messages.get("nested-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
+            "ERROR: [HNR2]: Nested files loop - [nested-psm_v1.0.yaml -- nested-points-to-hot-nimbus-psm.yaml -- hot-nimbus-psm_v1.0.yaml -- nested-psm_v1.0.yaml]");
   }
 
   @Test
-  public void testPropertiesMatchNestedParameters() throws IOException {
+  public void testPropertiesMatchNestedParameters() {
     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(baseValidator,
-        resourceValidator, null,
-        "/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/negative_test/input");
+            resourceValidator, null,
+            PATH + "properties_match_nested_parameters/negative_test/input");
 
     Assert.assertNotNull(messages);
     Assert.assertEquals(messages.size(), 1);
 
     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 1);
     Assert.assertEquals(
-        messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
-        "ERROR: Referenced parameter not found in nested file - nested-pps_v1.0.yaml, parameter name [server_pcrf_pps_001], Resource ID [parameter_not_existing_in_nested]");
+            messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
+            "ERROR: [HNR3]: Referenced parameter not found in nested file - nested-pps_v1.0.yaml, parameter name [server_pcrf_pps_001], Resource ID [parameter_not_existing_in_nested]");
+  }
+
+  @Test
+  public void testWrongValueTypeAssigned() {
+    Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(baseValidator,
+            resourceValidator, null,
+            PATH + "properties_match_nested_parameters/wrong_value_type_assigned/input");
+
+    Assert.assertNotNull(messages);
+    Assert.assertEquals(messages.size(), 1);
+
+    Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 1);
+    Assert.assertEquals(
+            messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
+            "WARNING: [HNR4]: Wrong value type assigned to a nested input parameter, nested resource [server_pcrf_pps_001], property name [index_integer], nested file [nested-pps_v1.0.yaml]");
+  }
+
+  @Test
+  public void testMissingNestedFile() {
+    final Resource resource = new Resource();
+    resource.setType("nested-pps_v1.0.yaml");
+
+    final GlobalValidationContext globalValidationContext = ValidationTestUtil.createGlobalContextFromPath(PATH + "missing_nested_file/input");
+
+    NestedResourceValidator.validateAllPropertiesMatchNestedParameters(null, null, resource, Optional.empty(), globalValidationContext);
+
+    Map<String, MessageContainer> messages = globalValidationContext.getContextMessageContainers();
+    Assert.assertNotNull(messages);
+    Assert.assertEquals(messages.size(), 1);
+
+    Assert.assertEquals(messages.get("nested-pps_v1.0.yaml").getErrorMessageList().size(), 1);
+    Assert.assertEquals(
+            messages.get("nested-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
+            "ERROR: [HNR1]: Missing nested file - nested-pps_v1.0.yaml");
   }
 }
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/ResourceGroupResourceValidatorTest.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/ResourceGroupResourceValidatorTest.java
index 4b255ae..4948c53 100644
--- a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/ResourceGroupResourceValidatorTest.java
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/ResourceGroupResourceValidatorTest.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright © 2016-2017 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.openecomp.sdc.validation.impl.validators.heatresource;
 
 import org.openecomp.core.validation.types.MessageContainer;
@@ -7,7 +23,6 @@
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import java.io.IOException;
 import java.util.Map;
 
 /**
@@ -15,92 +30,111 @@
  */
 public class ResourceGroupResourceValidatorTest {
 
-  HeatResourceValidator baseValidator = new HeatResourceValidator();
-  ResourceGroupResourceValidator resourceValidator = new ResourceGroupResourceValidator();
+  private final HeatResourceValidator baseValidator = new HeatResourceValidator();
+  private final ResourceGroupResourceValidator resourceValidator = new ResourceGroupResourceValidator();
 
+  private static final String PATH = "/org/openecomp/validation/validators/heat_validator/";
   @Test
   public void testResourceGroupWithInvalidIndexVar() {
     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(baseValidator,
-        resourceValidator, HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource(),
-        "/org/openecomp/validation/validators/heat_validator/resource_group_invalid_indexvar/negative_test/input");
+            resourceValidator, HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource(),
+            PATH + "resource_group_invalid_indexvar/negative_test/input");
 
     Assert.assertNotNull(messages);
     Assert.assertEquals(messages.size(), 1);
 
-    Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 8);
+    Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 14);
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
-        "ERROR: Wrong value assigned to a ResourceGroup index_var property (functions are not allowed but only strings), Resource ID [resource_with_resources_group_1]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
+            "WARNING: [HRR8]: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group_1], resource_def type [yamlFile.yaml]");
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
-        "WARNING: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_2], property name [index_boolean], nested file [yamlFile.yaml]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
+            "ERROR: [HRR1]: Wrong value assigned to a ResourceGroup index_var property (functions are not allowed but only strings), Resource ID [resource_with_resources_group_1]");
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(2).getMessage(),
-        "WARNING: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_3], property name [index_boolean], nested file [yamlFile.yaml]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(2).getMessage(),
+            "WARNING: [HRR8]: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group_2], resource_def type [yamlFile.yaml]");
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(3).getMessage(),
-        "WARNING: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_3], property name [index_number], nested file [yamlFile.yaml]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(3).getMessage(),
+            "WARNING: [HRR5]: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_2], property name [index_boolean], nested file [yamlFile.yaml]");
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(4).getMessage(),
-        "WARNING: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_4], property name [index_boolean], nested file [yamlFile.yaml]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(4).getMessage(),
+            "WARNING: [HRR8]: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group_3], resource_def type [yamlFile.yaml]");
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(5).getMessage(),
-        "WARNING: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_5], property name [index_boolean], nested file [yamlFile.yaml]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(5).getMessage(),
+            "WARNING: [HRR5]: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_3], property name [index_boolean], nested file [yamlFile.yaml]");
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(6).getMessage(),
-        "WARNING: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_5], property name [index_number], nested file [yamlFile.yaml]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(6).getMessage(),
+            "WARNING: [HRR5]: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_3], property name [index_number], nested file [yamlFile.yaml]");
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(7).getMessage(),
-        "ERROR: Wrong value assigned to a ResourceGroup index_var property (functions are not allowed but only strings), Resource ID [resource_with_resources_group_6]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(7).getMessage(),
+            "WARNING: [HRR8]: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group_4], resource_def type [yamlFile.yaml]");
+    Assert.assertEquals(
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(8).getMessage(),
+            "WARNING: [HRR5]: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_4], property name [index_boolean], nested file [yamlFile.yaml]");
+    Assert.assertEquals(
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(9).getMessage(),
+            "WARNING: [HRR8]: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group_5], resource_def type [yamlFile.yaml]");
+    Assert.assertEquals(
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(10).getMessage(),
+            "WARNING: [HRR5]: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_5], property name [index_boolean], nested file [yamlFile.yaml]");
+    Assert.assertEquals(
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(11).getMessage(),
+            "WARNING: [HRR5]: Wrong value type assigned to a nested input parameter, nested resource [resource_with_resources_group_5], property name [index_number], nested file [yamlFile.yaml]");
+    Assert.assertEquals(
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(12).getMessage(),
+            "WARNING: [HRR8]: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group_6], resource_def type [yamlFile.yaml]");
+    Assert.assertEquals(
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(13).getMessage(),
+            "ERROR: [HRR1]: Wrong value assigned to a ResourceGroup index_var property (functions are not allowed but only strings), Resource ID [resource_with_resources_group_6]");
   }
 
   @Test
   public void testResourceGroupWithInvalidType() {
     Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(baseValidator,
-        resourceValidator, HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource(),
-        "/org/openecomp/validation/validators/heat_validator/resource_group_invalid_type/negative_test/input");
+            resourceValidator, HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource(),
+            PATH + "resource_group_invalid_type/negative_test/input");
 
     Assert.assertNotNull(messages);
     Assert.assertEquals(messages.size(), 1);
 
     Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 3);
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
-        "WARNING: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group_1], resource_def type [{get_param=pcrf_vnf_id}]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
+            "WARNING: [HRR7]: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group_1], resource_def type [{get_param=pcrf_vnf_id}]");
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
-        "WARNING: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group_2], resource_def type [OS::Nova::Server]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
+            "WARNING: [HRR6]: A resource has an invalid or unsupported type - null, Resource ID [resource_with_resources_group_3]");
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(2).getMessage(),
-        "WARNING: A resource has an invalid or unsupported type - null, Resource ID [resource_with_resources_group_3]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(2).getMessage(),
+            "WARNING: [HRR8]: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group_4], resource_def type [yamlFile.yaml]");
   }
 
   @Test
-  public void testResourcesGroupWithNested() throws IOException {
+  public void testResourcesGroupWithNested() {
     Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(baseValidator,
-        resourceValidator, HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource(),
-        "/org/openecomp/validation/validators/heat_validator/resources_group_with_nested/negative_test/input");
+            resourceValidator, HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource(),
+            PATH + "resources_group_with_nested/negative_test/input");
 
     Assert.assertNotNull(messages);
-    Assert.assertEquals(messages.size(), 3);
+    Assert.assertEquals(messages.size(), 4);
 
     Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 2);
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
-        "ERROR: Referenced parameter not found in nested file - nested-from-resources-group.yaml, parameter name [resource_with_resources_group], Resource ID [property_not_in_nested]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
+            "WARNING: [HRR8]: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_with_resources_group], resource_def type [nested-from-resources-group.yaml]");
     Assert.assertEquals(
-        messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
-        "WARNING: OS::Heat::ResourceGroup resource with resource_def which is not pointing to nested heat file is not supported, Resource ID [resource_without_resources_group], resource_def type [OS::Nova::Server]");
+            messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
+            "ERROR: [HRR4]: Referenced parameter not found in nested file - nested-from-resources-group.yaml, parameter name [resource_with_resources_group], Resource ID [property_not_in_nested]");
 
-    Assert.assertEquals(messages.get("nested-pps_v1.0.yaml").getErrorMessageList().size(), 1);
+    Assert.assertEquals(messages.get("nested-pps_v1.0.yaml").getErrorMessageList().size(), 2);
     Assert.assertEquals(
-        messages.get("nested-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
-        "ERROR: Nested files loop - [nested-pps_v1.0.yaml -- nested-from-resources-group.yaml -- hot-nimbus-pps_v1.0.yaml -- nested-pps_v1.0.yaml]");
+            messages.get("nested-pps_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
+            "ERROR: [HRR3]: Nested files loop - [nested-pps_v1.0.yaml -- nested-from-resources-group.yaml -- hot-nimbus-pps_v1.0.yaml -- nested-pps_v1.0.yaml]");
 
     Assert.assertEquals(messages.get("nested-not-exist.yaml").getErrorMessageList().size(), 1);
     Assert.assertEquals(
-        messages.get("nested-not-exist.yaml").getErrorMessageList().get(0).getMessage(),
-        "ERROR: Missing nested file - nested-not-exist.yaml");
+            messages.get("nested-not-exist.yaml").getErrorMessageList().get(0).getMessage(),
+            "ERROR: [HRR2]: Missing nested file - nested-not-exist.yaml");
   }
 
 }
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/missing_nested_file/input/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/missing_nested_file/input/MANIFEST.json
new file mode 100644
index 0000000..dd26e5a
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/missing_nested_file/input/MANIFEST.json
@@ -0,0 +1,17 @@
+{
+  "name": "hot-mog",
+  "description": "HOT template to create hot mog server",
+  "version": "2013-05-23",
+  "data": [
+    {
+      "file": "hot-nimbus-psm_v1.0.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "hot-nimbus-psm_v1.0.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/missing_nested_file/input/hot-nimbus-psm_v1.0.env b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/missing_nested_file/input/hot-nimbus-psm_v1.0.env
new file mode 100644
index 0000000..f24e476
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/missing_nested_file/input/hot-nimbus-psm_v1.0.env
@@ -0,0 +1,10 @@
+parameters:
+  pcrf_psm_server_names: ZRDM1PCRF01PSM001,ZRDM1PCRF01PSM002,ZRDM1PCRF01PSM003,ZRDM1PCRF01PSM004,ZRDM1PCRF01PSM005,ZRDM1PCRF01PSM006,ZRDM1PCRF01PSM007,ZRDM1PCRF01PSM008,ZRDM1PCRF01PSM009,ZRDM1PCRF01PSM010,ZRDM1PCRF01PSM011,ZRDM1PCRF01PSM012
+  pcrf_psm_image_name: PCRF_8.995-ATTM1.0.3.qcow2
+  pcrf_psm_flavor_name: lc.4xlarge4
+  availabilityzone_name: nova
+  pcrf_cps_net_name: Mobisupport-25193-I-INT1_int_pcrf_net_0
+  pcrf_cps_net_ips: 172.26.16.63,172.26.16.64,172.26.16.65,172.26.16.66,172.26.16.67,172.26.16.68,172.26.16.69,172.26.16.70,172.26.16.71,172.26.16.72,172.26.16.73,172.26.16.74
+  pcrf_cps_net_mask: 255.255.255.0
+  pcrf_security_group_name: nimbus_security_group
+  pcrf_vnf_id: 730797234b4a40aa99335157b02871cd
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/missing_nested_file/input/hot-nimbus-psm_v1.0.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/missing_nested_file/input/hot-nimbus-psm_v1.0.yaml
new file mode 100644
index 0000000..e5298fe
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/missing_nested_file/input/hot-nimbus-psm_v1.0.yaml
@@ -0,0 +1,62 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Session Manager stack
+
+parameters:
+  pcrf_psm_server_names:
+    type: comma_delimited_list
+    label: PCRF SM server names
+    description: name of the PCRF SM instance
+  pcrf_psm_image_name:
+    type: string
+    label: PCRF SM image name
+    description: PCRF SM image name
+  pcrf_psm_flavor_name:
+    type: string
+    label: PCRF SM flavor name
+    description: flavor name of PCRF SM instance 
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ips:
+    type: comma_delimited_list
+    label: CPS network ips
+    description: CPS network ips
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+  vnf_id:
+    type: string
+
+resources:
+  nova_server_1:
+    type: OS::Nova::Server
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 0] }
+      image: { get_param: pcrf_psm_image_name }
+      flavor: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      networks:
+        - port: { get_resource: oam1_int_port }
+          fixed_ip: 10.0.0.0
+          floating_ip: 10.0.0.1
+          network: 100_1000_0011
+          port_extra_properties: {admin_state_up: true , allowed_address_pairs: 10}
+          subnet: 10.0.0.2
+        - port: { get_resource: oam1_mgmt_port }
+      metadata:
+        vnf_id: { get_param: vnf_id }
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/MANIFEST.json
new file mode 100644
index 0000000..fe7d8bd
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/MANIFEST.json
@@ -0,0 +1,51 @@
+{
+  "name": "hot-mog",
+  "description": "HOT template to create hot mog server",
+  "version": "2013-05-23",
+  "data": [
+    {
+      "file": "hot-nimbus-pps_v1.0.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "hot-nimbus-pps_v1.0.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "file": "hot-nimbus-psm_v1.0.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "hot-nimbus-psm_v1.0.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "file": "nested-pps_v1.0.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "nested-psm_v1.0.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "mount_iso_script.sh",
+      "type": "SHELL"
+    },
+    {
+      "file": "cloud-nimbus.sh",
+      "type": "SHELL"
+    },
+    {
+      "file": "nimbus-ethernet",
+      "type": "OTHER"
+    },
+    {
+      "file": "nimbus-ethernet-gw",
+      "type": "OTHER"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-pps_v1.0.env b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-pps_v1.0.env
new file mode 100644
index 0000000..340be2b
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-pps_v1.0.env
@@ -0,0 +1,11 @@
+parameters:
+  pcrf_pps_server_names: ZRDM1PCRF01PPS001,ZRDM1PCRF01PPS002,ZRDM1PCRF01PPS003,ZRDM1PCRF01PPS004,ZRDM1PCRF01PPS005,ZRDM1PCRF01PPS006
+  pcrf_pps_image_name: PCRF_8.995-ATTM1.0.3.qcow2
+  pcrf_pps_flavor_name: lc.3xlarge
+  availabilityzone_name: nova
+  pcrf_cps_net_name: Mobisupport-25193-I-INT1_int_pcrf_net_0
+  pcrf_cps_net_ips: 172.26.16.7,172.26.16.8,172.26.16.9,172.26.16.10,172.26.16.11,172.26.16.12
+  pcrf_cps_net_mask: 255.255.255.0
+  pcrf_security_group_name: nimbus_security_group
+  pcrf_vnf_id: 730797234b4a40aa99335157b02871cd
+
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-pps_v1.0.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-pps_v1.0.yaml
new file mode 100644
index 0000000..2fe32fa
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-pps_v1.0.yaml
@@ -0,0 +1,58 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Policy Server stack
+
+parameters:
+  pcrf_pps_server_names:
+    type: comma_delimited_list
+    label: PCRF PS server names
+    description: PCRF PS server names
+  pcrf_pps_image_name:
+    type: string
+    label: PCRF PS image name
+    description: PCRF PS image name
+  pcrf_pps_flavor_name:
+    type: string
+    label: PCRF PS flavor name
+    description: flavor name of PCRF PS instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ips:
+    type: comma_delimited_list
+    label: CPS network ips
+    description: CPS network ips
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+  index_integer:
+    type: integer
+
+resources:
+  server_pcrf_pps_001:
+    type: nested-pps_v1.0.yaml
+    properties:
+      pcrf_pps_server_name: { get_param: [pcrf_pps_server_names, 0] }
+      pcrf_pps_image_name: { get_param: pcrf_pps_image_name }
+      pcrf_pps_flavor_name: { get_param: pcrf_pps_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 0] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+      index_integer: "TEST_ME"
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-psm_v1.0.env b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-psm_v1.0.env
new file mode 100644
index 0000000..f24e476
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-psm_v1.0.env
@@ -0,0 +1,10 @@
+parameters:
+  pcrf_psm_server_names: ZRDM1PCRF01PSM001,ZRDM1PCRF01PSM002,ZRDM1PCRF01PSM003,ZRDM1PCRF01PSM004,ZRDM1PCRF01PSM005,ZRDM1PCRF01PSM006,ZRDM1PCRF01PSM007,ZRDM1PCRF01PSM008,ZRDM1PCRF01PSM009,ZRDM1PCRF01PSM010,ZRDM1PCRF01PSM011,ZRDM1PCRF01PSM012
+  pcrf_psm_image_name: PCRF_8.995-ATTM1.0.3.qcow2
+  pcrf_psm_flavor_name: lc.4xlarge4
+  availabilityzone_name: nova
+  pcrf_cps_net_name: Mobisupport-25193-I-INT1_int_pcrf_net_0
+  pcrf_cps_net_ips: 172.26.16.63,172.26.16.64,172.26.16.65,172.26.16.66,172.26.16.67,172.26.16.68,172.26.16.69,172.26.16.70,172.26.16.71,172.26.16.72,172.26.16.73,172.26.16.74
+  pcrf_cps_net_mask: 255.255.255.0
+  pcrf_security_group_name: nimbus_security_group
+  pcrf_vnf_id: 730797234b4a40aa99335157b02871cd
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-psm_v1.0.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-psm_v1.0.yaml
new file mode 100644
index 0000000..c2d7b05
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/hot-nimbus-psm_v1.0.yaml
@@ -0,0 +1,199 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Session Manager stack
+
+parameters:
+  pcrf_psm_server_names:
+    type: comma_delimited_list
+    label: PCRF SM server names
+    description: name of the PCRF SM instance
+  pcrf_psm_image_name:
+    type: string
+    label: PCRF SM image name
+    description: PCRF SM image name
+  pcrf_psm_flavor_name:
+    type: string
+    label: PCRF SM flavor name
+    description: flavor name of PCRF SM instance 
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ips:
+    type: comma_delimited_list
+    label: CPS network ips
+    description: CPS network ips
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  server_pcrf_psm_001:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 0] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 0] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_002:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 1] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 1] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_003:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 2] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 2] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_004:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 3] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 3] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_005:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 4] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 4] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_006:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 5] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 5] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_007:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 6] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 6] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_008:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 7] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 7] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_009:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 8] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 8] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_010:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 9] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 9] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_011:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 10] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 10] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_psm_012:
+    type: nested-psm_v1.0.yaml
+    properties:
+      pcrf_psm_server_name: { get_param: [pcrf_psm_server_names, 11] }
+      pcrf_psm_image_name: { get_param: pcrf_psm_image_name }
+      pcrf_psm_flavor_name: { get_param: pcrf_psm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 11] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+ 
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/nested-pps_v1.0.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/nested-pps_v1.0.yaml
new file mode 100644
index 0000000..6b7d846
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/nested-pps_v1.0.yaml
@@ -0,0 +1,101 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Policy Server stack
+
+parameters:
+  pcrf_pps_server_name:
+    type: string
+    label: PCRF PS server name
+    description: PCRF PS server name
+  pcrf_pps_image_name:
+    type: string
+    label: PCRF PS image name
+    description: PCRF PS image name
+  pcrf_pps_flavor_name:
+    type: string
+    label: PCRF PS flavor name
+    description: flavor name of PCRF PS instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ip:
+    type: string
+    label: CPS network ip
+    description: CPS network ip
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+  index_integer:
+    type: integer
+
+resources:
+  script_init:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ungrouped
+      config:
+        str_replace:
+          template: { get_file: cloud-nimbus.sh }
+          params:
+            $vm_name: { get_param: pcrf_pps_server_name }
+  network:
+    type: OS::Heat::CloudConfig
+    properties:
+      cloud_config:
+        write_files:
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth0
+                  $ip: { get_param: pcrf_cps_net_ip }
+                  $netmask: { get_param: pcrf_cps_net_mask }
+        runcmd:
+          - ifdown eth0 && ifup eth0
+
+  pcrf_server_init:
+    type: OS::Heat::MultipartMime
+    properties:
+      parts:
+      - config: { get_resource: network}
+      - config: { get_resource: script_init}
+
+  pcrf_server_pps:
+    type: OS::Nova::Server
+    properties:
+      config_drive: "True"
+      name: { get_param: pcrf_pps_server_name }
+      image: { get_param: pcrf_pps_image_name }
+      flavor: { get_param: pcrf_pps_flavor_name }
+      availability_zone: { get_param: availabilityzone_name }
+      networks:
+        - port: { get_resource: pcrf_pps_port_0}
+      user_data_format: RAW
+      user_data:
+        get_resource: pcrf_server_init
+      metadata:
+        vnf_id: {get_param: pcrf_vnf_id}
+
+  pcrf_pps_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_cps_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_cps_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/nested-psm_v1.0.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/nested-psm_v1.0.yaml
new file mode 100644
index 0000000..c86aa34
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/properties_match_nested_parameters/wrong_value_type_assigned/input/nested-psm_v1.0.yaml
@@ -0,0 +1,99 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Session Manager stack
+
+parameters:
+  pcrf_psm_server_name:
+    type: string
+    label: PCRF SM server name
+    description: PCRF SM server name
+  pcrf_psm_image_name:
+    type: string
+    label: image name
+    description: PCRF SM image name
+  pcrf_psm_flavor_name:
+    type: string
+    label: PCRF SM flavor name
+    description: flavor name of PCRF SM instance 
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ip:
+    type: string
+    label: CPS network ip
+    description: CPS network ip
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  network:
+    type: OS::Heat::CloudConfig
+    properties:
+      cloud_config:
+        write_files:
+          - path: /etc/sysconfig/network-scripts/ifcfg-eth0
+            permissions: "0644"
+            content:
+              str_replace:
+                template: { get_file: nimbus-ethernet }
+                params:
+                  $dev: eth0
+                  $ip: { get_param: pcrf_cps_net_ip }
+                  $netmask: { get_param: pcrf_cps_net_mask }
+        runcmd:
+          - ifdown eth0 && ifup eth0
+  script_init:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ungrouped
+      config:
+        str_replace:
+          template: { get_file: cloud-nimbus.sh }
+          params:
+            $vm_name: { get_param: pcrf_psm_server_name }
+  pcrf_server_init:
+    type: OS::Heat::MultipartMime
+    properties:
+      parts:
+      - config: { get_resource: network}
+      - config: { get_resource: script_init}
+
+  pcrf_server_psm:
+    type: OS::Nova::Server
+    properties:
+      config_drive: "True"
+      name: { get_param: pcrf_psm_server_name }
+      image: { get_param: pcrf_psm_image_name }
+      flavor: { get_param: pcrf_psm_flavor_name }
+      availability_zone: { get_param: availabilityzone_name }
+      networks:
+        - port: { get_resource: psm01_port_0}
+      user_data_format: RAW
+      user_data:
+        get_resource: pcrf_server_init
+      metadata:
+        vnf_id: {get_param: pcrf_vnf_id}
+      #scheduler_hints: {group: { get_resource: servergroup_nimbus }}
+  
+  psm01_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: pcrf_cps_net_name }
+      fixed_ips:
+        - ip_address: { get_param: pcrf_cps_net_ip }
+      security_groups: [{ get_param: pcrf_security_group_name }]
\ No newline at end of file