SDC template distribution for voLTE 99/28499/2
authorc00149107 <chenchuanyu@huawei.com>
Thu, 18 Jan 2018 09:28:49 +0000 (17:28 +0800)
committerc00149107 <chenchuanyu@huawei.com>
Thu, 18 Jan 2018 09:52:15 +0000 (17:52 +0800)
SDC template distribution for voLTE template

Change-Id: I71dcc291292e9eb1acdcd1b4d3da6c4cec7bdd66
Issue-ID: SO-381
Signed-off-by: c00149107 <chenchuanyu@huawei.com>
asdc-controller/src/main/java/org/openecomp/mso/asdc/installer/heat/ToscaResourceInstaller.java

index b6dddac..390bf40 100644 (file)
@@ -197,303 +197,330 @@ public class ToscaResourceInstaller {// implements IVfResourceInstaller {
             List<NodeTemplate> vfNodeTemplatesList = toscaResourceStruct.getSdcCsarHelper().getServiceVfList();\r
             int outerLoop = 0;\r
             logger.debug("**vfMondeTEmplatesList.size()=" + vfNodeTemplatesList.size());\r
-            for (NodeTemplate nodeTemplate :  vfNodeTemplatesList) {\r
-               logger.debug("nodeTemplate outerLoop=" + outerLoop++);\r
-               // extract VF metadata\r
-               \r
-                                       Metadata metadata = nodeTemplate.getMetaData();\r
+            for(NodeTemplate nodeTemplate : vfNodeTemplatesList) {\r
+                logger.debug("nodeTemplate outerLoop=" + outerLoop++);\r
+                // extract VF metadata\r
 \r
-                                       String vfCustomizationUUID = toscaResourceStruct.getSdcCsarHelper().getMetadataPropertyValue(metadata, SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);\r
-                                       logger.debug("vfCustomizationUUID=" + vfCustomizationUUID);\r
+                Metadata metadata = nodeTemplate.getMetaData();\r
 \r
-                       \r
-                       /* HEAT TABLE POPULATION\r
-                        * *******************************************************************************************************\r
-                        */\r
-                       \r
-                               int nextLoop = 0;\r
-                       for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()) {\r
-                               logger.debug("vfResourceStructure.getVfMOduleStructure() loop, nextLoop = " + nextLoop++);\r
-                               logger.debug("vfModuleStructure:" + vfModuleStructure.toString());\r
-                               \r
-                               // Here we set the right db structure according to the Catalog\r
-                               // DB\r
+                String vfCustomizationUUID = toscaResourceStruct.getSdcCsarHelper().getMetadataPropertyValue(metadata,\r
+                        SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);\r
+                logger.debug("vfCustomizationUUID=" + vfCustomizationUUID);\r
 \r
-                               // We expect only one MAIN HEAT per VFMODULE\r
-                               // we can also obtain from it the Env ArtifactInfo, that's why\r
-                               // we\r
-                               // get the Main IArtifactInfo\r
+                // extract VF metadata\r
+                createVnfResource(nodeTemplate, toscaResourceStruct);\r
 \r
-                               HeatTemplate heatMainTemplate = null;\r
-                               HeatEnvironment heatEnv;\r
-                               \r
-                               HeatTemplate heatVolumeTemplate = null;\r
-                               HeatEnvironment heatVolumeEnv;\r
-                               \r
-                               \r
-                               IVfModuleData vfMetadata = vfModuleStructure.getVfModuleMetadata();\r
-                                                       \r
-                               \r
-                               if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT)) {\r
-                                       \r
-                                       List<VfModuleArtifact> artifacts = vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT);\r
-                                       logger.debug("there are " + artifacts.size() + " artifacts");\r
-                                       IArtifactInfo mainEnvArtifactInfo = null;\r
-                                       for (VfModuleArtifact vfma : artifacts) {\r
-                                               logger.debug("vmfa=" + vfma.toString());\r
-                                               mainEnvArtifactInfo = \r
-                                                               vfma.getArtifactInfo().getGeneratedArtifact();\r
-                                               \r
-                                               // MAIN HEAT\r
-                                               heatMainTemplate = (HeatTemplate) vfma.getCatalogObject(); \r
-                                               \r
-                                               // Set HeatTemplateArtifactUUID to use later when setting the VfModule and NetworkResource\r
-                                               toscaResourceStruct.setHeatTemplateUUID(heatMainTemplate.getArtifactUuid());\r
+                // check for duplicate record already in the database\r
+                VnfResource vnfResource =\r
+                        catalogDB.getVnfResource(toscaResourceStruct.getCatalogVnfResource().getModelName(),\r
+                                BigDecimalVersion.castAndCheckNotificationVersionToString(\r
+                                        toscaResourceStruct.getCatalogVnfResource().getVersion()));\r
 \r
-                                               // Add this one for logging\r
-                                               artifactListForLogging.add(ASDCElementInfo\r
-                                                               .createElementFromVfArtifactInfo(vfma.getArtifactInfo()));\r
-                                               \r
-                                               catalogDB.saveHeatTemplate(heatMainTemplate, heatMainTemplate.getParameters());\r
-                                               // Indicate we have deployed it in the DB\r
-                                               vfma.incrementDeployedInDB();\r
-                                       }\r
-                                       \r
-                                       \r
-                                       // VOLUME HEAT\r
-                                       // We expect only one VOL HEAT per VFMODULE\r
-                                       // we can also obtain from it the Env ArtifactInfo, that's why\r
-                                       // we get the Volume IArtifactInfo\r
-                               \r
-                                       if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_VOL)) {\r
-                                               IArtifactInfo volEnvArtifactInfo = vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0)\r
-                                                               .getArtifactInfo().getGeneratedArtifact();\r
-               \r
-                                               heatVolumeTemplate = (HeatTemplate) vfModuleStructure.getArtifactsMap()\r
-                                                               .get(ASDCConfiguration.HEAT_VOL).get(0).getCatalogObject();\r
-                                               \r
-                                               // Set VolHeatTemplate ArtifactUUID to use later when setting the VfModule \r
-                                               toscaResourceStruct.setVolHeatTemplateUUID(heatVolumeTemplate.getArtifactUuid());\r
-                                               \r
-                                               \r
-                                               // Add this one for logging\r
-                                               artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo()));\r
+                if(vnfResource != null) {\r
+                    toscaResourceStruct.setVnfAlreadyInstalled(true);\r
+                }\r
 \r
-                                               catalogDB.saveHeatTemplate(heatVolumeTemplate, heatVolumeTemplate.getParameters());\r
-                                               // Indicate we have deployed it in the DB\r
-                                               vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).incrementDeployedInDB();\r
-                                               \r
-                                               if (volEnvArtifactInfo != null) {\r
-                                                       heatVolumeEnv = (HeatEnvironment) vfResourceStructure.getArtifactsMapByUUID()\r
-                                                                       .get(volEnvArtifactInfo.getArtifactUUID()).getCatalogObject();\r
-                                                       \r
-                                                       // Set VolHeatTemplate ArtifactUUID to use later when setting the VfModule \r
-                                                       toscaResourceStruct.setVolHeatEnvTemplateUUID(heatVolumeEnv.getArtifactUuid());\r
-\r
-                                                       // Add this one for logging\r
-                                                       artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(volEnvArtifactInfo));\r
-                                                                                                               \r
-                                                       catalogDB.saveHeatEnvironment(heatVolumeEnv);\r
-                                                       // Indicate we have deployed it in the DB\r
-                                                       vfResourceStructure.getArtifactsMapByUUID().get(volEnvArtifactInfo.getArtifactUUID()).incrementDeployedInDB();\r
-                                               }\r
-                                               \r
-                                       }\r
-                                       \r
-                                       // NESTED HEAT\r
-                                       // Here we expect many HEAT_NESTED template to be there\r
-                                       // XXX FIX BY PCLO: Defect# -36643 -US666034 - check first if we really have nested heat templates\r
-                                       if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_NESTED)) {\r
-                                               for (VfModuleArtifact heatNestedArtifact : vfModuleStructure.getArtifactsMap()\r
-                                                               .get(ASDCConfiguration.HEAT_NESTED)) {\r
-       \r
-                                                       // Check if this nested is well referenced by the MAIN HEAT\r
-                                                       String parentArtifactType = ToscaResourceInstaller.identifyParentOfNestedTemplate(vfModuleStructure,heatNestedArtifact);\r
-                                                       HeatTemplate heatNestedTemplate = (HeatTemplate) heatNestedArtifact.getCatalogObject();\r
-                                                       \r
-                                                       if (parentArtifactType != null) {\r
-                                                                                                               \r
-                                                               switch (parentArtifactType) {\r
-                                                                       case ASDCConfiguration.HEAT:\r
-                                                                               \r
-                                                                               // Add this one for logging\r
-                                                                               artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));\r
-                                                               \r
-                                                                               catalogDB.saveNestedHeatTemplate (heatMainTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());\r
-                                                                               // Indicate we have deployed it in the DB\r
-                                                                               heatNestedArtifact.incrementDeployedInDB();\r
-                                                                               break;\r
-                                                                       case ASDCConfiguration.HEAT_VOL:\r
-                                                                               \r
-                                                                               // Add this one for logging\r
-                                                                               artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));\r
-                                                                               catalogDB.saveNestedHeatTemplate (heatVolumeTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());\r
-                                                                               // Indicate we have deployed it in the DB\r
-                                                                               heatNestedArtifact.incrementDeployedInDB();\r
-                                                                               break;\r
-                                                                               \r
-                                                                       default:\r
-                                                                               break;\r
+                if(!toscaResourceStruct.isVnfAlreadyInstalled()) {\r
 \r
-                                                               }\r
-                                                       } else { // Assume it belongs to HEAT MAIN\r
-                                                               // Add this one for logging\r
-                                                               artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));\r
-                                               \r
-                                                               catalogDB.saveNestedHeatTemplate (heatMainTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());\r
-                                                               // Indicate we have deployed it in the DB\r
-                                                               heatNestedArtifact.incrementDeployedInDB();\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                                       \r
-                                       if (mainEnvArtifactInfo != null) {\r
-                                               heatEnv = (HeatEnvironment) vfResourceStructure.getArtifactsMapByUUID()\r
-                                                               .get(mainEnvArtifactInfo.getArtifactUUID()).getCatalogObject();\r
-                                               \r
-                                               // Set HeatEnvironmentArtifactUUID to use later when setting the VfModule \r
-                                               toscaResourceStruct.setEnvHeatTemplateUUID(heatEnv.getArtifactUuid());\r
+                    catalogDB.saveOrUpdateVnfResource(toscaResourceStruct.getCatalogVnfResource());\r
 \r
-                                               // Add this one for logging\r
-                                               artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(mainEnvArtifactInfo));\r
-                                                                                               \r
-                                               catalogDB.saveHeatEnvironment(heatEnv);\r
-                                               // Indicate we have deployed it in the DB\r
-                                               vfResourceStructure.getArtifactsMapByUUID().get(mainEnvArtifactInfo.getArtifactUUID()).incrementDeployedInDB();\r
-                                       }\r
-                                       \r
-                                       // here we expect one VFModule to be there\r
-                                       //VfResourceInstaller.createVfModule(vfModuleStructure,heatMainTemplate, heatVolumeTemplate, heatEnv, heatVolumeEnv);\r
-                                       //VfModule vfModule = vfModuleStructure.getCatalogVfModule();\r
+                }\r
 \r
-                                       // Add this one for logging\r
-                                       //artifactListForLogging.add(ASDCElementInfo.createElementFromVfModuleStructure(vfModuleStructure));\r
-                                       \r
-                                       //catalogDB.saveOrUpdateVfModule(vfModule);\r
-                                       \r
-                                       \r
-                       // extract VF metadata                  \r
-                                       createVnfResource(nodeTemplate, toscaResourceStruct);\r
-                                       \r
-                               // check for duplicate record already in the database\r
-                                       VnfResource vnfResource = catalogDB.getVnfResource(toscaResourceStruct.getCatalogVnfResource().getModelName(),\r
-                                                       BigDecimalVersion.castAndCheckNotificationVersionToString(\r
-                                                                       toscaResourceStruct.getCatalogVnfResource().getVersion()));\r
+                boolean saveVnfCustomization = catalogDB\r
+                        .saveVnfResourceCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization());\r
 \r
-                                       if (vnfResource != null) {\r
-                                               toscaResourceStruct.setVnfAlreadyInstalled(true);\r
-                                       }\r
-                       \r
-                       \r
-                                       if(!toscaResourceStruct.isVnfAlreadyInstalled()) {\r
-                   \r
-                                                catalogDB.saveOrUpdateVnfResource(toscaResourceStruct.getCatalogVnfResource());\r
-                                               \r
-                                       }\r
-                                       \r
-                                                               \r
-                                       boolean saveVnfCustomization = catalogDB.saveVnfResourceCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization());\r
-                                               \r
-                                       if(saveVnfCustomization){\r
-                                               catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogVfServiceToResourceCustomization());\r
-                                       }\r
-                                       \r
-                                               List<org.openecomp.sdc.toscaparser.api.Group> vfGroups = toscaResourceStruct.getSdcCsarHelper().getVfModulesByVf(vfCustomizationUUID);\r
-                                               logger.debug("vfGroups:" + vfGroups.toString());\r
-                                               \r
-                                               Collections.sort(vfGroups, new Comparator<org.openecomp.sdc.toscaparser.api.Group>() {\r
-                                                       @Override\r
-                                                       public int compare(org.openecomp.sdc.toscaparser.api.Group group1, org.openecomp.sdc.toscaparser.api.Group group2) {\r
-                                                               \r
-                                                               //Field name1Field = group1.class.getDeclaredField("name");\r
-                                                               //name1Field.setAccessible(true);\r
-                                                               String thisName = group1.getName(); //(String) name1Field.get(group1);\r
-                                                               String thatName = group2.getName(); // (String) name1Field.get(group2);\r
-                                                               \r
-                                                               Matcher m = lastDigit.matcher(thisName);\r
-                                                               Matcher m2 = lastDigit.matcher(thatName);\r
-                                                               \r
-                                                               String thisDigit = "0";\r
-                                                               String thatDigit = "0";\r
-                                                               if (m.find()) {\r
-                                                                       thisDigit = m.group();\r
-                                                               } else {\r
-                                                                       return -1;\r
-                                                               }\r
-                                                               if (m2.find()) {\r
-                                                                       thatDigit = m2.group();\r
-                                                               } else {\r
-                                                                       return 1;\r
-                                                               }\r
-                                                               \r
-                                                               return new Integer(thisDigit).compareTo(new Integer(thatDigit));\r
+                if(saveVnfCustomization) {\r
+                    catalogDB.saveServiceToResourceCustomization(\r
+                            toscaResourceStruct.getCatalogVfServiceToResourceCustomization());\r
+                }\r
 \r
-                                                       }\r
-                                                       });\r
-                                               \r
-                                               logger.debug("vfGroupsAfter:" + vfGroups.toString());\r
+                /*\r
+                 * HEAT TABLE POPULATION\r
+                 * *********************************************************************************\r
+                 * **********************\r
+                 */\r
 \r
-                                               \r
-                                               for(Group group : vfGroups){\r
-                                                       \r
-                               \r
-                                                       //boolean saveVFModule = createVFModule(group, nodeTemplate, toscaResourceStruct, vfMetadata);\r
-                                                       if (vfMetadata.getVfModuleModelCustomizationUUID() == null) {\r
-                                                               logger.debug("NULL 1");\r
-                                                       } else {\r
-                                                               logger.debug("vfMetadata.getMCU=" + vfMetadata.getVfModuleModelCustomizationUUID());\r
-                                                       }\r
-                                                       if (group.getMetadata() == null) {\r
-                                                               logger.debug("NULL 3");\r
-                                                       } else {\r
-                                                               logger.debug("group.getMetadata().getValue() = " + group.getMetadata().getValue("vfModuleModelCustomizationUUID"));\r
-                                                       }\r
-                                                       if (vfMetadata.getVfModuleModelCustomizationUUID().equals(group.getMetadata().getValue("vfModuleModelCustomizationUUID"))) {\r
-                                                               logger.debug("Found a match at " + vfMetadata.getVfModuleModelCustomizationUUID());\r
-                                                          createVFModule(group, nodeTemplate, toscaResourceStruct, vfResourceStructure, vfMetadata);\r
-                               \r
-                                                               catalogDB.saveOrUpdateVfModule(toscaResourceStruct.getCatalogVfModule());\r
-                               \r
-                                                               catalogDB.saveOrUpdateVfModuleCustomization(toscaResourceStruct.getCatalogVfModuleCustomization());\r
-                                                               \r
-                                                               catalogDB.saveVnfResourceToVfModuleCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization(), toscaResourceStruct.getCatalogVfModuleCustomization());\r
-                               \r
+                int nextLoop = 0;\r
+                for(VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()) {\r
+                    logger.debug("vfResourceStructure.getVfMOduleStructure() loop, nextLoop = " + nextLoop++);\r
+                    logger.debug("vfModuleStructure:" + vfModuleStructure.toString());\r
 \r
-                                                       } else {\r
-                                                               if(toscaResourceStruct.getCatalogVfModuleCustomization() != null){\r
-                                                                       logger.debug("No match for " + toscaResourceStruct.getCatalogVfModuleCustomization().getModelCustomizationUuid());\r
-                                                               } else {\r
-                                                                       logger.debug("No match for vfModuleModelCustomizationUUID");\r
-                                                               }\r
-                                                       }\r
-                               \r
-                                               }\r
-                                                          \r
-                                       } //Commented out to process VFModules each time \r
-                                       \r
+                    // Here we set the right db structure according to the Catalog\r
+                    // DB\r
 \r
-                                       \r
-                                       // Here we expect many HEAT_TEMPLATE files to be there\r
-                                       if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_ARTIFACT)) {\r
-                                               for (VfModuleArtifact heatArtifact : vfModuleStructure.getArtifactsMap()\r
-                                                               .get(ASDCConfiguration.HEAT_ARTIFACT)) {\r
-               \r
-                                                       HeatFiles heatFile = (HeatFiles) heatArtifact.getCatalogObject();\r
-                                                                                               \r
-                                                       // Add this one for logging\r
-                                                       artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatArtifact.getArtifactInfo()));\r
-                                               \r
-                                                       if(toscaResourceStruct.getCatalogVfModule() != null && heatFile != null){\r
-                                                               catalogDB.saveVfModuleToHeatFiles (toscaResourceStruct.getCatalogVfModule().getModelUUID(), heatFile);\r
-                                                       }\r
-                                                       // Indicate we will deploy it in the DB\r
-                                                       heatArtifact.incrementDeployedInDB();\r
-                                               }\r
-                                       }\r
-                                       \r
-                               }\r
+                    // We expect only one MAIN HEAT per VFMODULE\r
+                    // we can also obtain from it the Env ArtifactInfo, that's why\r
+                    // we\r
+                    // get the Main IArtifactInfo\r
 \r
-               }\r
+                    HeatTemplate heatMainTemplate = null;\r
+                    HeatEnvironment heatEnv;\r
+\r
+                    HeatTemplate heatVolumeTemplate = null;\r
+                    HeatEnvironment heatVolumeEnv;\r
+\r
+                    IVfModuleData vfMetadata = vfModuleStructure.getVfModuleMetadata();\r
+\r
+                    if(vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT)) {\r
+\r
+                        List<VfModuleArtifact> artifacts =\r
+                                vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT);\r
+                        logger.debug("there are " + artifacts.size() + " artifacts");\r
+                        IArtifactInfo mainEnvArtifactInfo = null;\r
+                        for(VfModuleArtifact vfma : artifacts) {\r
+                            logger.debug("vmfa=" + vfma.toString());\r
+                            mainEnvArtifactInfo = vfma.getArtifactInfo().getGeneratedArtifact();\r
+\r
+                            // MAIN HEAT\r
+                            heatMainTemplate = (HeatTemplate)vfma.getCatalogObject();\r
+\r
+                            // Set HeatTemplateArtifactUUID to use later when setting the VfModule\r
+                            // and NetworkResource\r
+                            toscaResourceStruct.setHeatTemplateUUID(heatMainTemplate.getArtifactUuid());\r
+\r
+                            // Add this one for logging\r
+                            artifactListForLogging\r
+                                    .add(ASDCElementInfo.createElementFromVfArtifactInfo(vfma.getArtifactInfo()));\r
+\r
+                            catalogDB.saveHeatTemplate(heatMainTemplate, heatMainTemplate.getParameters());\r
+                            // Indicate we have deployed it in the DB\r
+                            vfma.incrementDeployedInDB();\r
+                        }\r
+\r
+                        // VOLUME HEAT\r
+                        // We expect only one VOL HEAT per VFMODULE\r
+                        // we can also obtain from it the Env ArtifactInfo, that's why\r
+                        // we get the Volume IArtifactInfo\r
+\r
+                        if(vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_VOL)) {\r
+                            IArtifactInfo volEnvArtifactInfo = vfModuleStructure.getArtifactsMap()\r
+                                    .get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getGeneratedArtifact();\r
+\r
+                            heatVolumeTemplate = (HeatTemplate)vfModuleStructure.getArtifactsMap()\r
+                                    .get(ASDCConfiguration.HEAT_VOL).get(0).getCatalogObject();\r
+\r
+                            // Set VolHeatTemplate ArtifactUUID to use later when setting the\r
+                            // VfModule\r
+                            toscaResourceStruct.setVolHeatTemplateUUID(heatVolumeTemplate.getArtifactUuid());\r
+\r
+                            // Add this one for logging\r
+                            artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(vfModuleStructure\r
+                                    .getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo()));\r
+\r
+                            catalogDB.saveHeatTemplate(heatVolumeTemplate, heatVolumeTemplate.getParameters());\r
+                            // Indicate we have deployed it in the DB\r
+                            vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0)\r
+                                    .incrementDeployedInDB();\r
+\r
+                            if(volEnvArtifactInfo != null) {\r
+                                heatVolumeEnv = (HeatEnvironment)vfResourceStructure.getArtifactsMapByUUID()\r
+                                        .get(volEnvArtifactInfo.getArtifactUUID()).getCatalogObject();\r
+\r
+                                // Set VolHeatTemplate ArtifactUUID to use later when setting the\r
+                                // VfModule\r
+                                toscaResourceStruct.setVolHeatEnvTemplateUUID(heatVolumeEnv.getArtifactUuid());\r
+\r
+                                // Add this one for logging\r
+                                artifactListForLogging\r
+                                        .add(ASDCElementInfo.createElementFromVfArtifactInfo(volEnvArtifactInfo));\r
+\r
+                                catalogDB.saveHeatEnvironment(heatVolumeEnv);\r
+                                // Indicate we have deployed it in the DB\r
+                                vfResourceStructure.getArtifactsMapByUUID().get(volEnvArtifactInfo.getArtifactUUID())\r
+                                        .incrementDeployedInDB();\r
+                            }\r
+\r
+                        }\r
+\r
+                        // NESTED HEAT\r
+                        // Here we expect many HEAT_NESTED template to be there\r
+                        // XXX FIX BY PCLO: Defect# -36643 -US666034 - check first if we really have\r
+                        // nested heat templates\r
+                        if(vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_NESTED)) {\r
+                            for(VfModuleArtifact heatNestedArtifact : vfModuleStructure.getArtifactsMap()\r
+                                    .get(ASDCConfiguration.HEAT_NESTED)) {\r
+\r
+                                // Check if this nested is well referenced by the MAIN HEAT\r
+                                String parentArtifactType = ToscaResourceInstaller\r
+                                        .identifyParentOfNestedTemplate(vfModuleStructure, heatNestedArtifact);\r
+                                HeatTemplate heatNestedTemplate = (HeatTemplate)heatNestedArtifact.getCatalogObject();\r
+\r
+                                if(parentArtifactType != null) {\r
+\r
+                                    switch(parentArtifactType) {\r
+                                        case ASDCConfiguration.HEAT:\r
+\r
+                                            // Add this one for logging\r
+                                            artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(\r
+                                                    heatNestedArtifact.getArtifactInfo()));\r
+\r
+                                            catalogDB.saveNestedHeatTemplate(heatMainTemplate.getArtifactUuid(),\r
+                                                    heatNestedTemplate, heatNestedTemplate.getTemplateName());\r
+                                            // Indicate we have deployed it in the DB\r
+                                            heatNestedArtifact.incrementDeployedInDB();\r
+                                            break;\r
+                                        case ASDCConfiguration.HEAT_VOL:\r
+\r
+                                            // Add this one for logging\r
+                                            artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(\r
+                                                    heatNestedArtifact.getArtifactInfo()));\r
+                                            catalogDB.saveNestedHeatTemplate(heatVolumeTemplate.getArtifactUuid(),\r
+                                                    heatNestedTemplate, heatNestedTemplate.getTemplateName());\r
+                                            // Indicate we have deployed it in the DB\r
+                                            heatNestedArtifact.incrementDeployedInDB();\r
+                                            break;\r
+\r
+                                        default:\r
+                                            break;\r
+\r
+                                    }\r
+                                } else { // Assume it belongs to HEAT MAIN\r
+                                    // Add this one for logging\r
+                                    artifactListForLogging.add(ASDCElementInfo\r
+                                            .createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));\r
+\r
+                                    catalogDB.saveNestedHeatTemplate(heatMainTemplate.getArtifactUuid(),\r
+                                            heatNestedTemplate, heatNestedTemplate.getTemplateName());\r
+                                    // Indicate we have deployed it in the DB\r
+                                    heatNestedArtifact.incrementDeployedInDB();\r
+                                }\r
+                            }\r
+                        }\r
+\r
+                        if(mainEnvArtifactInfo != null) {\r
+                            heatEnv = (HeatEnvironment)vfResourceStructure.getArtifactsMapByUUID()\r
+                                    .get(mainEnvArtifactInfo.getArtifactUUID()).getCatalogObject();\r
+\r
+                            // Set HeatEnvironmentArtifactUUID to use later when setting the\r
+                            // VfModule\r
+                            toscaResourceStruct.setEnvHeatTemplateUUID(heatEnv.getArtifactUuid());\r
+\r
+                            // Add this one for logging\r
+                            artifactListForLogging\r
+                                    .add(ASDCElementInfo.createElementFromVfArtifactInfo(mainEnvArtifactInfo));\r
+\r
+                            catalogDB.saveHeatEnvironment(heatEnv);\r
+                            // Indicate we have deployed it in the DB\r
+                            vfResourceStructure.getArtifactsMapByUUID().get(mainEnvArtifactInfo.getArtifactUUID())\r
+                                    .incrementDeployedInDB();\r
+                        }\r
+\r
+                        // here we expect one VFModule to be there\r
+                        // VfResourceInstaller.createVfModule(vfModuleStructure,heatMainTemplate,\r
+                        // heatVolumeTemplate, heatEnv, heatVolumeEnv);\r
+                        // VfModule vfModule = vfModuleStructure.getCatalogVfModule();\r
+\r
+                        // Add this one for logging\r
+                        // artifactListForLogging.add(ASDCElementInfo.createElementFromVfModuleStructure(vfModuleStructure));\r
+\r
+                        // catalogDB.saveOrUpdateVfModule(vfModule);\r
+\r
+                        List<org.openecomp.sdc.toscaparser.api.Group> vfGroups =\r
+                                toscaResourceStruct.getSdcCsarHelper().getVfModulesByVf(vfCustomizationUUID);\r
+                        logger.debug("vfGroups:" + vfGroups.toString());\r
+\r
+                        Collections.sort(vfGroups, new Comparator<org.openecomp.sdc.toscaparser.api.Group>() {\r
+\r
+                            @Override\r
+                            public int compare(org.openecomp.sdc.toscaparser.api.Group group1,\r
+                                    org.openecomp.sdc.toscaparser.api.Group group2) {\r
+\r
+                                // Field name1Field = group1.class.getDeclaredField("name");\r
+                                // name1Field.setAccessible(true);\r
+                                String thisName = group1.getName(); // (String)\r
+                                                                    // name1Field.get(group1);\r
+                                String thatName = group2.getName(); // (String)\r
+                                                                    // name1Field.get(group2);\r
+\r
+                                Matcher m = lastDigit.matcher(thisName);\r
+                                Matcher m2 = lastDigit.matcher(thatName);\r
+\r
+                                String thisDigit = "0";\r
+                                String thatDigit = "0";\r
+                                if(m.find()) {\r
+                                    thisDigit = m.group();\r
+                                } else {\r
+                                    return -1;\r
+                                }\r
+                                if(m2.find()) {\r
+                                    thatDigit = m2.group();\r
+                                } else {\r
+                                    return 1;\r
+                                }\r
+\r
+                                return new Integer(thisDigit).compareTo(new Integer(thatDigit));\r
+\r
+                            }\r
+                        });\r
+\r
+                        logger.debug("vfGroupsAfter:" + vfGroups.toString());\r
+\r
+                        for(Group group : vfGroups) {\r
+\r
+                            // boolean saveVFModule = createVFModule(group, nodeTemplate,\r
+                            // toscaResourceStruct, vfMetadata);\r
+                            if(vfMetadata.getVfModuleModelCustomizationUUID() == null) {\r
+                                logger.debug("NULL 1");\r
+                            } else {\r
+                                logger.debug("vfMetadata.getMCU=" + vfMetadata.getVfModuleModelCustomizationUUID());\r
+                            }\r
+                            if(group.getMetadata() == null) {\r
+                                logger.debug("NULL 3");\r
+                            } else {\r
+                                logger.debug("group.getMetadata().getValue() = "\r
+                                        + group.getMetadata().getValue("vfModuleModelCustomizationUUID"));\r
+                            }\r
+                            if(vfMetadata.getVfModuleModelCustomizationUUID()\r
+                                    .equals(group.getMetadata().getValue("vfModuleModelCustomizationUUID"))) {\r
+                                logger.debug("Found a match at " + vfMetadata.getVfModuleModelCustomizationUUID());\r
+                                createVFModule(group, nodeTemplate, toscaResourceStruct, vfResourceStructure,\r
+                                        vfMetadata);\r
+\r
+                                catalogDB.saveOrUpdateVfModule(toscaResourceStruct.getCatalogVfModule());\r
+\r
+                                catalogDB.saveOrUpdateVfModuleCustomization(\r
+                                        toscaResourceStruct.getCatalogVfModuleCustomization());\r
+\r
+                                catalogDB.saveVnfResourceToVfModuleCustomization(\r
+                                        toscaResourceStruct.getCatalogVnfResourceCustomization(),\r
+                                        toscaResourceStruct.getCatalogVfModuleCustomization());\r
+\r
+                            } else {\r
+                                if(toscaResourceStruct.getCatalogVfModuleCustomization() != null) {\r
+                                    logger.debug("No match for " + toscaResourceStruct.getCatalogVfModuleCustomization()\r
+                                            .getModelCustomizationUuid());\r
+                                } else {\r
+                                    logger.debug("No match for vfModuleModelCustomizationUUID");\r
+                                }\r
+                            }\r
+\r
+                        }\r
+\r
+                    } // Commented out to process VFModules each time\r
+\r
+                    // Here we expect many HEAT_TEMPLATE files to be there\r
+                    if(vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_ARTIFACT)) {\r
+                        for(VfModuleArtifact heatArtifact : vfModuleStructure.getArtifactsMap()\r
+                                .get(ASDCConfiguration.HEAT_ARTIFACT)) {\r
+\r
+                            HeatFiles heatFile = (HeatFiles)heatArtifact.getCatalogObject();\r
+\r
+                            // Add this one for logging\r
+                            artifactListForLogging.add(\r
+                                    ASDCElementInfo.createElementFromVfArtifactInfo(heatArtifact.getArtifactInfo()));\r
+\r
+                            if(toscaResourceStruct.getCatalogVfModule() != null && heatFile != null) {\r
+                                catalogDB.saveVfModuleToHeatFiles(\r
+                                        toscaResourceStruct.getCatalogVfModule().getModelUUID(), heatFile);\r
+                            }\r
+                            // Indicate we will deploy it in the DB\r
+                            heatArtifact.incrementDeployedInDB();\r
+                        }\r
+                    }\r
+\r
+                }\r
+\r
+            }\r
                                \r
                                /* END OF HEAT TABLE POPULATION\r
                                 * ***************************************************************************************************\r