re base code
[sdc.git] / common / onap-sdc-artifact-generator-lib / onap-sdc-artifact-generator-test / src / main / java / org / onap / sdc / generator / ArtifactGenerationServiceTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.sdc.generator;
22
23 import org.junit.Assert;
24 import org.onap.sdc.generator.aai.model.*;
25 import org.onap.sdc.generator.aai.model.Service;
26 import org.onap.sdc.generator.aai.tosca.GroupDefinition;
27 import org.onap.sdc.generator.aai.tosca.NodeTemplate;
28 import org.onap.sdc.generator.aai.tosca.ToscaTemplate;
29 import org.onap.sdc.generator.aai.xml.*;
30 import org.onap.sdc.generator.aai.xml.Model;
31 import org.onap.sdc.generator.data.*;
32 import org.junit.Assert;
33
34 import javax.xml.bind.JAXBContext;
35 import javax.xml.bind.JAXBException;
36 import javax.xml.bind.Unmarshaller;
37 import java.io.ByteArrayInputStream;
38 import java.io.IOException;
39 import java.io.InputStream;
40 import java.util.*;
41 import java.util.Properties;
42 import java.util.regex.Matcher;
43 import java.util.regex.Pattern;
44
45 @SuppressWarnings("Duplicates")
46 public class ArtifactGenerationServiceTest {
47
48     public static final String RESOURCE_MAPPING_NOT_FOUND = "Resource mapping not found for ";
49     public static final String INV_UID = "-INV_UID";
50     public static final String VF_MODULE_NAMESPACE = "org.openecomp.groups.VfModule";
51     public static final String VF_MODULE_DESCRIPTION = "vf_module_description";
52     public static final String CATEGORY = "category";
53     static Map<String, String> resourcesVersion = new HashMap<>();
54     public static Properties properties = new Properties();
55
56     @SuppressWarnings("Since15")
57     public static void validateName(List<Artifact> artifactList) throws JAXBException {
58         for(Artifact artifact : artifactList){
59             String xml = new String(Base64.getDecoder().decode(artifact.getPayload()));
60             Model model = getUnmarshalledArtifactModel(xml);
61             String xmlName = "AAI-"+ model.getModelVers().getModelVer().get(0).getModelName()
62                 +"-"+model
63                 .getModelType
64                 ()+"-"+model.getModelVers().getModelVer().get(0)
65                 .getModelVersion()+".xml";
66
67             Assert.assertEquals(true,artifact.getName().equals(xmlName));
68
69         }
70     }
71
72     public static void checkArtifactName(String name){
73         Assert.assertEquals(true,name.length()<=255);
74     }
75
76     public static void checkArtifactLabel(String label){
77         Pattern pattern = Pattern.compile("[a-zA-Z0-9-+\\s]+");
78         Matcher matcher = pattern.matcher(label);
79         Assert.assertEquals(true,matcher.matches());
80     }
81
82     public static void checkArtifactDescription(String description){
83         Pattern pattern = Pattern.compile("[a-zA-Z\\s\\t\\n]+");
84         Matcher matcher = pattern.matcher(description);
85         Assert.assertEquals(true,matcher.matches());
86         Assert.assertEquals(true,description.length()<=256);
87
88     }
89
90     public static void testResourceTosca(Iterator<ToscaTemplate> itr, Map<String, Model>
91         outputArtifactMap) {
92         while(itr.hasNext()){
93             ToscaTemplate toscaTemplate = itr.next();
94             String resourceVersion= resourcesVersion.get(toscaTemplate.getMetadata().get("UUID"));
95             toscaTemplate.getMetadata().put("version", resourceVersion);
96             if("VF".equals(toscaTemplate.getMetadata().get("type")) && !("Allotted Resource".equals
97                 (toscaTemplate.getMetadata().get(CATEGORY))) ){
98                 testVfTosca(outputArtifactMap, toscaTemplate);
99             } else if("VF".equals(toscaTemplate.getMetadata().get("type")) && ("Allotted Resource".equals
100                 (toscaTemplate.getMetadata().get(CATEGORY))) ){
101                 testAllottedResourceTosca(outputArtifactMap, toscaTemplate);
102             } else if("VL".equals(toscaTemplate.getMetadata().get("type"))){
103                 testL3NetworkResourceTosca(outputArtifactMap, toscaTemplate);
104             }
105         }
106     }
107
108     public static void testVfTosca(Map<String, Model> outputArtifactMap , ToscaTemplate resourceTosca) {
109
110         if (resourceTosca != null) {
111             Resource resource = new Resource();
112             resource.populateModelIdentificationInformation(resourceTosca.getMetadata());
113             String resourceNameVersionId = resource.getModelNameVersionId();
114             Model resourceAAIModel =
115                 getAAIModelByNameVersionId(resourceNameVersionId, outputArtifactMap);
116             if (resourceAAIModel != null) {
117                 validateResourceModelMetadata(resource, resourceAAIModel);
118                 //Validate Resource instance base widget
119
120                 ModelVer modelVersion = resourceAAIModel.getModelVers().getModelVer().get(0);
121
122                 List<ModelElement> matchedVFBaseWidgetElements =
123                     getModelElementbyRelationshipValue(modelVersion.getModelElements(),
124                         Widget.getWidget(Widget.Type.VF).getId());
125                 validateMatchedModelElementsInService(matchedVFBaseWidgetElements,
126                     Widget.getWidget(Widget.Type.VF).getName());
127
128                 validateWidgetIds(matchedVFBaseWidgetElements, Widget.getWidget(Widget.Type.VF).getName(),
129                     Widget.getWidget(Widget.Type.VF).getWidgetId());
130
131                 ModelElements baseResourceWidgetModelElements =
132                     matchedVFBaseWidgetElements.get(0).getModelElements();
133                 if (resourceTosca.getTopology_template() != null) {
134                     Map<String, String> groupIdTypeStore = getGroupsTypeStore(resourceTosca);
135
136                     if (baseResourceWidgetModelElements.getModelElement().size() !=
137                         groupIdTypeStore.size()) {
138                         Assert.fail("Missing VFModule in VF model.xml");
139                     }
140
141                     for (String key : groupIdTypeStore.keySet()) {
142
143                         List<ModelElement> matchedResourceElements =
144                             getModelElementbyRelationshipValue(baseResourceWidgetModelElements, key);
145                         validateMatchedModelElementsInService(matchedResourceElements,
146                             Widget.getWidget(Widget.Type.VFMODULE).getName());
147                         Model resourceAAIVFModel = getAAIModelByNameVersionId(key, outputArtifactMap);
148                         Map<String, String> vfModuleModelMetadata =
149                             getVFModuleMetadataTosca(resourceTosca, key);
150                         Map<String, Object> vfModuleMembers = getVFModuleMembersTosca(resourceTosca, key);
151
152                         validateVFModelMetadata(vfModuleModelMetadata, resourceAAIVFModel);
153
154
155                         ModelVer modelVfVersion = resourceAAIVFModel.getModelVers().getModelVer().get(0);
156
157                         List<ModelElement> matchedVFModuleBaseWidgetElements =
158                             getModelElementbyRelationshipValue(modelVfVersion.getModelElements(),
159                                 Widget.getWidget(Widget.Type.VFMODULE).getId());
160                         validateMatchedModelElementsInService(matchedVFModuleBaseWidgetElements,
161                             Widget.getWidget(Widget.Type.VFMODULE).getName());
162                         validateWidgetIds(matchedVFModuleBaseWidgetElements, Widget.getWidget(Widget.Type.VFMODULE)
163                             .getName(), Widget.getWidget(Widget.Type.VFMODULE).getWidgetId());
164
165                         ModelElements baseResourceVFModuleWidgetModelElements =
166                             matchedVFModuleBaseWidgetElements.get(0).getModelElements();
167                         if (vfModuleMembers.containsKey("l3-network")) {
168                             //Validate l3
169                             List<ModelElement> matchedL3NetworkElements =
170                                 getModelElementbyRelationshipValue(baseResourceVFModuleWidgetModelElements,
171                                     Widget.getWidget(Widget.Type.L3_NET).getId());
172                             validateMatchedModelElementsInService(matchedL3NetworkElements,
173                                 Widget.getWidget(Widget.Type.L3_NET).getName());
174                             validateWidgetIds(matchedL3NetworkElements, Widget.getWidget(Widget.Type.L3_NET)
175                                 .getName(), Widget.getWidget(Widget.Type.L3_NET).getWidgetId());
176                         }
177                         if (vfModuleMembers.containsKey("vserver")) {
178                             //Validate vserver
179                             List<ModelElement> matchedVserverElements =
180                                 getModelElementbyRelationshipValue(baseResourceVFModuleWidgetModelElements,
181                                     Widget.getWidget(Widget.Type.VSERVER).getId());
182                             validateMatchedModelElementsInService(matchedVserverElements,
183                                 Widget.getWidget(Widget.Type.VSERVER).getName());
184                             ModelElements vserverWidgetModelElements =
185                                 matchedVserverElements.get(0).getModelElements();
186
187                             validateWidgetIds(matchedVserverElements, Widget.getWidget(Widget.Type.VSERVER)
188                                 .getName(), Widget.getWidget(Widget.Type.VSERVER).getWidgetId());
189
190
191                             //Validate vserver->vfc
192                             List<ModelElement> matchedVfcElements =
193                                 getModelElementbyRelationshipValue(vserverWidgetModelElements,
194                                     Widget.getWidget(Widget.Type.VFC).getId());
195                             validateMatchedModelElementsInService(matchedVfcElements,
196                                 Widget.getWidget(Widget.Type.VFC).getName());
197                             validateWidgetIds(matchedVfcElements, Widget.getWidget(Widget.Type.VFC).getName(),
198                                 Widget.getWidget(Widget.Type.VFC).getWidgetId());
199
200                             //Validate vserver->Image
201                             List<ModelElement> matchedImageElements =
202                                 getModelElementbyRelationshipValue(vserverWidgetModelElements,
203                                     Widget.getWidget(Widget.Type.IMAGE).getId());
204                             validateMatchedModelElementsInService(matchedImageElements,
205                                 Widget.getWidget(Widget.Type.IMAGE).getName());
206                             validateWidgetIds(matchedImageElements, Widget.getWidget(Widget.Type.IMAGE)
207                                 .getName(), Widget.getWidget(Widget.Type.IMAGE).getWidgetId());
208
209
210                             //Validate vserver->Flavor
211                             List<ModelElement> matchedFlavorElements =
212                                 getModelElementbyRelationshipValue(vserverWidgetModelElements,
213                                     Widget.getWidget(Widget.Type.FLAVOR).getId());
214                             validateMatchedModelElementsInService(matchedFlavorElements,
215                                 Widget.getWidget(Widget.Type.FLAVOR).getName());
216                             validateWidgetIds(matchedFlavorElements, Widget.getWidget(Widget.Type.FLAVOR).getName(),
217                                 Widget.getWidget(Widget.Type.FLAVOR).getWidgetId());
218
219                             //Validate vserver->Tenant
220                             List<ModelElement> matchedTenantElements =
221                                 getModelElementbyRelationshipValue(vserverWidgetModelElements,
222                                     Widget.getWidget(Widget.Type.TENANT).getId());
223                             validateMatchedModelElementsInService(matchedTenantElements,
224                                 Widget.getWidget(Widget.Type.TENANT).getName());
225                             validateWidgetIds(matchedTenantElements, Widget.getWidget(Widget.Type.TENANT).getName(),
226                                 Widget.getWidget(Widget.Type.TENANT).getWidgetId());
227
228                             //Validate vserver->l-interface
229                             if (vfModuleMembers.containsKey("l-interface")) {
230                                 List<ModelElement> matchedLinterfaceElements =
231                                     getModelElementbyRelationshipValue(vserverWidgetModelElements,
232                                         Widget.getWidget(Widget.Type.LINT).getId());
233                                 validateMatchedModelElementsInService(matchedLinterfaceElements,
234                                     Widget.getWidget(Widget.Type.LINT).getName());
235                                 validateWidgetIds(matchedLinterfaceElements, Widget.getWidget(Widget.Type.LINT).getName(),
236                                     Widget.getWidget(Widget.Type.LINT).getWidgetId());
237                             }
238                             //Validate vserver->volume
239                             if (vfModuleMembers.containsKey("volume")) {
240                                 List<ModelElement> matchedVolumeElements =
241                                     getModelElementbyRelationshipValue(vserverWidgetModelElements,
242                                         Widget.getWidget(Widget.Type.VOLUME).getId());
243                                 validateMatchedModelElementsInService(matchedVolumeElements,
244                                     Widget.getWidget(Widget.Type.VOLUME).getName());
245                                 validateWidgetIds(matchedVolumeElements, Widget.getWidget(Widget.Type.VOLUME).getName(),
246                                     Widget.getWidget(Widget.Type.VOLUME).getWidgetId());
247                             }
248                         }
249                     }
250                 }
251             } else {
252                 System.out.println(RESOURCE_MAPPING_NOT_FOUND + resourceNameVersionId);
253             }
254         }
255     }
256
257     public static void testAllottedResourceTosca(Map<String, Model> outputArtifactMap , ToscaTemplate
258         resourceTosca) {
259
260         if (resourceTosca != null) {
261             Resource resource = new Resource();
262             resource.populateModelIdentificationInformation(resourceTosca.getMetadata());
263             String resourceNameVersionId = resource.getModelNameVersionId();
264             Model resourceAAIModel =
265                 getAAIModelByNameVersionId(resourceNameVersionId, outputArtifactMap);
266             if (resourceAAIModel != null) {
267                 validateResourceModelMetadata(resource, resourceAAIModel);
268                 //Validate Resource instance base widget
269
270                 ModelVer modelVersion = resourceAAIModel.getModelVers().getModelVer().get(0);
271
272                 List<ModelElement> matchedVFBaseWidgetElements =
273                     getModelElementbyRelationshipValue(modelVersion.getModelElements(),
274                         Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getId());
275                 validateMatchedModelElementsInService(matchedVFBaseWidgetElements,
276                     Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getName());
277
278                 validateWidgetIds(matchedVFBaseWidgetElements, Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getName(),
279                     Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getWidgetId());
280
281                 validateWidgetIds(matchedVFBaseWidgetElements, Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getName(),
282                     Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getWidgetId());
283
284                 Map<String, Object> providingServiceDetails = getProvidingServiceDetails(resourceTosca);
285
286                 ModelElements containedModelElements = modelVersion.getModelElements().getModelElement().
287                     get(0).getModelElements();
288
289                 Assert.assertEquals(containedModelElements.getModelElement().get(0).getRelationshipList()
290                      .getRelationship().get(0).getRelationshipData().get(0).getRelationshipValue(),
291                         providingServiceDetails.get("providing_service_uuid"));
292
293                 Assert.assertEquals(containedModelElements.getModelElement().get(0).getRelationshipList()
294                     .getRelationship().get(0).getRelationshipData().get(1).getRelationshipValue(),
295                         providingServiceDetails.get("providing_service_invariant_uuid"));
296
297
298                 if("Allotted Resource".equals(resourceTosca.getMetadata().get(CATEGORY)) &&
299                     "Tunnel XConnect".equals(resourceTosca.getMetadata().get("subcategory"))) {
300
301                     List<ModelElement> matchedTunnelXConnectWidgetElements =
302                         getModelElementbyRelationshipValue(containedModelElements,
303                             Widget.getWidget(Widget.Type.TUNNEL_XCONNECT).getId());
304                     validateMatchedModelElementsInService(matchedTunnelXConnectWidgetElements,
305                         Widget.getWidget(Widget.Type.TUNNEL_XCONNECT).getName());
306
307                     validateWidgetIds(matchedTunnelXConnectWidgetElements, Widget.getWidget(Widget.Type.TUNNEL_XCONNECT).getName(),
308                         Widget.getWidget(Widget.Type.TUNNEL_XCONNECT).getWidgetId());
309                 }
310
311             }else {
312                 System.out.println(RESOURCE_MAPPING_NOT_FOUND + resourceNameVersionId);
313             }
314         }
315     }
316
317     public static Map<String, Object> getProvidingServiceDetails(ToscaTemplate resourceTemplate) {
318         Set<String> keys = resourceTemplate.getTopology_template().getNode_templates().keySet();
319
320         Map<String, Object> nodeProperties =null;
321         for(String key : keys) {
322             NodeTemplate node = resourceTemplate.getTopology_template().getNode_templates().get(key);
323             if(node.getType().contains("org.openecomp.resource.vfc") &&
324                 node.getMetadata().get(CATEGORY).equals("Allotted Resource")) {
325                 nodeProperties = node.getProperties();
326             }
327         }
328
329         return nodeProperties;
330     }
331
332     public static void testL3NetworkResourceTosca(Map<String, Model> outputArtifactMap , ToscaTemplate
333         resourceTosca) {
334
335         if (resourceTosca != null) {
336             Resource resource = new Resource();
337             resource.populateModelIdentificationInformation(resourceTosca.getMetadata());
338             String resourceNameVersionId = resource.getModelNameVersionId();
339             Model resourceAAIModel =
340                 getAAIModelByNameVersionId(resourceNameVersionId, outputArtifactMap);
341             if (resourceAAIModel != null) {
342                 validateResourceModelMetadata(resource, resourceAAIModel);
343                 //Validate Resource instance base widget
344
345                 ModelVer modelVersion = resourceAAIModel.getModelVers().getModelVer().get(0);
346
347                 List<ModelElement> matchedVFBaseWidgetElements =
348                     getModelElementbyRelationshipValue(modelVersion.getModelElements(),
349                         Widget.getWidget(Widget.Type.L3_NET).getId());
350                 validateMatchedModelElementsInService(matchedVFBaseWidgetElements,
351                     Widget.getWidget(Widget.Type.L3_NET).getName());
352
353                 validateWidgetIds(matchedVFBaseWidgetElements, Widget.getWidget(Widget.Type.L3_NET).getName(),
354                     Widget.getWidget(Widget.Type.L3_NET).getWidgetId());
355
356             }else {
357                 System.out.println(RESOURCE_MAPPING_NOT_FOUND + resourceNameVersionId);
358             }
359         }
360     }
361
362     public static void testServiceTosca(Map<String, Model> outputArtifactMap,List<ToscaTemplate>
363         toscas) {
364
365         ToscaTemplate serviceTosca = getServiceTosca(toscas);
366         if (serviceTosca == null) {
367             Assert.fail("Service Tosca not found");
368         }
369         serviceTosca.getMetadata().put("version", SampleJUnitTest.additionalParams.get(
370             AdditionalParams
371             .ServiceVersion.getName()));
372         Service service = new Service();
373         service.populateModelIdentificationInformation(serviceTosca.getMetadata());
374         String serviceNameVersionId = service.getModelNameVersionId();
375         Model serviceAAIModel = getAAIModelByNameVersionId(serviceNameVersionId, outputArtifactMap);
376         validateServiceModelMetadata(service, serviceAAIModel);
377         //Validate Service instance base widget
378         ModelVer modelVersion =  serviceAAIModel.getModelVers().getModelVer().get(0);
379
380         List<ModelElement> matchedServiceBaseWidgetElements =
381             getModelElementbyRelationshipValue( modelVersion.getModelElements(),
382                 Widget.getWidget(Widget.Type.SERVICE).getId());
383         validateMatchedModelElementsInService(matchedServiceBaseWidgetElements,
384             Widget.getWidget(Widget.Type.SERVICE).getName());
385
386         validateWidgetIds(matchedServiceBaseWidgetElements, Widget.getWidget(Widget.Type.SERVICE).getName(),
387             Widget.getWidget(Widget.Type.SERVICE).getWidgetId());
388
389         ModelElements baseServiceWidgetModelElements =
390             matchedServiceBaseWidgetElements.get(0).getModelElements();
391
392
393         Map<String, String> nodeTemplateIdTypeStore = getNodeTemplateTypeStore(serviceTosca);
394         if (nodeTemplateIdTypeStore != null) {
395             for (Map.Entry<String, String> entry : nodeTemplateIdTypeStore.entrySet()) {
396                 if (entry.getValue().contains("org.openecomp.resource.vf")) {
397                     List<ModelElement> matchedResourceElements =
398                         getModelElementbyRelationshipValue(baseServiceWidgetModelElements, entry.getKey());
399                     if (entry.getValue().contains("org.openecomp.resource.vf.allottedResource")){
400                         validateMatchedModelElementsInService(matchedResourceElements,
401                             Widget.getWidget(Widget.Type.ALLOTTED_RESOURCE).getName());
402                     }else {
403                         validateMatchedModelElementsInService(matchedResourceElements,
404                             Widget.getWidget(Widget.Type.VF).getName());
405                     }
406
407                     //Validate uuid and invariantuuid are populated in model-ver.model-version-id and model.model-invariant-id
408                     Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList()
409                         .getRelationship().get(0)
410                         .getRelationshipData().get(0).getRelationshipValue(),entry.getKey());
411
412                     Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList().getRelationship().get(0)
413                         .getRelationshipData().get(1).getRelationshipValue(), nodeTemplateIdTypeStore
414                         .get(entry.getKey()+ INV_UID));
415                 } else if(entry.getValue().contains("org.openecomp.resource.vl")){
416                     //validate l3-network in service tosca
417                     List<ModelElement> matchedResourceElements =
418                         getModelElementbyRelationshipValue(baseServiceWidgetModelElements, entry.getKey());
419                     validateMatchedModelElementsInService(matchedResourceElements,
420                         Widget.getWidget(Widget.Type.L3_NET).getName());
421                     //Validate uuid and invariantuuid are populated in model-ver.model-version-id and model.model-invariant-id
422                     Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList()
423                         .getRelationship().get(0)
424                         .getRelationshipData().get(0).getRelationshipValue(),entry.getKey());
425
426                     Assert.assertEquals(matchedResourceElements.get(0).getRelationshipList().getRelationship().get(0)
427                         .getRelationshipData().get(1).getRelationshipValue(), nodeTemplateIdTypeStore
428                         .get(entry.getKey() + INV_UID));
429                 }
430             }
431         }
432     }
433
434     private static void validateWidgetIds(List<ModelElement> matchedServiceBaseWidgetElements,
435                                           String widgetName, String widgetInvUuId) {
436         Assert.assertEquals(matchedServiceBaseWidgetElements.get(0).getRelationshipList().getRelationship().get(0)
437             .getRelationshipData().get(0).getRelationshipValue(), properties.getProperty(
438             ArtifactType.AAI.name()
439             + ".model-version-id."+ widgetName));
440
441         Assert.assertEquals(matchedServiceBaseWidgetElements.get(0).getRelationshipList().getRelationship().get(0)
442             .getRelationshipData().get(1).getRelationshipValue(), widgetInvUuId);
443     }
444
445
446
447     private static void validateMatchedModelElementsInService(List<ModelElement> matchedModelElements, String modelType) {
448         if (matchedModelElements.isEmpty()) {
449             Assert.fail(modelType + " not present ");
450         }
451         if (matchedModelElements.size() > 1) {
452             Assert.fail("More than one " + modelType + " present ");
453         }
454     }
455
456     private static Map<String, String> getNodeTemplateTypeStore(ToscaTemplate toscaTemplate) {
457         if (toscaTemplate.getTopology_template() != null) {
458             Map<String, NodeTemplate> nodeTemplateMap =
459                 toscaTemplate.getTopology_template().getNode_templates();
460             Map<String, String> nodeTemplateIdTypeStore = new LinkedHashMap<>();
461             if (nodeTemplateMap != null) {
462                 for (Map.Entry<String, NodeTemplate> e : nodeTemplateMap.entrySet()) {
463                     String uuid = e.getValue().getMetadata().get("resourceUUID");
464                     if (GeneratorUtil.isEmpty(uuid)) {
465                         uuid = e.getValue().getMetadata().get("UUID");
466                         if (GeneratorUtil.isEmpty(uuid)) {
467                             Assert.fail("UUID Not found");
468                         }
469                     }
470                     if(e.getValue().getType().contains("org.openecomp.resource.vf.")&& (e.getValue()
471                         .getMetadata().get(CATEGORY).equals("Allotted Resource")))
472                     {
473                         e.getValue().setType("org.openecomp.resource.vf.allottedResource");
474                     }
475                     nodeTemplateIdTypeStore.put(uuid, e.getValue().getType());
476                     resourcesVersion.put(uuid,e.getValue().getMetadata().get
477                         ("version"));
478                     //Populate invraintUuId for V9
479                     String invUuId = e.getValue().getMetadata().get("invariantUUID");
480                     nodeTemplateIdTypeStore.put(uuid + INV_UID , invUuId);
481                 }
482             }
483             return nodeTemplateIdTypeStore;
484         } else {
485             return null;
486         }
487     }
488
489
490     private static Map<String, String> getGroupsTypeStore(ToscaTemplate toscaTemplate) {
491         if(toscaTemplate.getTopology_template() !=null) {
492             Map<String, GroupDefinition> groupDefinitionMap = toscaTemplate.getTopology_template().getGroups();
493             Map<String, String> groupDefinitionIdTypeStore = new LinkedHashMap<>();
494             if (groupDefinitionMap != null) {
495                 for (Map.Entry<String, GroupDefinition> e : groupDefinitionMap.entrySet()) {
496                     if (e.getValue().getType().contains(VF_MODULE_NAMESPACE)) {
497                         String uuid = e.getValue().getMetadata().get("vfModuleModelUUID");
498                         if (GeneratorUtil.isEmpty(uuid)) {
499                             uuid = e.getValue().getMetadata().get("UUID");
500                             if (GeneratorUtil.isEmpty(uuid))
501                                 Assert.fail("UUID Not found");
502                         }
503                         groupDefinitionIdTypeStore.put(uuid, e.getValue().getType());
504                     }
505                 }
506             }
507             return groupDefinitionIdTypeStore;
508         }
509         else {
510             return null;
511         }
512     }
513
514     private static void validateServiceModelMetadata(Service serviceToscaModel, Model generatedAAIModel) {
515         Assert.assertEquals(serviceToscaModel.getModelNameVersionId(), generatedAAIModel
516             .getModelVers().getModelVer().get(0).getModelVersionId());
517         Assert.assertEquals(serviceToscaModel.getModelId(), generatedAAIModel.getModelInvariantId());
518         Assert.assertEquals(serviceToscaModel.getModelName(), generatedAAIModel.getModelVers()
519             .getModelVer().get(0).getModelName());
520         Assert.assertEquals(serviceToscaModel.getModelVersion(), generatedAAIModel.getModelVers()
521             .getModelVer().get(0).getModelVersion());
522         Assert.assertEquals(serviceToscaModel.getModelDescription(), generatedAAIModel.getModelVers()
523             .getModelVer().get(0).getModelDescription());
524     }
525
526     private static void validateResourceModelMetadata(Resource resouerceToscaModel, Model generatedAAIModel) {
527         Assert.assertEquals(resouerceToscaModel.getModelNameVersionId(), generatedAAIModel
528             .getModelVers().getModelVer().get(0).getModelVersionId());
529         Assert.assertEquals(resouerceToscaModel.getModelId(), generatedAAIModel.getModelInvariantId());
530         Assert.assertEquals(resouerceToscaModel.getModelName(), generatedAAIModel.getModelVers()
531             .getModelVer().get(0).getModelName());
532         Assert.assertEquals(resouerceToscaModel.getModelVersion(), generatedAAIModel.getModelVers()
533             .getModelVer().get(0).getModelVersion());
534         Assert.assertEquals(resouerceToscaModel.getModelDescription(), generatedAAIModel.getModelVers()
535             .getModelVer().get(0).getModelDescription());
536     }
537
538     private static void validateVFModelMetadata(Map<String, String> vfModuleModelMetadata, Model generatedAAIModel) {
539         Assert.assertEquals(vfModuleModelMetadata.get("vfModuleModelUUID"),  generatedAAIModel
540             .getModelVers().getModelVer().get(0).getModelVersionId());
541         Assert.assertEquals(vfModuleModelMetadata.get("vfModuleModelInvariantUUID"), generatedAAIModel.getModelInvariantId());
542         Assert.assertEquals(vfModuleModelMetadata.get("vfModuleModelName"), generatedAAIModel.getModelVers()
543             .getModelVer().get(0).getModelName());
544         Assert.assertEquals(vfModuleModelMetadata.get("vfModuleModelVersion"), generatedAAIModel.getModelVers()
545             .getModelVer().get(0).getModelVersion());
546         Assert.assertEquals(vfModuleModelMetadata.get(VF_MODULE_DESCRIPTION), generatedAAIModel.getModelVers()
547             .getModelVer().get(0).getModelDescription());
548
549     }
550
551     private static Model getAAIModelByNameVersionId(String nameVersionId,
552                                                     Map<String, Model> outputArtifactMap) {
553         return outputArtifactMap.get(nameVersionId);
554     }
555
556     private static List<ModelElement> getModelElementbyRelationshipValue(ModelElements modelElements,
557                                                                          String relationshipValue) {
558         List<ModelElement> matchedModelElements = new ArrayList<>();
559         if (modelElements != null) {
560             List<ModelElement> modelElementList = modelElements.getModelElement();
561             for (ModelElement element : modelElementList) {
562                 List<Relationship> relationshipList = element.getRelationshipList().getRelationship();
563                 for (Relationship r : relationshipList) {
564                     List<RelationshipData> relationshipDataList = r.getRelationshipData();
565                     for (RelationshipData relationshipData : relationshipDataList) {
566                         if (relationshipData.getRelationshipValue().equals(relationshipValue))
567                             matchedModelElements.add(element);
568                     }
569                 }
570             }
571         }
572         return matchedModelElements;
573     }
574
575     public static void populateAAIGeneratedModelStore(Map<String, Model> outputArtifactMap,List<Artifact> resultData) throws JAXBException {
576         for (Artifact outputArtifact : resultData) {
577             if (outputArtifact.getType().equals(ArtifactType.MODEL_INVENTORY_PROFILE.name())) {
578                 byte[] decodedPayload = GeneratorUtil.decoder(outputArtifact.getPayload());
579                 Model aaiModel = getUnmarshalledArtifactModel(new String(decodedPayload));
580                 outputArtifactMap.put(aaiModel.getModelVers().getModelVer().get(0).getModelVersionId(), aaiModel);
581             }
582         }
583     }
584
585     private static Model getUnmarshalledArtifactModel(String aaiModel) throws JAXBException {
586         JAXBContext jaxbContext;
587
588         jaxbContext = JAXBContext.newInstance(Model.class);
589         Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
590
591         try (InputStream aaiModelStream = new ByteArrayInputStream(aaiModel.getBytes())) {
592             return (Model) unmarshaller.unmarshal(aaiModelStream);
593         } catch (IOException ignored) { /* ignore */ }
594         throw new RuntimeException("could not resolve artifact model");
595     }
596
597     /**
598      * Identify the service tosca artifact from the list of translated tosca inputs
599      *
600      * @param input List of translated {@link ToscaTemplate tosca} object models
601      * @return Identified service {@link ToscaTemplate tosca}
602      */
603     private static ToscaTemplate getServiceTosca(List<ToscaTemplate> input) {
604         Iterator<ToscaTemplate> iter = input.iterator();
605         while (iter.hasNext()) {
606             ToscaTemplate tosca = iter.next();
607             if (tosca.isService()) {
608                 iter.remove();
609                 return tosca;
610             }
611         }
612         return null;
613     }
614
615
616     private static Map<String, String> getVFModuleMetadataTosca(ToscaTemplate toscaTemplate, String vfModuleModelUUID) {
617         Map<String, GroupDefinition> groupDefinitionMap = toscaTemplate.getTopology_template().getGroups();
618         Map<String, String> vfModuleModelMetadata = new LinkedHashMap<>();
619         for (Map.Entry<String, GroupDefinition> e : groupDefinitionMap.entrySet()) {
620             if (e.getValue().getType().contains(VF_MODULE_NAMESPACE)) {
621                 String uuid = e.getValue().getMetadata().get("vfModuleModelUUID");
622                 if (uuid == vfModuleModelUUID) {
623                     vfModuleModelMetadata = e.getValue().getMetadata();
624                     vfModuleModelMetadata.put(VF_MODULE_DESCRIPTION, (String) e.getValue().getProperties().get(VF_MODULE_DESCRIPTION));
625                 }
626             }
627         }
628         return vfModuleModelMetadata;
629     }
630
631     private static Map<String, Object> getVFModuleMembersTosca(ToscaTemplate toscaTemplate, String vfModuleModelUUID) {
632         Map<String, GroupDefinition> groupDefinitionMap = toscaTemplate.getTopology_template().getGroups();
633         Map<String, NodeTemplate> nodeTemplateMaps = toscaTemplate.getTopology_template().getNode_templates();
634         Map<String, Object> vfModuleMembers = new LinkedHashMap<>();
635         List<String> vfModuleModelMetadata;
636         for (Map.Entry<String, GroupDefinition> e : groupDefinitionMap.entrySet()) {
637             if (e.getValue().getType().contains(VF_MODULE_NAMESPACE)) {
638                 String uuid = e.getValue().getMetadata().get("vfModuleModelUUID");
639                 if (uuid == vfModuleModelUUID) {
640                     vfModuleModelMetadata = e.getValue().getMembers();
641                     Iterator itr = vfModuleModelMetadata.iterator();
642                     while (itr.hasNext()) {
643                         Object obj= itr.next();
644                         NodeTemplate nodeTemplate = nodeTemplateMaps.get(obj);
645                         String nodetype = null;
646                         if (nodeTemplate != null)
647                             nodetype = nodeTemplate.getType();
648                         if (nodetype != null) {
649                             String widgetType = membersType(nodetype);
650                             if (widgetType != null)
651                                 vfModuleMembers.put(widgetType, obj);
652                         }
653                     }
654
655                 }
656             }
657         }
658
659         return vfModuleMembers;
660     }
661
662
663     private static String membersType(String toscaType) {
664         String modelToBeReturned = null;
665         while (toscaType != null && toscaType.lastIndexOf('.') != -1 && modelToBeReturned == null) {
666
667             switch (toscaType) {
668
669                 case "org.openecomp.resource.vfc":
670                     modelToBeReturned = "vserver";
671                     break;
672                 case "org.openecomp.resource.cp":
673                 case "org.openecomp.cp":
674                     modelToBeReturned = "l-interface";
675                     break;
676                 case "org.openecomp.resource.vl":
677                     modelToBeReturned = "l3-network";
678                     break;
679                 case "org.openecomp.resource.vf":
680                     modelToBeReturned = "generic-vnf";
681                     break;
682                 case VF_MODULE_NAMESPACE:
683                     modelToBeReturned = "vf-module";
684                     break;
685                 case "org.openecomp.resource.vfc.nodes.heat.cinder":
686                     modelToBeReturned = "volume";
687                     break;
688                 default:
689                     modelToBeReturned = null;
690                     break;
691             }
692
693             toscaType = toscaType.substring(0, toscaType.lastIndexOf("."));
694         }
695         return modelToBeReturned;
696     }
697 }