Fixed string literal comparision
[so.git] / asdc-controller / src / main / java / org / openecomp / mso / asdc / installer / heat / ToscaResourceInstaller.java
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  * ONAP - SO\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\r
6  * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.\r
7  * ================================================================================\r
8  * Licensed under the Apache License, Version 2.0 (the "License");\r
9  * you may not use this file except in compliance with the License.\r
10  * You may obtain a copy of the License at\r
11  * \r
12  *      http://www.apache.org/licenses/LICENSE-2.0\r
13  * \r
14  * Unless required by applicable law or agreed to in writing, software\r
15  * distributed under the License is distributed on an "AS IS" BASIS,\r
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
17  * See the License for the specific language governing permissions and\r
18  * limitations under the License.\r
19  * ============LICENSE_END=========================================================\r
20  */\r
21 \r
22 package org.openecomp.mso.asdc.installer.heat;\r
23 \r
24 import java.sql.Timestamp;\r
25 import java.text.SimpleDateFormat;\r
26 import java.util.ArrayList;\r
27 import java.util.Date;\r
28 import java.util.HashMap;\r
29 import java.util.Iterator;\r
30 import java.util.LinkedHashMap;\r
31 import java.util.List;\r
32 import java.util.Map;\r
33 import java.util.Set;\r
34 import java.util.regex.Pattern;\r
35 import java.util.Collections;\r
36 import java.util.regex.Matcher;\r
37 import java.util.Comparator;\r
38 \r
39 import org.hibernate.exception.ConstraintViolationException;\r
40 import org.hibernate.exception.LockAcquisitionException;\r
41 //import org.openecomp.generic.tosca.parser.model.Metadata;\r
42 //import org.openecomp.generic.tosca.parser.model.NodeTemplate;\r
43 import org.openecomp.sdc.api.notification.IArtifactInfo;\r
44 import org.openecomp.sdc.api.notification.IVfModuleMetadata;\r
45 import org.openecomp.sdc.tosca.parser.impl.SdcPropertyNames;\r
46 import org.openecomp.sdc.toscaparser.api.Group;\r
47 import org.openecomp.sdc.toscaparser.api.NodeTemplate;\r
48 import org.openecomp.sdc.toscaparser.api.Property;\r
49 import org.openecomp.sdc.toscaparser.api.elements.Metadata;\r
50 import org.openecomp.sdc.toscaparser.api.parameters.Input;\r
51 import org.openecomp.mso.asdc.client.ASDCConfiguration;\r
52 import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException;\r
53 import org.openecomp.mso.asdc.installer.ASDCElementInfo;\r
54 import org.openecomp.mso.asdc.installer.BigDecimalVersion;\r
55 import org.openecomp.mso.asdc.installer.IVfModuleData;\r
56 import org.openecomp.mso.asdc.installer.IVfResourceInstaller;\r
57 import org.openecomp.mso.asdc.installer.ToscaResourceStructure;\r
58 import org.openecomp.mso.asdc.installer.VfModuleArtifact;\r
59 import org.openecomp.mso.asdc.installer.VfModuleStructure;\r
60 import org.openecomp.mso.asdc.installer.VfResourceStructure;\r
61 import org.openecomp.mso.asdc.util.YamlEditor;\r
62 import org.openecomp.mso.db.catalog.CatalogDatabase;\r
63 import org.openecomp.mso.db.catalog.beans.AllottedResource;\r
64 import org.openecomp.mso.db.catalog.beans.HeatEnvironment;\r
65 import org.openecomp.mso.db.catalog.beans.HeatFiles;\r
66 import org.openecomp.mso.db.catalog.beans.HeatTemplate;\r
67 import org.openecomp.mso.db.catalog.beans.HeatTemplateParam;\r
68 import org.openecomp.mso.db.catalog.beans.NetworkResource;\r
69 import org.openecomp.mso.db.catalog.beans.NetworkResourceCustomization;\r
70 import org.openecomp.mso.db.catalog.beans.AllottedResourceCustomization;\r
71 import org.openecomp.mso.db.catalog.beans.Service;\r
72 import org.openecomp.mso.db.catalog.beans.ServiceToAllottedResources;\r
73 import org.openecomp.mso.db.catalog.beans.ServiceToNetworks;\r
74 import org.openecomp.mso.db.catalog.beans.ServiceToResourceCustomization;\r
75 import org.openecomp.mso.db.catalog.beans.TempNetworkHeatTemplateLookup;\r
76 import org.openecomp.mso.db.catalog.beans.ToscaCsar;\r
77 import org.openecomp.mso.db.catalog.beans.VfModule;\r
78 import org.openecomp.mso.db.catalog.beans.VfModuleCustomization;\r
79 import org.openecomp.mso.db.catalog.beans.VfModuleToHeatFiles;\r
80 import org.openecomp.mso.db.catalog.beans.VnfResCustomToVfModuleCustom;\r
81 import org.openecomp.mso.db.catalog.beans.VnfResource;\r
82 import org.openecomp.mso.db.catalog.beans.VnfResourceCustomization;\r
83 import org.openecomp.mso.logger.MessageEnum;\r
84 import org.openecomp.mso.logger.MsoLogger;\r
85 \r
86 public class ToscaResourceInstaller {// implements IVfResourceInstaller {\r
87 \r
88         private MsoLogger logger;\r
89         \r
90         private static final Pattern lastDigit = Pattern.compile("(\\d+)$");\r
91 \r
92         public ToscaResourceInstaller()  {\r
93                 logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.ASDC);\r
94         }\r
95 \r
96         //@Override\r
97         public boolean isResourceAlreadyDeployed(VfResourceStructure vfResourceStruct)\r
98                         throws ArtifactInstallerException {\r
99                 boolean status = false;\r
100                 VfResourceStructure vfResourceStructure = (VfResourceStructure)vfResourceStruct;\r
101                 \r
102                 try {\r
103                         \r
104                         String serviceUUID = vfResourceStruct.getNotification().getServiceUUID();                       \r
105 \r
106                         if (status) {\r
107                                 logger.info(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED_DETAIL,\r
108                                                 vfResourceStructure.getResourceInstance().getResourceInstanceName(),\r
109                                                 vfResourceStructure.getResourceInstance().getResourceCustomizationUUID(),\r
110                                                 vfResourceStructure.getNotification().getServiceName(),\r
111                                                 BigDecimalVersion.castAndCheckNotificationVersionToString(\r
112                                                                 vfResourceStructure.getNotification().getServiceVersion()),\r
113                                                 vfResourceStructure.getNotification().getServiceUUID(),\r
114                                                 vfResourceStructure.getResourceInstance().getResourceName(),"", "");\r
115                         } else {\r
116                                 logger.info(MessageEnum.ASDC_ARTIFACT_NOT_DEPLOYED_DETAIL,\r
117                                                 vfResourceStructure.getResourceInstance().getResourceInstanceName(),\r
118                                                 vfResourceStructure.getResourceInstance().getResourceCustomizationUUID(),\r
119                                                 vfResourceStructure.getNotification().getServiceName(),\r
120                                                 BigDecimalVersion.castAndCheckNotificationVersionToString(\r
121                                                                 vfResourceStructure.getNotification().getServiceVersion()),\r
122                                                 vfResourceStructure.getNotification().getServiceUUID(), \r
123                                                 vfResourceStructure.getResourceInstance().getResourceName(),"", "");\r
124                         }\r
125 \r
126                         return status;\r
127 \r
128                 } catch (Exception e) {\r
129                         logger.error(MessageEnum.ASDC_ARTIFACT_CHECK_EXC, "", "", MsoLogger.ErrorCode.SchemaError, "Exception - isResourceAlreadyDeployed");\r
130                         throw new ArtifactInstallerException("Exception caught during checking existence of the VNF Resource.", e);\r
131                 }\r
132         }\r
133 \r
134         //@Override\r
135         public void installTheResource(ToscaResourceStructure toscaResourceStruct, VfResourceStructure vfResourceStruct) throws ArtifactInstallerException {\r
136                 \r
137                 logger.debug("installTheResource is called");\r
138                 \r
139                 VfResourceStructure vfResourceStructure = (VfResourceStructure)vfResourceStruct;\r
140 \r
141                 for (VfModuleArtifact vfModuleArtifact : vfResourceStructure.getArtifactsMapByUUID().values()) {\r
142 \r
143                         switch (vfModuleArtifact.getArtifactInfo().getArtifactType()) {\r
144                         case ASDCConfiguration.HEAT:\r
145                         case ASDCConfiguration.HEAT_VOL:\r
146                         case ASDCConfiguration.HEAT_NESTED:\r
147                                 ToscaResourceInstaller.createHeatTemplateFromArtifact(vfResourceStructure, toscaResourceStruct, vfModuleArtifact);\r
148                                 break;\r
149                         case ASDCConfiguration.HEAT_ENV:\r
150                                 ToscaResourceInstaller.createHeatEnvFromArtifact(vfResourceStructure, vfModuleArtifact);\r
151                                 break;\r
152                         case ASDCConfiguration.HEAT_ARTIFACT:\r
153                                 ToscaResourceInstaller.createHeatFileFromArtifact(vfResourceStructure, vfModuleArtifact, toscaResourceStruct);\r
154                                 break;\r
155                         case ASDCConfiguration.HEAT_NET:\r
156                         case ASDCConfiguration.OTHER:\r
157                                 logger.warn(MessageEnum.ASDC_ARTIFACT_TYPE_NOT_SUPPORT, vfModuleArtifact.getArtifactInfo().getArtifactType()+"(Artifact Name:"+vfModuleArtifact.getArtifactInfo().getArtifactName()+")", "", "", MsoLogger.ErrorCode.DataError, "Artifact type not supported");\r
158                                 break;\r
159                         default:\r
160                                 break;\r
161 \r
162                         }\r
163                 }\r
164                 // Those objects could be reused by different VfModule\r
165                 \r
166 \r
167                 \r
168                 // PCLO: in case of deployment failure, use a string that will represent the type of artifact that failed...\r
169                 List<ASDCElementInfo> artifactListForLogging = new ArrayList<>();\r
170                 \r
171                 CatalogDatabase catalogDB = CatalogDatabase.getInstance();\r
172                 // 2. Create the VFModules/VNFResource objects by linking them to the\r
173                 // objects created before and store them in Resource/module structure\r
174                 // Opening a DB transaction, starting from here\r
175                 try {\r
176 \r
177                         \r
178                         createToscaCsar(toscaResourceStruct);\r
179                         \r
180                         catalogDB.saveToscaCsar(toscaResourceStruct.getCatalogToscaCsar());\r
181                         \r
182                         ToscaResourceInstaller.createService(toscaResourceStruct);\r
183                         \r
184                         catalogDB.saveService(toscaResourceStruct.getCatalogService());\r
185 \r
186                         \r
187                         /* VNF POPULATION\r
188                          * ************************************************************************************************************\r
189                          */\r
190                         \r
191             // Ingest (VNF) Data - 1707\r
192             List<NodeTemplate> vfNodeTemplatesList = toscaResourceStruct.getSdcCsarHelper().getServiceVfList();\r
193             int outerLoop = 0;\r
194             logger.debug("**vfMondeTEmplatesList.size()=" + vfNodeTemplatesList.size());\r
195             for (NodeTemplate nodeTemplate :  vfNodeTemplatesList) {\r
196                 logger.debug("nodeTemplate outerLoop=" + outerLoop++);\r
197                 // extract VF metadata\r
198                 \r
199                                         Metadata metadata = nodeTemplate.getMetaData();\r
200 \r
201                                         String vfCustomizationUUID = toscaResourceStruct.getSdcCsarHelper().getMetadataPropertyValue(metadata, SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);\r
202                                         logger.debug("vfCustomizationUUID=" + vfCustomizationUUID);\r
203 \r
204                         \r
205                         /* HEAT TABLE POPULATION\r
206                          * *******************************************************************************************************\r
207                          */\r
208                         \r
209                                 int nextLoop = 0;\r
210                         for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()) {\r
211                                 logger.debug("vfResourceStructure.getVfMOduleStructure() loop, nextLoop = " + nextLoop++);\r
212                                 logger.debug("vfModuleStructure:" + vfModuleStructure.toString());\r
213                                 \r
214                                 // Here we set the right db structure according to the Catalog\r
215                                 // DB\r
216 \r
217                                 // We expect only one MAIN HEAT per VFMODULE\r
218                                 // we can also obtain from it the Env ArtifactInfo, that's why\r
219                                 // we\r
220                                 // get the Main IArtifactInfo\r
221 \r
222                                 HeatTemplate heatMainTemplate = null;\r
223                                 HeatEnvironment heatEnv;\r
224                                 \r
225                                 HeatTemplate heatVolumeTemplate = null;\r
226                                 HeatEnvironment heatVolumeEnv;\r
227                                 \r
228                                 \r
229                                 IVfModuleData vfMetadata = vfModuleStructure.getVfModuleMetadata();\r
230                                                         \r
231                                 \r
232                                 if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT)) {\r
233                                         \r
234                                         List<VfModuleArtifact> artifacts = vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT);\r
235                                         logger.debug("there are " + artifacts.size() + " artifacts");\r
236                                         IArtifactInfo mainEnvArtifactInfo = null;\r
237                                         for (VfModuleArtifact vfma : artifacts) {\r
238                                                 logger.debug("vmfa=" + vfma.toString());\r
239                                                 mainEnvArtifactInfo = \r
240                                                                 vfma.getArtifactInfo().getGeneratedArtifact();\r
241                                                 \r
242                                                 // MAIN HEAT\r
243                                                 heatMainTemplate = (HeatTemplate) vfma.getCatalogObject(); \r
244                                                 \r
245                                                 // Set HeatTemplateArtifactUUID to use later when setting the VfModule and NetworkResource\r
246                                                 toscaResourceStruct.setHeatTemplateUUID(heatMainTemplate.getArtifactUuid());\r
247 \r
248                                                 // Add this one for logging\r
249                                                 artifactListForLogging.add(ASDCElementInfo\r
250                                                                 .createElementFromVfArtifactInfo(vfma.getArtifactInfo()));\r
251                                                 \r
252                                                 catalogDB.saveHeatTemplate(heatMainTemplate, heatMainTemplate.getParameters());\r
253                                                 // Indicate we have deployed it in the DB\r
254                                                 vfma.incrementDeployedInDB();\r
255                                         }\r
256                                         \r
257                                         \r
258                                         // VOLUME HEAT\r
259                                         // We expect only one VOL HEAT per VFMODULE\r
260                                         // we can also obtain from it the Env ArtifactInfo, that's why\r
261                                         // we get the Volume IArtifactInfo\r
262                                 \r
263                                         if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_VOL)) {\r
264                                                 IArtifactInfo volEnvArtifactInfo = vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0)\r
265                                                                 .getArtifactInfo().getGeneratedArtifact();\r
266                 \r
267                                                 heatVolumeTemplate = (HeatTemplate) vfModuleStructure.getArtifactsMap()\r
268                                                                 .get(ASDCConfiguration.HEAT_VOL).get(0).getCatalogObject();\r
269                                                 \r
270                                                 // Set VolHeatTemplate ArtifactUUID to use later when setting the VfModule \r
271                                                 toscaResourceStruct.setVolHeatTemplateUUID(heatVolumeTemplate.getArtifactUuid());\r
272                                                 \r
273                                                 \r
274                                                 // Add this one for logging\r
275                                                 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo()));\r
276 \r
277                                                 catalogDB.saveHeatTemplate(heatVolumeTemplate, heatVolumeTemplate.getParameters());\r
278                                                 // Indicate we have deployed it in the DB\r
279                                                 vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).incrementDeployedInDB();\r
280                                                 \r
281                                                 if (volEnvArtifactInfo != null) {\r
282                                                         heatVolumeEnv = (HeatEnvironment) vfResourceStructure.getArtifactsMapByUUID()\r
283                                                                         .get(volEnvArtifactInfo.getArtifactUUID()).getCatalogObject();\r
284                                                         \r
285                                                         // Set VolHeatTemplate ArtifactUUID to use later when setting the VfModule \r
286                                                         toscaResourceStruct.setVolHeatEnvTemplateUUID(heatVolumeEnv.getArtifactUuid());\r
287 \r
288                                                         // Add this one for logging\r
289                                                         artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(volEnvArtifactInfo));\r
290                                                                                                                 \r
291                                                         catalogDB.saveHeatEnvironment(heatVolumeEnv);\r
292                                                         // Indicate we have deployed it in the DB\r
293                                                         vfResourceStructure.getArtifactsMapByUUID().get(volEnvArtifactInfo.getArtifactUUID()).incrementDeployedInDB();\r
294                                                 }\r
295                                                 \r
296                                         }\r
297                                         \r
298                                         // NESTED HEAT\r
299                                         // Here we expect many HEAT_NESTED template to be there\r
300                                         // XXX FIX BY PCLO: Defect# -36643 -US666034 - check first if we really have nested heat templates\r
301                                         if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_NESTED)) {\r
302                                                 for (VfModuleArtifact heatNestedArtifact : vfModuleStructure.getArtifactsMap()\r
303                                                                 .get(ASDCConfiguration.HEAT_NESTED)) {\r
304         \r
305                                                         // Check if this nested is well referenced by the MAIN HEAT\r
306                                                         String parentArtifactType = ToscaResourceInstaller.identifyParentOfNestedTemplate(vfModuleStructure,heatNestedArtifact);\r
307                                                         HeatTemplate heatNestedTemplate = (HeatTemplate) heatNestedArtifact.getCatalogObject();\r
308                                                         \r
309                                                         if (parentArtifactType != null) {\r
310                                                                                                                 \r
311                                                                 switch (parentArtifactType) {\r
312                                                                         case ASDCConfiguration.HEAT:\r
313                                                                                 \r
314                                                                                 // Add this one for logging\r
315                                                                                 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));\r
316                                                                 \r
317                                                                                 catalogDB.saveNestedHeatTemplate (heatMainTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());\r
318                                                                                 // Indicate we have deployed it in the DB\r
319                                                                                 heatNestedArtifact.incrementDeployedInDB();\r
320                                                                                 break;\r
321                                                                         case ASDCConfiguration.HEAT_VOL:\r
322                                                                                 \r
323                                                                                 // Add this one for logging\r
324                                                                                 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));\r
325                                                                                 catalogDB.saveNestedHeatTemplate (heatVolumeTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());\r
326                                                                                 // Indicate we have deployed it in the DB\r
327                                                                                 heatNestedArtifact.incrementDeployedInDB();\r
328                                                                                 break;\r
329                                                                                 \r
330                                                                         default:\r
331                                                                                 break;\r
332 \r
333                                                                 }\r
334                                                         } else { // Assume it belongs to HEAT MAIN\r
335                                                                 // Add this one for logging\r
336                                                                 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));\r
337                                                 \r
338                                                                 catalogDB.saveNestedHeatTemplate (heatMainTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());\r
339                                                                 // Indicate we have deployed it in the DB\r
340                                                                 heatNestedArtifact.incrementDeployedInDB();\r
341                                                         }\r
342                                                 }\r
343                                         }\r
344                                         \r
345                                         if (mainEnvArtifactInfo != null) {\r
346                                                 heatEnv = (HeatEnvironment) vfResourceStructure.getArtifactsMapByUUID()\r
347                                                                 .get(mainEnvArtifactInfo.getArtifactUUID()).getCatalogObject();\r
348                                                 \r
349                                                 // Set HeatEnvironmentArtifactUUID to use later when setting the VfModule \r
350                                                 toscaResourceStruct.setEnvHeatTemplateUUID(heatEnv.getArtifactUuid());\r
351 \r
352                                                 // Add this one for logging\r
353                                                 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(mainEnvArtifactInfo));\r
354                                                                                                 \r
355                                                 catalogDB.saveHeatEnvironment(heatEnv);\r
356                                                 // Indicate we have deployed it in the DB\r
357                                                 vfResourceStructure.getArtifactsMapByUUID().get(mainEnvArtifactInfo.getArtifactUUID()).incrementDeployedInDB();\r
358                                         }\r
359                                         \r
360                                         // here we expect one VFModule to be there\r
361                                         //VfResourceInstaller.createVfModule(vfModuleStructure,heatMainTemplate, heatVolumeTemplate, heatEnv, heatVolumeEnv);\r
362                                         //VfModule vfModule = vfModuleStructure.getCatalogVfModule();\r
363 \r
364                                         // Add this one for logging\r
365                                         //artifactListForLogging.add(ASDCElementInfo.createElementFromVfModuleStructure(vfModuleStructure));\r
366                                         \r
367                                         //catalogDB.saveOrUpdateVfModule(vfModule);\r
368                                         \r
369                                         \r
370                         // extract VF metadata                  \r
371                                         createVnfResource(nodeTemplate, toscaResourceStruct);\r
372                                         \r
373                                 // check for duplicate record already in the database\r
374                                         VnfResource vnfResource = catalogDB.getVnfResource(toscaResourceStruct.getCatalogVnfResource().getModelName(),\r
375                                                         BigDecimalVersion.castAndCheckNotificationVersionToString(\r
376                                                                         toscaResourceStruct.getCatalogVnfResource().getVersion()));\r
377 \r
378                                         if (vnfResource != null) {\r
379                                                 toscaResourceStruct.setVnfAlreadyInstalled(true);\r
380                                         }\r
381                         \r
382                         \r
383                                         if(!toscaResourceStruct.isVnfAlreadyInstalled()) {\r
384                     \r
385                                                  catalogDB.saveOrUpdateVnfResource(toscaResourceStruct.getCatalogVnfResource());\r
386                                                 \r
387                                         }\r
388                                         \r
389                                                                 \r
390                                         boolean saveVnfCustomization = catalogDB.saveVnfResourceCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization());\r
391                                                 \r
392                                         if(saveVnfCustomization){\r
393                                                 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogVfServiceToResourceCustomization());\r
394                                         }\r
395                                         \r
396                                                 List<org.openecomp.sdc.toscaparser.api.Group> vfGroups = toscaResourceStruct.getSdcCsarHelper().getVfModulesByVf(vfCustomizationUUID);\r
397                                                 logger.debug("vfGroups:" + vfGroups.toString());\r
398                                                 \r
399                                                 Collections.sort(vfGroups, new Comparator<org.openecomp.sdc.toscaparser.api.Group>() {\r
400                                                         @Override\r
401                                                         public int compare(org.openecomp.sdc.toscaparser.api.Group group1, org.openecomp.sdc.toscaparser.api.Group group2) {\r
402                                                                 \r
403                                                                 //Field name1Field = group1.class.getDeclaredField("name");\r
404                                                                 //name1Field.setAccessible(true);\r
405                                                                 String thisName = group1.getName(); //(String) name1Field.get(group1);\r
406                                                                 String thatName = group2.getName(); // (String) name1Field.get(group2);\r
407                                                                 \r
408                                                                 Matcher m = lastDigit.matcher(thisName);\r
409                                                                 Matcher m2 = lastDigit.matcher(thatName);\r
410                                                                 \r
411                                                                 String thisDigit = "0";\r
412                                                                 String thatDigit = "0";\r
413                                                                 if (m.find()) {\r
414                                                                         thisDigit = m.group();\r
415                                                                 } else {\r
416                                                                         return -1;\r
417                                                                 }\r
418                                                                 if (m2.find()) {\r
419                                                                         thatDigit = m2.group();\r
420                                                                 } else {\r
421                                                                         return 1;\r
422                                                                 }\r
423                                                                 \r
424                                                                 return new Integer(thisDigit).compareTo(new Integer(thatDigit));\r
425 \r
426                                                         }\r
427                                                         });\r
428                                                 \r
429                                                 logger.debug("vfGroupsAfter:" + vfGroups.toString());\r
430 \r
431                                                 \r
432                                                 for(Group group : vfGroups){\r
433                                                         \r
434                                 \r
435                                                         //boolean saveVFModule = createVFModule(group, nodeTemplate, toscaResourceStruct, vfMetadata);\r
436                                                         if (vfMetadata.getVfModuleModelCustomizationUUID() == null) {\r
437                                                                 logger.debug("NULL 1");\r
438                                                         } else {\r
439                                                                 logger.debug("vfMetadata.getMCU=" + vfMetadata.getVfModuleModelCustomizationUUID());\r
440                                                         }\r
441                                                         if (group.getMetadata() == null) {\r
442                                                                 logger.debug("NULL 3");\r
443                                                         } else {\r
444                                                                 logger.debug("group.getMetadata().getValue() = " + group.getMetadata().getValue("vfModuleModelCustomizationUUID"));\r
445                                                         }\r
446                                                         if (vfMetadata.getVfModuleModelCustomizationUUID().equals(group.getMetadata().getValue("vfModuleModelCustomizationUUID"))) {\r
447                                                                 logger.debug("Found a match at " + vfMetadata.getVfModuleModelCustomizationUUID());\r
448                                                            createVFModule(group, nodeTemplate, toscaResourceStruct, vfResourceStructure, vfMetadata);\r
449                                 \r
450                                                                 catalogDB.saveOrUpdateVfModule(toscaResourceStruct.getCatalogVfModule());\r
451                                 \r
452                                                                 catalogDB.saveOrUpdateVfModuleCustomization(toscaResourceStruct.getCatalogVfModuleCustomization());\r
453                                                                 \r
454                                                                 catalogDB.saveVnfResourceToVfModuleCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization(), toscaResourceStruct.getCatalogVfModuleCustomization());\r
455                                 \r
456 \r
457                                                         } else {\r
458                                                                 if(toscaResourceStruct.getCatalogVfModuleCustomization() != null){\r
459                                                                         logger.debug("No match for " + toscaResourceStruct.getCatalogVfModuleCustomization().getModelCustomizationUuid());\r
460                                                                 } else {\r
461                                                                         logger.debug("No match for vfModuleModelCustomizationUUID");\r
462                                                                 }\r
463                                                         }\r
464                                 \r
465                                                 }\r
466                                                            \r
467                                         } //Commented out to process VFModules each time \r
468                                         \r
469 \r
470                                         \r
471                                         // Here we expect many HEAT_TEMPLATE files to be there\r
472                                         if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_ARTIFACT)) {\r
473                                                 for (VfModuleArtifact heatArtifact : vfModuleStructure.getArtifactsMap()\r
474                                                                 .get(ASDCConfiguration.HEAT_ARTIFACT)) {\r
475                 \r
476                                                         HeatFiles heatFile = (HeatFiles) heatArtifact.getCatalogObject();\r
477                                                                                                 \r
478                                                         // Add this one for logging\r
479                                                         artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatArtifact.getArtifactInfo()));\r
480                                                 \r
481                                                         if(toscaResourceStruct.getCatalogVfModule() != null && heatFile != null){\r
482                                                                 catalogDB.saveVfModuleToHeatFiles (toscaResourceStruct.getCatalogVfModule().getModelUUID(), heatFile);\r
483                                                         }\r
484                                                         // Indicate we will deploy it in the DB\r
485                                                         heatArtifact.incrementDeployedInDB();\r
486                                                 }\r
487                                         }\r
488                                         \r
489                                 }\r
490 \r
491                 }\r
492                                 \r
493                                 /* END OF HEAT TABLE POPULATION\r
494                                  * ***************************************************************************************************\r
495                                  */\r
496             \r
497             \r
498           //  throw new ArtifactInstallerException("TESTING");\r
499             \r
500             \r
501             List<NodeTemplate> allottedResourceList = toscaResourceStruct.getSdcCsarHelper().getAllottedResources();\r
502                 \r
503                         if(allottedResourceList != null){\r
504                         \r
505                                 for(NodeTemplate allottedNode : allottedResourceList){\r
506                                         \r
507                                         createAllottedResource(allottedNode, toscaResourceStruct);\r
508                                         \r
509                                         catalogDB.saveAllottedResource(toscaResourceStruct.getAllottedResource());\r
510                                         \r
511                                         catalogDB.saveAllottedResourceCustomization(toscaResourceStruct.getCatalogAllottedResourceCustomization());\r
512                                         \r
513                                         catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogAllottedServiceToResourceCustomization());\r
514                                         \r
515                                 }\r
516                         }\r
517                         \r
518 \r
519                 List<NodeTemplate> nodeTemplatesVLList = toscaResourceStruct.getSdcCsarHelper().getServiceVlList();\r
520                                 \r
521                         if(nodeTemplatesVLList != null){\r
522                                 \r
523                                 for(NodeTemplate vlNode : nodeTemplatesVLList){\r
524                                         \r
525                                         String networkResourceModelName = vlNode.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim();\r
526 \r
527                                         List<TempNetworkHeatTemplateLookup> networkHeatTemplateLookup = catalogDB.getTempNetworkHeatTemplateLookup(networkResourceModelName);\r
528                                         \r
529                                         if(networkHeatTemplateLookup != null && networkHeatTemplateLookup.size() > 0 ){\r
530                                         \r
531                                                 createNetworkResource(vlNode, toscaResourceStruct, networkHeatTemplateLookup.get(0));\r
532                                         \r
533                                         } else {\r
534                                                 throw new ArtifactInstallerException("No NetworkResourceName found in TempNetworkHeatTemplateLookup for " + networkResourceModelName);\r
535                                         }\r
536                                         \r
537                                                                                 \r
538                                                 catalogDB.saveNetworkResource(toscaResourceStruct.getCatalogNetworkResource());\r
539                                                 \r
540                                                 catalogDB.saveNetworkResourceCustomization(toscaResourceStruct.getCatalogNetworkResourceCustomization());\r
541                                                 \r
542                                                 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogVlServiceToResourceCustomization());\r
543 \r
544                                 }\r
545                         }       \r
546             \r
547                 \r
548                    //createServiceToResourceCustomization(toscaResourceStruct.getCatalogService(), toscaResourceStruct.getCatalogVnfResourceCustomization(), toscaResourceStruct);\r
549                    \r
550            // catalogDB.saveToscaCsar(toscaResourceStruct.getCatalogToscaCsar());\r
551                 \r
552  \r
553                         catalogDB.commit();     \r
554                         vfResourceStructure.setSuccessfulDeployment();\r
555                         \r
556                 }catch(Exception e){\r
557                         logger.debug("Exception :",e);\r
558                         \r
559                         Throwable dbExceptionToCapture = e;\r
560                         while (!(dbExceptionToCapture instanceof ConstraintViolationException || dbExceptionToCapture instanceof LockAcquisitionException)\r
561                                         && (dbExceptionToCapture.getCause() != null)) {\r
562                                 dbExceptionToCapture = dbExceptionToCapture.getCause();\r
563                         }\r
564 \r
565                         if (dbExceptionToCapture instanceof ConstraintViolationException || dbExceptionToCapture instanceof LockAcquisitionException) {\r
566                                 logger.warn(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED, vfResourceStructure.getResourceInstance().getResourceName(),\r
567                                                 vfResourceStructure.getNotification().getServiceVersion(), "", "", MsoLogger.ErrorCode.DataError, "Exception - ASCDC Artifact already deployed", e);\r
568                         } else {\r
569                             String elementToLog = (artifactListForLogging.size() > 0 ? artifactListForLogging.get(artifactListForLogging.size()-1).toString() : "No element listed");\r
570                                 logger.error(MessageEnum.ASDC_ARTIFACT_INSTALL_EXC, elementToLog, "", "", MsoLogger.ErrorCode.DataError, "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback", e);\r
571                                 catalogDB.rollback();\r
572                                 throw new ArtifactInstallerException(\r
573                                                 "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback.", e);\r
574                         }\r
575 \r
576                 }\r
577                                 \r
578         }               \r
579 \r
580                 \r
581         public static String verifyTheFilePrefixInArtifacts(String filebody, VfResourceStructure vfResourceStructure, List<String> listTypes) {\r
582                 String newFileBody = filebody;\r
583                 for (VfModuleArtifact moduleArtifact:vfResourceStructure.getArtifactsMapByUUID().values()) {\r
584                         \r
585                         if (listTypes.contains(moduleArtifact.getArtifactInfo().getArtifactType())) {\r
586                                 \r
587                                 newFileBody = verifyTheFilePrefixInString(newFileBody,moduleArtifact.getArtifactInfo().getArtifactName());\r
588                         }\r
589                 }\r
590                 return newFileBody;\r
591         }\r
592         \r
593         public static String verifyTheFilePrefixInString(final String body, final String filenameToVerify) {\r
594                 \r
595                 String needlePrefix = "file:///";\r
596                 String prefixedFilenameToVerify = needlePrefix+filenameToVerify;\r
597                 \r
598                 if ((body == null) || (body.length() == 0) || (filenameToVerify == null) || (filenameToVerify.length() == 0)) { \r
599                         return body; \r
600                 } \r
601  \r
602                 StringBuffer sb = new StringBuffer(body.length()); \r
603  \r
604                 int currentIndex = 0; \r
605                 int startIndex = 0; \r
606  \r
607                 while (currentIndex != -1) { \r
608                         startIndex = currentIndex; \r
609                         currentIndex = body.indexOf(prefixedFilenameToVerify, startIndex); \r
610  \r
611                         if (currentIndex == -1) { \r
612                                 break; \r
613                         } \r
614  \r
615                         // We append from the startIndex up to currentIndex (start of File Name) \r
616                         sb.append(body.substring(startIndex, currentIndex)); \r
617                         sb.append(filenameToVerify); \r
618  \r
619                         currentIndex += prefixedFilenameToVerify.length(); \r
620                 } \r
621  \r
622                 sb.append(body.substring(startIndex)); \r
623  \r
624                 return sb.toString();\r
625         }\r
626         \r
627         \r
628         private static void createHeatTemplateFromArtifact(VfResourceStructure vfResourceStructure,ToscaResourceStructure toscaResourceStruct,\r
629                         VfModuleArtifact vfModuleArtifact) {\r
630                 HeatTemplate heatTemplate = new HeatTemplate();\r
631 \r
632                 // TODO Set the label\r
633 //              heatTemplate.setAsdcLabel("label");\r
634                 // Use the ResourceName of the ASDC template because the HEAT could be\r
635                 // reused\r
636 //              heatTemplate.setAsdcResourceName(vfResourceStructure.getResourceInstance().getResourceName());\r
637                 heatTemplate.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());\r
638                 \r
639                 List<String> typeList = new ArrayList<>();\r
640                 typeList.add(ASDCConfiguration.HEAT_NESTED);\r
641                 typeList.add(ASDCConfiguration.HEAT_ARTIFACT);\r
642                 \r
643                 heatTemplate.setTemplateBody(verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(),vfResourceStructure,typeList));\r
644                 heatTemplate.setTemplateName(vfModuleArtifact.getArtifactInfo().getArtifactName());\r
645 \r
646                 if (vfModuleArtifact.getArtifactInfo().getArtifactTimeout() != null) {\r
647                         heatTemplate.setTimeoutMinutes(vfModuleArtifact.getArtifactInfo().getArtifactTimeout());\r
648                 } else {\r
649                         heatTemplate.setTimeoutMinutes(240);\r
650                 }\r
651                 \r
652                 //toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());\r
653 \r
654                 heatTemplate.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());\r
655                 heatTemplate.setVersion(BigDecimalVersion\r
656                                 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));\r
657                 heatTemplate.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());\r
658                 \r
659                 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){\r
660                         heatTemplate.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());\r
661                 } else {\r
662                         heatTemplate.setArtifactChecksum("MANUAL_RECORD");\r
663                 }\r
664                 \r
665                 Set<HeatTemplateParam> heatParam = ToscaResourceInstaller\r
666                                 .extractHeatTemplateParameters(vfModuleArtifact.getResult(), vfModuleArtifact.getArtifactInfo().getArtifactUUID());\r
667                 heatTemplate.setParameters(heatParam);\r
668                 //heatTemplate.setCreated(getCurrentTimeStamp());\r
669 \r
670                 vfModuleArtifact.setCatalogObject(heatTemplate);\r
671         }\r
672 \r
673         private static void createHeatEnvFromArtifact(VfResourceStructure vfResourceStructure,\r
674                         VfModuleArtifact vfModuleArtifact) {\r
675                 HeatEnvironment heatEnvironment = new HeatEnvironment();\r
676 \r
677                 heatEnvironment.setName(vfModuleArtifact.getArtifactInfo().getArtifactName());\r
678                 // TODO Set the label\r
679 //              heatEnvironment.setAsdcLabel("Label");\r
680                 \r
681                 List<String> typeList = new ArrayList<>();\r
682                 typeList.add(ASDCConfiguration.HEAT);\r
683                 typeList.add(ASDCConfiguration.HEAT_VOL);\r
684                 \r
685                 heatEnvironment.setEnvironment(verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(),vfResourceStructure,typeList));\r
686 //              heatEnvironment.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());\r
687                 heatEnvironment.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());\r
688                 heatEnvironment.setVersion(BigDecimalVersion\r
689                                 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));\r
690 //              heatEnvironment.setAsdcResourceName(VfResourceInstaller.createVNFName(vfResourceStructure));\r
691                 heatEnvironment.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());\r
692                 \r
693                 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){\r
694                         heatEnvironment.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());\r
695                 } else{\r
696                         heatEnvironment.setArtifactChecksum("MANUAL_RECORD");\r
697                 }\r
698                 //heatEnvironment.setCreated(getCurrentTimeStamp());\r
699 \r
700                 vfModuleArtifact.setCatalogObject(heatEnvironment);\r
701                 \r
702         }\r
703 \r
704         private static void createHeatFileFromArtifact(VfResourceStructure vfResourceStructure,\r
705                         VfModuleArtifact vfModuleArtifact, ToscaResourceStructure toscaResourceStruct) {\r
706 \r
707                 HeatFiles heatFile = new HeatFiles();\r
708                 // TODO Set the label\r
709 //              heatFile.setAsdcLabel("Label");\r
710                 heatFile.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());\r
711                 heatFile.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());\r
712                 heatFile.setFileBody(vfModuleArtifact.getResult());\r
713                 heatFile.setFileName(vfModuleArtifact.getArtifactInfo().getArtifactName());\r
714                 heatFile.setVersion(BigDecimalVersion\r
715                                 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));\r
716                 \r
717                 toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());\r
718                 //heatFile.setCreated(getCurrentTimeStamp());\r
719 \r
720 //              heatFile.setAsdcResourceName(vfResourceStructure.getResourceInstance().getResourceName());\r
721                 \r
722                 \r
723                 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){\r
724                         heatFile.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());\r
725                 } else {\r
726                         heatFile.setArtifactChecksum("MANUAL_RECORD");\r
727                 }\r
728                 \r
729                 vfModuleArtifact.setCatalogObject(heatFile);\r
730                 \r
731         }\r
732 \r
733         private static void createService(ToscaResourceStructure toscaResourceStructure) {\r
734                 \r
735                 toscaResourceStructure.getServiceMetadata();\r
736                 \r
737                 Metadata serviceMetadata = toscaResourceStructure.getServiceMetadata();\r
738                         \r
739                 Service service = new Service();\r
740                 \r
741                 //  Service     \r
742                 if(serviceMetadata != null){    \r
743                         \r
744                         if(toscaResourceStructure.getServiceVersion() != null){\r
745                                 service.setVersion(toscaResourceStructure.getServiceVersion());\r
746                         }\r
747                         \r
748                         service.setServiceType(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(serviceMetadata, "serviceType"));\r
749                         service.setServiceRole(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(serviceMetadata, "serviceRole"));\r
750                         \r
751                         service.setDescription(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION));\r
752                         service.setModelName(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_NAME));\r
753                         service.setModelUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));\r
754                         //service.setVersion(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_VERSION));\r
755                         service.setModelInvariantUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));\r
756                         service.setToscaCsarArtifactUUID(toscaResourceStructure.getToscaArtifact().getArtifactUUID());\r
757                         //service.setCreated(getCurrentTimeStamp());\r
758                 }\r
759                                 \r
760                 toscaResourceStructure.setCatalogService(service);\r
761         }\r
762         \r
763         private static void createToscaCsar(ToscaResourceStructure toscaResourceStructure) {\r
764                 \r
765                 ToscaCsar toscaCsar = new ToscaCsar();\r
766                 if(toscaResourceStructure.getToscaArtifact().getArtifactChecksum() != null){\r
767                         toscaCsar.setArtifactChecksum(toscaResourceStructure.getToscaArtifact().getArtifactChecksum());\r
768                 } else {\r
769                         toscaCsar.setArtifactChecksum("MANUAL_RECORD");\r
770                 }\r
771                 toscaCsar.setArtifactUUID(toscaResourceStructure.getToscaArtifact().getArtifactUUID());\r
772                 toscaCsar.setName(toscaResourceStructure.getToscaArtifact().getArtifactName());\r
773                 toscaCsar.setVersion(toscaResourceStructure.getToscaArtifact().getArtifactVersion());\r
774                 toscaCsar.setDescription(toscaResourceStructure.getToscaArtifact().getArtifactDescription());\r
775                 toscaCsar.setUrl(toscaResourceStructure.getToscaArtifact().getArtifactURL());\r
776                                 \r
777                 toscaResourceStructure.setCatalogToscaCsar(toscaCsar);\r
778         }\r
779         \r
780         private static void createNetworkResource(NodeTemplate networkNodeTemplate, ToscaResourceStructure toscaResourceStructure, TempNetworkHeatTemplateLookup networkHeatTemplateLookup) {\r
781                 NetworkResourceCustomization networkResourceCustomization = new NetworkResourceCustomization();\r
782                 \r
783                 NetworkResource networkResource = new NetworkResource();\r
784                 \r
785                 String providerNetwork = toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_PROVIDERNETWORK_ISPROVIDERNETWORK);\r
786                 \r
787                 if("true".equalsIgnoreCase(providerNetwork)){\r
788                         networkResource.setNeutronNetworkType("PROVIDER");\r
789                 } else {\r
790                         networkResource.setNeutronNetworkType("BASIC");\r
791                 }\r
792                 \r
793                 networkResource.setModelName(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));\r
794                 \r
795                 networkResource.setModelInvariantUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)));\r
796                 networkResource.setModelUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));\r
797                 networkResource.setModelVersion(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));\r
798                 \r
799                 networkResource.setAicVersionMax(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));\r
800                 networkResource.setAicVersionMin(networkHeatTemplateLookup.getAicVersionMin());\r
801                 networkResource.setToscaNodeType(networkNodeTemplate.getType());\r
802                 networkResource.setDescription(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));\r
803                 networkResource.setOrchestrationMode("HEAT");\r
804                 networkResource.setHeatTemplateArtifactUUID(networkHeatTemplateLookup.getHeatTemplateArtifactUuid());\r
805                         \r
806                 toscaResourceStructure.setCatalogNetworkResource(networkResource); \r
807                 \r
808                 networkResourceCustomization.setModelInstanceName(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));\r
809                 networkResourceCustomization.setModelCustomizationUuid(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));\r
810                 networkResourceCustomization.setNetworkResourceModelUuid(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));\r
811                 \r
812                                 \r
813                 networkResourceCustomization.setNetworkTechnology(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKTECHNOLOGY)).trim());\r
814                 networkResourceCustomization.setNetworkType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKTYPE)).trim());\r
815                 networkResourceCustomization.setNetworkRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKSCOPE)).trim());\r
816                 networkResourceCustomization.setNetworkScope(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKSCOPE)).trim());\r
817                         \r
818                 toscaResourceStructure.setCatalogNetworkResourceCustomization(networkResourceCustomization);\r
819                 \r
820                 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();\r
821                 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());\r
822                 serviceToResourceCustomization.setResourceModelCustomizationUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));\r
823                 serviceToResourceCustomization.setModelType("network");\r
824 \r
825                 toscaResourceStructure.setCatalogVlServiceToResourceCustomization(serviceToResourceCustomization);\r
826                 \r
827                 \r
828         }\r
829         \r
830         private static void createVFModule(Group group, NodeTemplate nodeTemplate, ToscaResourceStructure toscaResourceStructure, VfResourceStructure vfResourceStructure, IVfModuleData vfModuleData) {\r
831                 VfModule vfModule = new VfModule();\r
832                 \r
833                 Metadata vfMetadata = group.getMetadata();\r
834                 \r
835                 String vfModuleModelUUID = vfModuleData.getVfModuleModelUUID();\r
836                 \r
837                 \r
838                 if(vfModuleModelUUID != null && vfModuleModelUUID.indexOf(".") > -1){\r
839                         vfModuleModelUUID = vfModuleModelUUID.substring(0, vfModuleModelUUID.indexOf("."));\r
840                 }\r
841                                         \r
842                         \r
843                         for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()){\r
844                                 \r
845                                 String vfModelUUID = vfModuleStructure.getVfModuleMetadata().getVfModuleModelUUID();\r
846                                                                                                 \r
847                                 if(vfModelUUID != null && vfModelUUID.equalsIgnoreCase(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID))){\r
848                                         \r
849                                         List<String> artifacts = vfModuleStructure.getVfModuleMetadata().getArtifacts();\r
850                                         \r
851                                         for(String artifact: artifacts){\r
852 \r
853                                                 \r
854                                                 for (VfModuleArtifact vfModuleArtifact : vfResourceStructure.getArtifactsMapByUUID().values()) {\r
855                                                         \r
856                                                         \r
857                                                         if(artifact.equals(vfModuleArtifact.getArtifactInfo().getArtifactUUID())){\r
858                                                                 //if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_ARTIFACT)){\r
859                                                                 if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT)){\r
860                                                                         vfModule.setHeatTemplateArtifactUUId(vfModuleArtifact.getArtifactInfo().getArtifactUUID());\r
861                                                                 }\r
862                                                                 \r
863                                                                 if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_VOL)){\r
864                                                                         vfModule.setVolHeatTemplateArtifactUUId(vfModuleArtifact.getArtifactInfo().getArtifactUUID());\r
865                                                                         \r
866                                                                 }\r
867                                                         }\r
868                                                         \r
869                                                 }\r
870                                                 \r
871                                                 \r
872                                         }\r
873                                         \r
874         \r
875                                 }\r
876                                 \r
877                                 \r
878                         }\r
879                                                         \r
880                         vfModule.setModelInvariantUuid(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)));\r
881                         vfModule.setModelName(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELNAME)));\r
882                         vfModule.setModelUUID(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID)));\r
883                         vfModule.setVersion(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELVERSION)));\r
884                         vfModule.setDescription(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));\r
885                         //vfModule.setHeatTemplateArtifactUUId(toscaResourceStructure.getHeatTemplateUUID());\r
886                         //vfModule.setVolHeatTemplateArtifactUUId(toscaResourceStructure.getVolHeatTemplateUUID());\r
887                                                 \r
888                         vfModule.setVnfResourceModelUUId(toscaResourceStructure.getCatalogVnfResource().getModelUuid());                \r
889                         \r
890                         String vfModuleType = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_VFMODULETYPE);\r
891                         if(vfModuleType != null && "Base".equalsIgnoreCase(vfModuleType)){\r
892                                 vfModule.setIsBase(1);  \r
893                         }else {\r
894                                 vfModule.setIsBase(0);\r
895                         }\r
896                         \r
897 \r
898                         VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();\r
899                         vfModuleCustomization.setModelCustomizationUuid(vfModuleData.getVfModuleModelCustomizationUUID());\r
900                 \r
901                         \r
902                         vfModuleCustomization.setVfModuleModelUuid(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata,SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID));\r
903                         \r
904                         vfModuleCustomization.setHeatEnvironmentArtifactUuid(toscaResourceStructure.getEnvHeatTemplateUUID());\r
905                         \r
906 \r
907                         vfModuleCustomization.setVolEnvironmentArtifactUuid(toscaResourceStructure.getVolHeatEnvTemplateUUID());\r
908                         \r
909                         String initialCount = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT);\r
910                         if(initialCount != null && initialCount.length() > 0){\r
911                                 vfModuleCustomization.setInitialCount(Integer.valueOf(initialCount));\r
912                         }\r
913                 \r
914                         vfModuleCustomization.setInitialCount(Integer.valueOf(toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT)));\r
915                         \r
916                         String availabilityZoneCount = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT);\r
917                         if(availabilityZoneCount != null && availabilityZoneCount.length() > 0){\r
918                                 vfModuleCustomization.setAvailabilityZoneCount(Integer.valueOf(availabilityZoneCount));\r
919                         }\r
920                         \r
921 \r
922                         vfModuleCustomization.setLabel(toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_VFMODULELABEL));\r
923                         \r
924                         String maxInstances = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_MAXVFMODULEINSTANCES);\r
925                         if(maxInstances != null && maxInstances.length() > 0){\r
926                                 vfModuleCustomization.setMaxInstances(Integer.valueOf(maxInstances));\r
927                         }\r
928                         \r
929                         String minInstances = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES);\r
930                         if(minInstances != null && minInstances.length() > 0){\r
931                                 vfModuleCustomization.setMinInstances(Integer.valueOf(minInstances));\r
932                         }\r
933         \r
934                         toscaResourceStructure.setCatalogVfModule(vfModule); \r
935                 \r
936                         toscaResourceStructure.setCatalogVfModuleCustomization(vfModuleCustomization);\r
937                         \r
938         }\r
939         \r
940         private static void createVnfResourceToVfModuleCustomization(VnfResourceCustomization vnfResourceCustomization, \r
941                                                                              VfModuleCustomization vfModuleCustomization, \r
942                                                                              ToscaResourceStructure toscaResourceStructure) {\r
943                 \r
944                 VnfResCustomToVfModuleCustom vnfResCustomToVfModuleCustom = new VnfResCustomToVfModuleCustom();\r
945                 \r
946                 vnfResCustomToVfModuleCustom.setVfModuleCustModelCustomizationUuid(vfModuleCustomization.getModelCustomizationUuid());\r
947                 vnfResCustomToVfModuleCustom.setVnfResourceCustModelCustomizationUuid(vnfResourceCustomization.getModelCustomizationUuid());\r
948                 \r
949                 toscaResourceStructure.setCatalogVnfResCustomToVfModuleCustom(vnfResCustomToVfModuleCustom);\r
950                 \r
951 \r
952                         \r
953         }\r
954         \r
955         \r
956         private static void createTempNetworkHeatTemplateLookup(NetworkResource networkResource, \r
957             VfModule vfModule, \r
958             ToscaResourceStructure toscaResourceStructure) {\r
959                 \r
960                         TempNetworkHeatTemplateLookup tempNetworkHeatTemplateLookup = new TempNetworkHeatTemplateLookup();\r
961 \r
962                         tempNetworkHeatTemplateLookup.setNetworkResourceModelName(networkResource.getModelName());\r
963                         tempNetworkHeatTemplateLookup.setHeatTemplateArtifactUuid(vfModule.getHeatTemplateArtifactUUId());\r
964                         tempNetworkHeatTemplateLookup.setAicVersionMin("1");\r
965 \r
966                         toscaResourceStructure.setCatalogTempNetworkHeatTemplateLookup(tempNetworkHeatTemplateLookup);\r
967 \r
968 \r
969 \r
970         }\r
971         \r
972         private static void createVnfResource(NodeTemplate vfNodeTemplate, ToscaResourceStructure toscaResourceStructure) {\r
973                 VnfResource vnfResource = new VnfResource();\r
974                 \r
975                 \r
976                 //toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT)\r
977                 \r
978                 vnfResource.setModelInvariantUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID).trim()));\r
979                 vnfResource.setModelName(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));\r
980                 vnfResource.setModelUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));\r
981 \r
982                 vnfResource.setVersion(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION).trim()));\r
983                 vnfResource.setDescription(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION).trim()));\r
984                 vnfResource.setOrchestrationMode("HEAT");\r
985                 vnfResource.setToscaNodeType(testNull(vfNodeTemplate.getType()));\r
986                 vnfResource.setAicVersionMax(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES).trim()));\r
987                 vnfResource.setAicVersionMin(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES).trim()));\r
988                 //vnfResource.setHeatTemplateArtifactUUId(toscaResourceStructure.getHeatTemplateUUID());\r
989                 \r
990         //      vfNodeTemplate.getProperties()\r
991                 toscaResourceStructure.setCatalogVnfResource(vnfResource); \r
992                 \r
993                 VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization();\r
994                 vnfResourceCustomization.setModelCustomizationUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));\r
995                 vnfResourceCustomization.setModelInstanceName(vfNodeTemplate.getName());\r
996                 \r
997                 vnfResourceCustomization.setNfFunction(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION)).trim());\r
998                 vnfResourceCustomization.setNfNamingCode(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFCODE)).trim());\r
999                 vnfResourceCustomization.setNfRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE)).trim());\r
1000                 vnfResourceCustomization.setNfType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE)).trim());\r
1001                 \r
1002                 \r
1003                 vnfResourceCustomization.setVnfResourceModelUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));\r
1004                 vnfResourceCustomization.setAvailabilityZoneMaxCount(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT).trim()));\r
1005 \r
1006                 vnfResourceCustomization.setMaxInstances(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES).trim()));\r
1007                 vnfResourceCustomization.setMinInstances(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES).trim()));\r
1008 \r
1009 \r
1010                 \r
1011                 toscaResourceStructure.setCatalogVnfResourceCustomization(vnfResourceCustomization);\r
1012                 \r
1013                 \r
1014                 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();\r
1015                 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());\r
1016                 serviceToResourceCustomization.setResourceModelCustomizationUUID(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim());\r
1017                 serviceToResourceCustomization.setModelType("vnf");\r
1018 \r
1019                 toscaResourceStructure.setCatalogVfServiceToResourceCustomization(serviceToResourceCustomization);\r
1020                 \r
1021                 \r
1022         }\r
1023                 \r
1024         private static void createAllottedResource(NodeTemplate nodeTemplate, ToscaResourceStructure toscaResourceStructure) {\r
1025                 AllottedResource allottedResource = new AllottedResource();\r
1026                 \r
1027                 allottedResource.setModelUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));\r
1028                 allottedResource.setModelInvariantUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID).trim()));\r
1029                 allottedResource.setModelName(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));\r
1030                 allottedResource.setModelVersion(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION).trim()));\r
1031                 allottedResource.setToscaNodeType(testNull(nodeTemplate.getType()));\r
1032                 \r
1033                 toscaResourceStructure.setAllottedResource(allottedResource);\r
1034                 \r
1035                 AllottedResourceCustomization allottedResourceCustomization = new AllottedResourceCustomization();\r
1036                 allottedResourceCustomization.setModelCustomizationUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));\r
1037                 allottedResourceCustomization.setModelInstanceName(nodeTemplate.getName());\r
1038                 allottedResourceCustomization.setArModelUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));\r
1039                 \r
1040                 allottedResourceCustomization.setNfFunction(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION)).trim());\r
1041                 allottedResourceCustomization.setNfNamingCode(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFCODE)).trim());\r
1042                 allottedResourceCustomization.setNfRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE)).trim());\r
1043                 allottedResourceCustomization.setNfType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE)).trim());\r
1044                 \r
1045                 toscaResourceStructure.setCatalogAllottedResourceCustomization(allottedResourceCustomization);\r
1046                 \r
1047                 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();\r
1048                 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());\r
1049                 serviceToResourceCustomization.setResourceModelCustomizationUUID(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));\r
1050                 serviceToResourceCustomization.setModelType("allottedResource");\r
1051 \r
1052                 toscaResourceStructure.setCatalogAllottedServiceToResourceCustomization(serviceToResourceCustomization);\r
1053                 \r
1054         }\r
1055         \r
1056         private static Set<HeatTemplateParam> extractHeatTemplateParameters(String yamlFile, String artifactUUID) {\r
1057 \r
1058                 // Scan the payload downloadResult and extract the HeatTemplate\r
1059                 // parameters\r
1060                 YamlEditor yamlEditor = new YamlEditor(yamlFile.getBytes());\r
1061                 return yamlEditor.getParameterList(artifactUUID);\r
1062 \r
1063         }\r
1064         \r
1065         private static String identifyParentOfNestedTemplate(VfModuleStructure vfModuleStructure,VfModuleArtifact heatNestedArtifact) {\r
1066 \r
1067                 if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT) != null \r
1068                                 && vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0).getArtifactInfo().getRelatedArtifacts() != null) {\r
1069                         for (IArtifactInfo unknownArtifact : vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0)\r
1070                                         .getArtifactInfo().getRelatedArtifacts()) {\r
1071                                 if (heatNestedArtifact.getArtifactInfo().getArtifactUUID().equals(unknownArtifact.getArtifactUUID())) {\r
1072                                         return ASDCConfiguration.HEAT;\r
1073                                 }\r
1074 \r
1075                         }\r
1076                 } \r
1077                 \r
1078                 if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL) != null \r
1079                                 && vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getRelatedArtifacts() != null) {\r
1080                         for (IArtifactInfo unknownArtifact:vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getRelatedArtifacts()) {\r
1081                                 if (heatNestedArtifact.getArtifactInfo().getArtifactUUID().equals(unknownArtifact.getArtifactUUID())) {\r
1082                                         return ASDCConfiguration.HEAT_VOL;\r
1083                                 }\r
1084                         \r
1085                         }\r
1086                 }\r
1087                 \r
1088                 // Does not belong to anything\r
1089                 return null;\r
1090                         \r
1091         }\r
1092         \r
1093         private static String testNull(Object object) {\r
1094                 if (object == null) {\r
1095                         return "";\r
1096                 } else if ("null".equals(object)) {\r
1097                         return null;\r
1098                 }else if (object instanceof Integer) {\r
1099                         return object.toString();\r
1100                 } else if (object instanceof String) {\r
1101                         return (String)object;\r
1102                 } else {\r
1103                         return "Type not recognized";\r
1104                 }\r
1105         }\r
1106                 \r
1107         private static String createVNFName(VfResourceStructure vfResourceStructure) {\r
1108 \r
1109                 return vfResourceStructure.getNotification().getServiceName() + "/" + vfResourceStructure.getResourceInstance().getResourceInstanceName();\r
1110         }\r
1111 \r
1112         private static String createVfModuleName(VfModuleStructure vfModuleStructure) {\r
1113                 \r
1114                 return createVNFName(vfModuleStructure.getParentVfResource())+"::"+vfModuleStructure.getVfModuleMetadata().getVfModuleModelName();\r
1115         }\r
1116         \r
1117         \r
1118         private static Timestamp getCurrentTimeStamp() {\r
1119                 \r
1120                 return new Timestamp(new Date().getTime());\r
1121         }\r
1122 \r
1123 }