2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.translator;
23 import org.apache.commons.collections4.CollectionUtils;
24 import org.apache.commons.lang3.tuple.Pair;
25 import org.junit.Assert;
26 import org.openecomp.core.translator.api.HeatToToscaTranslator;
27 import org.openecomp.core.utilities.file.FileUtils;
28 import org.openecomp.sdc.common.utils.SdcCommon;
29 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
30 import org.openecomp.sdc.tosca.datatypes.model.GroupDefinition;
31 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
32 import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
33 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
34 import org.openecomp.sdc.tosca.services.DataModelUtil;
35 import org.openecomp.sdc.tosca.services.yamlutil.ToscaExtensionYamlUtil;
36 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.*;
39 import java.io.FileInputStream;
40 import java.io.FileNotFoundException;
41 import java.io.IOException;
42 import java.io.InputStream;
44 import java.nio.file.NotDirectoryException;
47 public class TestUtils {
48 private static final String MANIFEST_NAME = SdcCommon.MANIFEST_NAME;
49 private static String zipFilename = "VSP.zip";
50 private static String validationFilename = "validationOutput.json";
56 public static void addFilesToTranslator(HeatToToscaTranslator heatToToscaTranslator, String path)
58 File manifestFile = new File(path);
59 File[] files = manifestFile.listFiles();
62 Assert.assertNotNull("manifest files is empty", files);
64 for (File file : files) {
66 try (FileInputStream fis = new FileInputStream(file)) {
68 fileContent = FileUtils.toByteArray(fis);
70 if (file.getName().equals(MANIFEST_NAME)) {
71 heatToToscaTranslator.addManifest(MANIFEST_NAME, fileContent);
73 if (!file.getName().equals(zipFilename) && (!file.getName().equals(validationFilename))) {
74 heatToToscaTranslator.addFile(file.getName(), fileContent);
82 * Get tosca service template models for the files in a directory
83 * @param baseDirPath base directory for the tosca file
84 * @return Map of <ServiceTemplateFilename, ServiceTemplate> for the files in this directory
86 public static Map<String, ServiceTemplate> getServiceTemplates(String baseDirPath){
87 Map<String, ServiceTemplate> serviceTemplateMap = new HashMap<>();
88 ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
89 baseDirPath = "."+baseDirPath+"/";
91 String[] fileList = {};
92 URL filesDirUrl = TestUtils.class.getClassLoader().getResource(baseDirPath);
93 if (filesDirUrl != null && filesDirUrl.getProtocol().equals("file")) {
94 fileList = new File(filesDirUrl.toURI()).list();
96 Assert.fail("Invalid expected output files directory");
98 for (int i = 0; i < fileList.length; i++) {
99 InputStream serviceTemplateInputStream = FileUtils.getFileInputStream(TestUtils.class
100 .getClassLoader().getResource(baseDirPath + fileList[i]));
101 ServiceTemplate serviceTemplate = toscaExtensionYamlUtil.yamlToObject
102 (serviceTemplateInputStream, ServiceTemplate.class);
103 serviceTemplateMap.put(fileList[i], serviceTemplate);
105 } catch (Exception e) {
106 Assert.fail(e.getMessage());
108 return serviceTemplateMap;
112 * Get tosca service template models
113 * @param expectedResultMap Map of filename and payload of the expected result files
114 * @return Map of <ServiceTemplateFilename, ServiceTemplate> for the files in this directory
116 public static Map<String, ServiceTemplate> getServiceTemplates(Map<String, byte[]>
118 Map<String, ServiceTemplate> serviceTemplateMap = new HashMap<>();
119 ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
120 for(String fileName : expectedResultMap.keySet()){
121 ServiceTemplate serviceTemplate = toscaExtensionYamlUtil.yamlToObject
122 (new String(expectedResultMap.get(fileName)), ServiceTemplate.class);
123 serviceTemplateMap.put(fileName, serviceTemplate);
125 return serviceTemplateMap;
129 public static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
130 String globalServiceTemplatesPath,
131 String entryDefinitionServiceTemplate)
133 ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
134 Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
135 if (entryDefinitionServiceTemplate == null) {
136 entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
139 serviceTemplates = getServiceTemplates(serviceTemplatesPath);
140 if (globalServiceTemplatesPath != null) {
141 serviceTemplates = getServiceTemplates(globalServiceTemplatesPath);
144 return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
147 public static ServiceTemplate loadServiceTemplate(String serviceTemplatePath)
149 ServiceTemplate serviceTemplateFromYaml = new ServiceTemplate();
150 ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
151 URL urlFile = TestUtils.class.getResource(serviceTemplatePath);
152 if (urlFile != null) {
153 File pathFile = new File(urlFile.getFile());
154 File[] files = pathFile.listFiles();
155 for (File file : files) {
156 try (InputStream yamlFile = new FileInputStream(file)) {
157 serviceTemplateFromYaml =
158 toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
159 createConcreteRequirementObjectsInServiceTemplate(serviceTemplateFromYaml, toscaExtensionYamlUtil);
162 } catch (IOException ignore) {
164 } catch (FileNotFoundException e) {
166 } catch (IOException e) {
171 throw new NotDirectoryException(serviceTemplatePath);
173 return serviceTemplateFromYaml;
177 public static void loadServiceTemplates(String serviceTemplatesPath,
178 ToscaExtensionYamlUtil toscaExtensionYamlUtil,
179 Map<String, ServiceTemplate> serviceTemplates)
181 URL urlFile = TestUtils.class.getResource(serviceTemplatesPath);
182 if (urlFile != null) {
183 File pathFile = new File(urlFile.getFile());
184 File[] files = pathFile.listFiles();
186 addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
188 throw new NotDirectoryException(serviceTemplatesPath);
191 throw new NotDirectoryException(serviceTemplatesPath);
195 private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
197 ToscaExtensionYamlUtil toscaExtensionYamlUtil)
199 for (File file : files) {
200 try (InputStream yamlFile = new FileInputStream(file)) {
201 ServiceTemplate serviceTemplateFromYaml =
202 toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
203 createConcreteRequirementObjectsInServiceTemplate(serviceTemplateFromYaml, toscaExtensionYamlUtil);
204 serviceTemplates.put(file.getName(), serviceTemplateFromYaml);
207 } catch (IOException ignore) {
209 } catch (FileNotFoundException e) {
211 } catch (IOException e) {
217 private static void createConcreteRequirementObjectsInServiceTemplate(ServiceTemplate
218 serviceTemplateFromYaml,
219 ToscaExtensionYamlUtil
220 toscaExtensionYamlUtil) {
222 if (serviceTemplateFromYaml == null
223 || serviceTemplateFromYaml.getTopology_template() == null
224 || serviceTemplateFromYaml.getTopology_template().getNode_templates() == null) {
228 //Creating concrete objects
229 Map<String, NodeTemplate> nodeTemplates =
230 serviceTemplateFromYaml.getTopology_template().getNode_templates();
231 for (Map.Entry<String, NodeTemplate> entry : nodeTemplates.entrySet()) {
232 NodeTemplate nodeTemplate = entry.getValue();
233 List<Map<String, RequirementAssignment>> requirements = nodeTemplate.getRequirements();
234 List<Map<String, RequirementAssignment>> concreteRequirementList = new ArrayList<>();
235 if (requirements != null) {
236 ListIterator<Map<String, RequirementAssignment>> reqListIterator = requirements
238 while (reqListIterator.hasNext()){
239 Map<String, RequirementAssignment> requirement = reqListIterator.next();
240 Map<String, RequirementAssignment> concreteRequirement = new HashMap<>();
241 for (Map.Entry<String, RequirementAssignment> reqEntry : requirement.entrySet()) {
242 RequirementAssignment requirementAssignment = (toscaExtensionYamlUtil
243 .yamlToObject(toscaExtensionYamlUtil.objectToYaml(reqEntry.getValue()),
244 RequirementAssignment.class));
245 concreteRequirement.put(reqEntry.getKey(), requirementAssignment);
246 concreteRequirementList.add(concreteRequirement);
247 reqListIterator.remove();
250 requirements.clear();
251 requirements.addAll(concreteRequirementList);
252 nodeTemplate.setRequirements(requirements);
254 System.out.println();
255 //toscaExtensionYamlUtil.yamlToObject(nodeTemplate, NodeTemplate.class);
259 public static void updateMultiplePortConsolidationDatas(String serviceTemplateName,
260 List<String> portNodeTemplateIds,
261 List<List<String>> nodesConnectedInIds,
262 List<List<String>> nodesConnectedOutIds,
263 List<List<String>> groupIds,
264 List<List<String>> getAttrInIds,
265 List<List<Pair<String, GetAttrFuncData>>> getAttrOutFuncDataList,
266 ConsolidationData consolidationData){
267 for(int i = 0; i < portNodeTemplateIds.size(); i++){
268 updatePortConsolidationData(serviceTemplateName, portNodeTemplateIds.get(i),
269 nodesConnectedInIds.get(i), nodesConnectedOutIds.get(i),
270 groupIds.get(i), getAttrInIds.get(i),getAttrOutFuncDataList.get(i), consolidationData);
274 public static void updatePortConsolidationData(String serviceTemplateFileName,
275 String portNodeTemplateId,
276 List<String> nodesConnectedInIds,
277 List<String> nodesConnectedOutIds,
278 List<String> groupIds, List<String> getAttrInIds,
279 List<Pair<String, GetAttrFuncData>> getAttrOutFuncDataList,
280 ConsolidationData consolidationData) {
282 PortTemplateConsolidationData portTemplateConsolidationData =
283 createPortTemplateConsolidationData(portNodeTemplateId);
285 updateRelationsForEntityConsolidationData(portNodeTemplateId, nodesConnectedInIds,
286 nodesConnectedOutIds, groupIds, getAttrInIds, getAttrOutFuncDataList, portTemplateConsolidationData);
288 consolidationData.getPortConsolidationData()
289 .getFilePortConsolidationData(serviceTemplateFileName)
290 .setPortTemplateConsolidationData(portNodeTemplateId, portTemplateConsolidationData);
293 public static PortTemplateConsolidationData createPortTemplateConsolidationData(
294 String portNodeTemplateId) {
295 PortTemplateConsolidationData portTemplateConsolidationData =
296 new PortTemplateConsolidationData();
297 portTemplateConsolidationData.setNodeTemplateId(portNodeTemplateId);
298 return portTemplateConsolidationData;
301 public static void initPortConsolidationData(String serviceTemplateFileName,
302 ConsolidationData consolidationData) {
304 consolidationData.getPortConsolidationData()
305 .setFilePortConsolidationData(serviceTemplateFileName, new FilePortConsolidationData());
308 public static void updateComputeTemplateConsolidationData(String serviceTemplateFileName,
309 String computeNodeTypeName,
310 String computeNodeTemplateId,
311 List<String> nodeIdsConnectedIn,
312 List<String> nodeIdsConnectedOut,
313 List<String> volumeIds,
314 List<String> groupIds,
315 List<String> getAttrInIds,
316 List<Pair<String, GetAttrFuncData>> getAttrOutIds,
317 List<Pair<String, String>> portTypeToIdList,
318 ConsolidationData consolidationData) {
320 initComputeNodeTemplateIdInConsolidationData(serviceTemplateFileName, computeNodeTypeName,
321 computeNodeTemplateId, consolidationData);
323 Map<String, List<RequirementAssignmentData>> volumes =
324 consolidationData.getComputeConsolidationData().getFileComputeConsolidationData
325 (serviceTemplateFileName).getTypeComputeConsolidationData(computeNodeTypeName)
326 .getComputeTemplateConsolidationData(computeNodeTemplateId).getVolumes();
328 ComputeTemplateConsolidationData computeTemplateConsolidationData =
329 createComputeTemplateConsolidationData(computeNodeTemplateId, portTypeToIdList, volumes);
331 updateRelationsForEntityConsolidationData(computeNodeTemplateId, nodeIdsConnectedIn,
332 nodeIdsConnectedOut, groupIds, getAttrInIds, getAttrOutIds, computeTemplateConsolidationData);
334 updateVolumes(computeTemplateConsolidationData, volumeIds);
336 consolidationData.getComputeConsolidationData()
337 .getFileComputeConsolidationData(serviceTemplateFileName)
338 .getTypeComputeConsolidationData(computeNodeTypeName)
339 .setComputeTemplateConsolidationData(computeNodeTemplateId,
340 computeTemplateConsolidationData);
343 private static void updateRelationsForEntityConsolidationData(String entityNodeTemplateId,
344 List<String> nodeIdsConnectedIn,
345 List<String> nodeIdsConnectedOut,
346 List<String> groupIds,
347 List<String> getAttrInIds,
348 List<Pair<String, GetAttrFuncData>> getAttrOutFuncDataList,
349 EntityConsolidationData entity) {
350 updateRelationsIn(entity, nodeIdsConnectedIn);
351 updateRelationsOut(entity, entityNodeTemplateId, nodeIdsConnectedOut);
352 updateGetAttrIn(entity, getAttrInIds);
353 updateGetAttrOut(entity, getAttrOutFuncDataList);
354 entity.setGroupIds(groupIds);
357 public static void initComputeNodeTemplateIdInConsolidationData(String serviceTemplateFileName,
358 String computeNodeTypeName,
359 String computeNodeTemplateId,
360 ConsolidationData consolidationData) {
362 if(Objects.isNull(consolidationData.getComputeConsolidationData().getFileComputeConsolidationData
363 (serviceTemplateFileName))) {
364 consolidationData.getComputeConsolidationData().setFileComputeConsolidationData
365 (serviceTemplateFileName, new FileComputeConsolidationData());
367 TypeComputeConsolidationData typeComputeConsolidationData =
368 consolidationData.getComputeConsolidationData().getFileComputeConsolidationData
369 (serviceTemplateFileName).getTypeComputeConsolidationData(computeNodeTypeName);
372 typeComputeConsolidationData.getComputeTemplateConsolidationData(computeNodeTemplateId) == null) {
374 consolidationData.getComputeConsolidationData()
375 .getFileComputeConsolidationData(serviceTemplateFileName)
376 .getTypeComputeConsolidationData(computeNodeTypeName)
377 .setComputeTemplateConsolidationData(computeNodeTemplateId, new ComputeTemplateConsolidationData());
382 public static void updateNestedConsolidationData(String serviceTemplateName,
383 List<String> substitutionNodeTemplateIds,
384 ConsolidationData consolidationData){
385 if(Objects.isNull(consolidationData.getNestedConsolidationData())){
386 consolidationData.setNestedConsolidationData(new NestedConsolidationData());
389 FileNestedConsolidationData fileNestedConsolidationData = new FileNestedConsolidationData();
390 for(String substitutionNodeTemplateId : substitutionNodeTemplateIds) {
391 NestedTemplateConsolidationData nestedTemplateConsolidationData = new NestedTemplateConsolidationData();
392 nestedTemplateConsolidationData.setNodeTemplateId(substitutionNodeTemplateId);
393 fileNestedConsolidationData.setNestedTemplateConsolidationData(substitutionNodeTemplateId, nestedTemplateConsolidationData);
395 consolidationData.getNestedConsolidationData().setFileNestedConsolidationData(serviceTemplateName, fileNestedConsolidationData);
398 public static ComputeTemplateConsolidationData createComputeTemplateConsolidationData(String computeNodeTemplateId,
399 List<Pair<String, String>> portTypeToIdList,
400 Map<String,List<RequirementAssignmentData>> volumes) {
401 ComputeTemplateConsolidationData compute = new ComputeTemplateConsolidationData();
402 compute.setNodeTemplateId(computeNodeTemplateId);
403 if (portTypeToIdList != null) {
404 for (Pair<String, String> port : portTypeToIdList) {
405 compute.addPort(port.getLeft(), port.getRight());
408 compute.setVolumes(volumes);
412 public static void updateRelationsIn(EntityConsolidationData entity,
413 List<String> idsPontingTome){
414 if(CollectionUtils.isEmpty(idsPontingTome)){
418 for(String pointingId : idsPontingTome){
419 entity.addNodesConnectedIn(pointingId, entity.getNodeTemplateId(), new RequirementAssignment());
423 public static void updateRelationsOut(EntityConsolidationData entity,
424 String nodeTemplateId,
425 List<String> idsToUpdate){
426 if(CollectionUtils.isEmpty(idsToUpdate)){
430 for(String id : idsToUpdate){
431 entity.addNodesConnectedOut(id, id, new RequirementAssignment());
435 public static void updateGetAttrIn(EntityConsolidationData entity,
436 List<String> idsToUpdate){
437 if(CollectionUtils.isEmpty(idsToUpdate)){
441 for(String id : idsToUpdate){
442 entity.addNodesGetAttrIn(id, new GetAttrFuncData());
446 public static void updateGetAttrOut(EntityConsolidationData entity,
447 List<Pair<String, GetAttrFuncData>> getAttrOutIds){
448 if(CollectionUtils.isEmpty(getAttrOutIds)){
452 for(Pair<String, GetAttrFuncData> getAttrOutFunc : getAttrOutIds){
453 entity.addNodesGetAttrOut(getAttrOutFunc.getLeft(), getAttrOutFunc.getRight());
457 public static void updateVolumes(ComputeTemplateConsolidationData compute,
458 List<String> volumeIds){
459 if(CollectionUtils.isEmpty(volumeIds)){
463 for(String id : volumeIds){
464 RequirementAssignment requirementAssignment = new RequirementAssignment();
465 requirementAssignment.setNode(id);
466 compute.addVolume(id, requirementAssignment);
470 public static void initComputeNodeTypeInConsolidationData(String serviceTemplateFileName,
471 String computeNodeTypeName,
472 ConsolidationData consolidationData) {
473 ComputeConsolidationData computeConsolidationData =
474 consolidationData.getComputeConsolidationData();
475 if (!computeConsolidationData.getAllServiceTemplateFileNames()
476 .contains(serviceTemplateFileName)) {
477 computeConsolidationData
478 .setFileComputeConsolidationData(serviceTemplateFileName,
479 new FileComputeConsolidationData());
481 computeConsolidationData
482 .getFileComputeConsolidationData(serviceTemplateFileName).setTypeComputeConsolidationData(
483 computeNodeTypeName, new TypeComputeConsolidationData());
486 public static Map<String, List<RequirementAssignmentData>> getNodeConnectedOutList(
487 NodeTemplate nodeTemplate, String requirementKey) {
488 Map<String, List<RequirementAssignmentData>> requirementAssignmentDataMap = new HashMap<>();
489 Optional<List<RequirementAssignmentData>> requirementAssignmentDataList =
490 TestUtils.createRequirementAssignmentDataList(nodeTemplate, requirementKey);
491 if (requirementAssignmentDataList.isPresent()) {
492 for (RequirementAssignmentData requirementAssignmentData : requirementAssignmentDataList
494 String connectedNodeTemplateId = requirementAssignmentData.getRequirementAssignment()
496 requirementAssignmentDataMap
497 .computeIfAbsent(connectedNodeTemplateId, k -> new ArrayList<>());
498 requirementAssignmentDataMap.get(connectedNodeTemplateId).add(requirementAssignmentData);
501 return requirementAssignmentDataMap;
504 public static void updatePortsInComputeTemplateConsolidationData(
505 List<Pair<String, String>> portIdToTypeList, ComputeTemplateConsolidationData
507 compute.setPorts(new HashMap<>());
508 for(Pair<String, String> portIdToType : portIdToTypeList){
509 compute.getPorts().putIfAbsent(portIdToType.getLeft(), new ArrayList<>());
510 compute.getPorts().get(portIdToType.getLeft()).add(portIdToType.getRight());
514 public static Map<String, List<RequirementAssignmentData>> getNodeConnectedInList(
515 String sourceNodeTemplateId,
516 ServiceTemplate serviceTemplate, String requirementKey) {
517 Optional<List<RequirementAssignmentData>> requirementAssignmentDataList = Optional.empty();
518 List<RequirementAssignmentData> assignmentDataList = new ArrayList<>();
519 Map<String, List<RequirementAssignmentData>> requirementAssignmentDataMap = new HashMap<>();
520 Map<String, NodeTemplate> nodeTemplates = serviceTemplate.getTopology_template()
521 .getNode_templates();
522 for (Map.Entry<String, NodeTemplate> entry : nodeTemplates.entrySet()) {
523 String nodeTemplateId = entry.getKey();
524 List<Map<String, RequirementAssignment>> requirements = entry.getValue().getRequirements();
525 if (requirements != null) {
526 for (Map<String, RequirementAssignment> requirement : requirements) {
527 if (requirement.get(requirementKey) != null) {
528 RequirementAssignment requirementAssignment = requirement.get(requirementKey);
529 if (requirementAssignment != null) {
530 if (requirementAssignment.getNode().equals(sourceNodeTemplateId)) {
531 RequirementAssignmentData data = new RequirementAssignmentData(requirementKey,
532 requirementAssignment);
533 assignmentDataList.add(data);
538 requirementAssignmentDataList = Optional.ofNullable(assignmentDataList);
539 if (requirementAssignmentDataList.isPresent()) {
540 for (RequirementAssignmentData requirementAssignmentData : requirementAssignmentDataList
542 requirementAssignmentDataMap.computeIfAbsent(nodeTemplateId, k -> new ArrayList<>());
543 requirementAssignmentDataMap.get(nodeTemplateId).add(requirementAssignmentData);
546 requirementAssignmentDataList = Optional.empty();
549 return requirementAssignmentDataMap;
552 public static List<String> getGroupsForNode(ServiceTemplate serviceTemplate, String
554 List<String> entityGroups = new ArrayList<>();
555 Map<String, GroupDefinition> groups = serviceTemplate.getTopology_template().getGroups();
556 Map<String, NodeTemplate> nodeTemplates =
557 serviceTemplate.getTopology_template().getNode_templates();
558 for (Map.Entry<String, GroupDefinition> entry : groups.entrySet()) {
559 String groupId = entry.getKey();
560 GroupDefinition groupDefinition = entry.getValue();
561 if (groupDefinition.getType().contains("HeatStack"))
563 List<String> groupMembers = groupDefinition.getMembers();
564 for (String member : groupMembers) {
565 if (groups.containsKey(member))
567 if (member.equals(nodeTemplateId)) {
568 entityGroups.add(groupId);
575 private static Optional<List<RequirementAssignmentData>> createRequirementAssignmentDataList(
576 NodeTemplate nodeTemplate, String requirementKey) {
578 Optional<List<RequirementAssignment>> requirementAssignmentLink =
579 DataModelUtil.getRequirementAssignment(nodeTemplate.getRequirements(), requirementKey);
580 if (!requirementAssignmentLink.isPresent()) {
581 return Optional.empty();
584 List<RequirementAssignmentData> requirementAssignmentDataList = new ArrayList<>();
585 for (RequirementAssignment requirementAssignment : requirementAssignmentLink.get()) {
586 RequirementAssignmentData requirementAssignmentData = new RequirementAssignmentData
587 (requirementKey, requirementAssignment);
588 requirementAssignmentDataList.add(requirementAssignmentData);
590 return Optional.ofNullable(requirementAssignmentDataList);
593 public static Optional<List<RequirementAssignmentData>> getRequirementAssignmentDataList(
594 NodeTemplate nodeTemplate, String requirementKey) {
595 List<RequirementAssignmentData> returnedReqAssignmentDataList = new ArrayList<>();
596 Optional<List<RequirementAssignmentData>> requirementAssignmentDataList =
597 TestUtils.createRequirementAssignmentDataList(nodeTemplate, requirementKey);
599 if (requirementAssignmentDataList.isPresent()) {
600 for (RequirementAssignmentData requirementAssignmentData : requirementAssignmentDataList
602 returnedReqAssignmentDataList.add(requirementAssignmentData);
604 return Optional.of(returnedReqAssignmentDataList);
606 return Optional.empty();