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