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