blob: 01de375d9133fd82a0181376b14d9445d6a2960f [file] [log] [blame]
Aharoni, Pavel (pa0916)ca3cb012018-10-22 15:29:57 +03001/*-
2 * ============LICENSE_START=======================================================
3 * OSAM
4 * ================================================================================
5 * Copyright (C) 2018 AT&T
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
22
23package org.onap.osam.services;
24
25import org.apache.http.HttpStatus;
26import org.onap.osam.aai.AaiClientInterface;
27import org.onap.osam.aai.AaiResponse;
28import org.onap.osam.aai.ServiceInstance;
29import org.onap.osam.aai.ServiceInstancesSearchResults;
30import org.onap.osam.aai.ServiceSubscription;
31import org.onap.osam.aai.ServiceSubscriptions;
32import org.onap.osam.aai.Services;
33import org.onap.osam.aai.SubscriberFilteredResults;
34import org.onap.osam.aai.model.AaiGetAicZone.AicZones;
35import org.onap.osam.aai.model.AaiGetInstanceGroupsByCloudRegion;
36import org.onap.osam.aai.model.AaiGetNetworkCollectionDetails.AaiGetNetworkCollectionDetails;
37import org.onap.osam.aai.model.AaiGetNetworkCollectionDetails.AaiGetRelatedInstanceGroupsByVnfId;
38import org.onap.osam.aai.model.AaiGetOperationalEnvironments.OperationalEnvironmentList;
39import org.onap.osam.aai.model.AaiGetPnfs.Pnf;
40import org.onap.osam.aai.model.AaiGetServicesRequestModel.GetServicesAAIRespone;
41import org.onap.osam.aai.model.AaiGetTenatns.GetTenantsResponse;
42import org.onap.osam.aai.model.AaiRelationResponse;
43import org.onap.osam.aai.model.InstanceGroupInfo;
44import org.onap.osam.aai.model.LogicalLinkResponse;
45import org.onap.osam.aai.model.Model;
46import org.onap.osam.aai.model.OwningEntity;
47import org.onap.osam.aai.model.OwningEntityResponse;
48import org.onap.osam.aai.model.PortDetailsTranslator;
49import org.onap.osam.aai.model.Project;
50import org.onap.osam.aai.model.ProjectResponse;
51import org.onap.osam.aai.model.RelatedToProperty;
52import org.onap.osam.aai.model.Relationship;
53import org.onap.osam.aai.model.RelationshipData;
54import org.onap.osam.aai.model.RelationshipList;
55import org.onap.osam.aai.model.ServiceRelationships;
56import org.onap.osam.model.ServiceInstanceSearchResult;
57import org.onap.osam.model.SubscriberList;
58import org.onap.osam.roles.RoleValidator;
59import org.onap.osam.utils.Intersection;
60import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
61import org.springframework.beans.factory.annotation.Autowired;
62
63import javax.ws.rs.core.Response;
64import java.io.UnsupportedEncodingException;
65import java.net.URLEncoder;
66import java.util.ArrayList;
67import java.util.List;
68import java.util.stream.Collectors;
69
70public class AaiServiceImpl implements IAaiService {
71 private static final String SERVICE_INSTANCE_ID = "service-instance.service-instance-id";
72 private static final String SERVICE_TYPE = "service-subscription.service-type";
73 private static final String CUSTOMER_ID = "customer.global-customer-id";
74 private static final String SERVICE_INSTANCE_NAME = "service-instance.service-instance-name";
75 private int indexOfSubscriberName = 6;
76
77 @Autowired
78 private AaiClientInterface aaiClient;
79
80 private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(AaiServiceImpl.class);
81
82 private boolean validateModel(Model model){
83 if (model == null) {
84 return false;
85 } else {
86 return model.getModelVers() != null && model.getModelVers().getModelVer() != null && model.getModelVers().getModelVer().get(0).getModelVersionId() != null;
87 }
88 }
89
90 private List<ServiceInstanceSearchResult> getServicesByOwningEntityId(List<String> owningEntities, RoleValidator roleValidator) {
91 AaiResponse<OwningEntityResponse> owningEntityResponse = aaiClient.getServicesByOwningEntityId(owningEntities);
92 List<ServiceInstanceSearchResult> serviceInstanceSearchResultList = new ArrayList<>();
93 if (owningEntityResponse.getT() != null) {
94 for (OwningEntity owningEntity : owningEntityResponse.getT().getOwningEntity()) {
95 if (owningEntity.getRelationshipList() != null) {
96 serviceInstanceSearchResultList = convertRelationshipToSearchResult(owningEntity, serviceInstanceSearchResultList, roleValidator);
97 }
98 }
99 }
100 return serviceInstanceSearchResultList;
101 }
102
103 private List<ServiceInstanceSearchResult> getServicesByProjectNames(List<String> projectNames, RoleValidator roleValidator) {
104 AaiResponse<ProjectResponse> projectByIdResponse = aaiClient.getServicesByProjectNames(projectNames);
105 List<ServiceInstanceSearchResult> serviceInstanceSearchResultList = new ArrayList<>();
106 if (projectByIdResponse.getT() != null) {
107 for (Project project : projectByIdResponse.getT().getProject()) {
108 if (project.getRelationshipList() != null) {
109 serviceInstanceSearchResultList = convertRelationshipToSearchResult(project, serviceInstanceSearchResultList, roleValidator);
110 }
111 }
112 }
113 return serviceInstanceSearchResultList;
114 }
115
116 private List<ServiceInstanceSearchResult> convertRelationshipToSearchResult(AaiRelationResponse owningEntityResponse, List<ServiceInstanceSearchResult> serviceInstanceSearchResultList, RoleValidator roleValidator) {
117 if (owningEntityResponse.getRelationshipList().getRelationship() != null) {
118 List<Relationship> relationshipList = owningEntityResponse.getRelationshipList().getRelationship();
119 for (Relationship relationship : relationshipList) {
120 ServiceInstanceSearchResult serviceInstanceSearchResult = new ServiceInstanceSearchResult();
121 extractRelationshipData(relationship, serviceInstanceSearchResult, roleValidator);
122 extractRelatedToProperty(relationship, serviceInstanceSearchResult);
123 serviceInstanceSearchResultList.add(serviceInstanceSearchResult);
124 }
125 }
126 return serviceInstanceSearchResultList;
127 }
128
129 private void extractRelationshipData(Relationship relationship, ServiceInstanceSearchResult serviceInstanceSearchResult, RoleValidator roleValidator) {
130 List<RelationshipData> relationshipDataList = relationship.getRelationDataList();
131 if (relationshipDataList != null) {
132 setSubscriberName(relationship, serviceInstanceSearchResult);
133 for (RelationshipData relationshipData : relationshipDataList) {
134 String key = relationshipData.getRelationshipKey();
135 if (key.equals(SERVICE_INSTANCE_ID)) {
136 serviceInstanceSearchResult.setServiceInstanceId(relationshipData.getRelationshipValue());
137 } else if (key.equals(SERVICE_TYPE)) {
138 serviceInstanceSearchResult.setServiceType(relationshipData.getRelationshipValue());
139 } else if (key.equals(CUSTOMER_ID)) {
140 serviceInstanceSearchResult.setGlobalCustomerId(relationshipData.getRelationshipValue());
141 }
142 }
143
144 boolean isPermitted = roleValidator.isServicePermitted(serviceInstanceSearchResult.getSubscriberName(), serviceInstanceSearchResult.getServiceType());
145 serviceInstanceSearchResult.setIsPermitted(isPermitted);
146 }
147 }
148
149 private void setSubscriberName(Relationship relationship, ServiceInstanceSearchResult serviceInstanceSearchResult) {
150 String relatedLink = relationship.getRelatedLink();
151 String[] subsciber = relatedLink.split("/");
152 serviceInstanceSearchResult.setSubscriberName(subsciber[indexOfSubscriberName]);
153 }
154
155 private void extractRelatedToProperty(Relationship relationship, ServiceInstanceSearchResult serviceInstanceSearchResult) {
156 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToPropertyList();
157 if (relatedToPropertyList != null) {
158 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
159 if (relatedToProperty.getPropertyKey().equals(SERVICE_INSTANCE_NAME)) {
160 serviceInstanceSearchResult.setServiceInstanceName(relatedToProperty.getPropertyValue());
161 }
162 }
163 }
164 }
165
166 @Override
167 public SubscriberFilteredResults getFullSubscriberList(RoleValidator roleValidator) {
168 AaiResponse<SubscriberList> subscriberResponse = aaiClient.getAllSubscribers();
169
170 return new SubscriberFilteredResults(roleValidator, subscriberResponse.getT(),
171 subscriberResponse.getErrorMessage(),
172 subscriberResponse.getHttpCode());
173 }
174
175 @Override
176 public AaiResponse<OperationalEnvironmentList> getOperationalEnvironments(String operationalEnvironmentType, String operationalEnvironmentStatus) {
177 return aaiClient.getOperationalEnvironments(operationalEnvironmentType, operationalEnvironmentStatus);
178 }
179
180 @Override
181 public AaiResponse<SubscriberList> getFullSubscriberList() {
182 return aaiClient.getAllSubscribers();
183 }
184
185 @Override
186 public AaiResponse getSubscriberData(String subscriberId, RoleValidator roleValidator) {
187 AaiResponse<Services> subscriberResponse = aaiClient.getSubscriberData(subscriberId);
188 String subscriberGlobalId = subscriberResponse.getT().globalCustomerId;
189 for (ServiceSubscription serviceSubscription : subscriberResponse.getT().serviceSubscriptions.serviceSubscription) {
190 String serviceType = serviceSubscription.serviceType;
191 serviceSubscription.isPermitted = roleValidator.isServicePermitted(subscriberGlobalId, serviceType);
192 }
193 return subscriberResponse;
194
195 }
196
197 @Override
198 public AaiResponse getServiceInstanceSearchResults(String subscriberId, String instanceIdentifier, RoleValidator roleValidator, List<String> owningEntities, List<String> projects) {
199 List<List<ServiceInstanceSearchResult>> resultList = new ArrayList<>();
200 ServiceInstancesSearchResults serviceInstancesSearchResults = new ServiceInstancesSearchResults();
201
202 if (subscriberId != null || instanceIdentifier != null) {
203 resultList.add(getServicesBySubscriber(subscriberId, instanceIdentifier, roleValidator));
204 }
205 if (owningEntities != null) {
206 resultList.add(getServicesByOwningEntityId(owningEntities, roleValidator));
207 }
208 if (projects != null) {
209 resultList.add(getServicesByProjectNames(projects, roleValidator));
210 }
211 if (!resultList.isEmpty()) {
212 Intersection<ServiceInstanceSearchResult> intersection = new Intersection<>();
213 serviceInstancesSearchResults.serviceInstances = intersection.intersectMultipileArray(resultList);
214 }
215
216 return new AaiResponse<>(serviceInstancesSearchResults, null, HttpStatus.SC_OK);
217 }
218
219
220 private List<ServiceInstanceSearchResult> getServicesBySubscriber(String subscriberId, String instanceIdentifier, RoleValidator roleValidator) {
221 AaiResponse<Services> subscriberResponse = aaiClient.getSubscriberData(subscriberId);
222 String subscriberGlobalId = subscriberResponse.getT().globalCustomerId;
223 String subscriberName = subscriberResponse.getT().subscriberName;
224 ServiceSubscriptions serviceSubscriptions = subscriberResponse.getT().serviceSubscriptions;
225
226 return getSearchResultsForSubscriptions(serviceSubscriptions, subscriberId, instanceIdentifier, roleValidator, subscriberGlobalId, subscriberName);
227
228 }
229
230
231 private ArrayList<ServiceInstanceSearchResult> getSearchResultsForSubscriptions(ServiceSubscriptions serviceSubscriptions, String subscriberId, String instanceIdentifier, RoleValidator roleValidator, String subscriberGlobalId, String subscriberName) {
232 ArrayList<ServiceInstanceSearchResult> results = new ArrayList<>();
233
234 if (serviceSubscriptions != null) {
235 for (ServiceSubscription serviceSubscription : serviceSubscriptions.serviceSubscription) {
236 String serviceType = serviceSubscription.serviceType;
237 serviceSubscription.isPermitted = roleValidator.isServicePermitted(subscriberGlobalId, serviceType);
238 ArrayList<ServiceInstanceSearchResult> resultsForSubscription = getSearchResultsForSingleSubscription(serviceSubscription, subscriberId, instanceIdentifier, subscriberName, serviceType);
239 results.addAll(resultsForSubscription);
240 }
241 }
242
243 return results;
244 }
245
246 private ArrayList<ServiceInstanceSearchResult> getSearchResultsForSingleSubscription(ServiceSubscription serviceSubscription, String subscriberId, String instanceIdentifier, String subscriberName, String serviceType) {
247 ArrayList<ServiceInstanceSearchResult> results = new ArrayList<>();
248
249 if (serviceSubscription.serviceInstances != null) {
250 for (ServiceInstance serviceInstance : serviceSubscription.serviceInstances.serviceInstance) {
251 ServiceInstanceSearchResult serviceInstanceSearchResult =
252 new ServiceInstanceSearchResult(serviceInstance.serviceInstanceId, subscriberId, serviceType, serviceInstance.serviceInstanceName,
253 subscriberName, serviceInstance.modelInvariantId, serviceInstance.modelVersionId, serviceSubscription.isPermitted);
254
255 if (instanceIdentifier == null) {
256 results.add(serviceInstanceSearchResult);
257 } else if (serviceInstanceMatchesIdentifier(instanceIdentifier, serviceInstance)) {
258 results.add(serviceInstanceSearchResult);
259 }
260 }
261 }
262
263 return results;
264 }
265
266 private boolean serviceInstanceMatchesIdentifier(String instanceIdentifier, ServiceInstance serviceInstance) {
267 return instanceIdentifier.equals(serviceInstance.serviceInstanceId) || instanceIdentifier.equals(serviceInstance.serviceInstanceName);
268 }
269
270 @Override
271 public Response getVersionByInvariantId(List<String> modelInvariantId) {
272 try {
273 return aaiClient.getVersionByInvariantId(modelInvariantId);
274 } catch (Exception e) {
275 LOGGER.error(EELFLoggerDelegate.errorLogger, "Failed to getVersionByInvariantId from A&AI", e);
276 }
277 return null;
278 }
279
280 @Override
281 public AaiResponse<Pnf> getSpecificPnf(String pnfId) {
282 return aaiClient.getSpecificPnf(pnfId);
283 }
284
285 @Override
286 public AaiResponse getPNFData(String globalCustomerId, String serviceType, String modelVersionId, String modelInvariantId, String cloudRegion, String equipVendor, String equipModel) {
287 return aaiClient.getPNFData(globalCustomerId, serviceType, modelVersionId, modelInvariantId, cloudRegion, equipVendor, equipModel);
288 }
289
290
291
292 @Override
293 public AaiResponse getServices(RoleValidator roleValidator) {
294 AaiResponse<GetServicesAAIRespone> subscriberResponse = aaiClient.getServices();
295 if (subscriberResponse.getT() != null) {
296 for (org.onap.osam.aai.model.AaiGetServicesRequestModel.Service service : subscriberResponse.getT().service) {
297 service.isPermitted = true;
298 }
299 }
300 return subscriberResponse;
301 }
302
303 @Override
304 public AaiResponse<GetTenantsResponse[]> getTenants(String globalCustomerId, String serviceType, RoleValidator roleValidator) {
305 AaiResponse<GetTenantsResponse[]> aaiGetTenantsResponse = aaiClient.getTenants(globalCustomerId, serviceType);
306 GetTenantsResponse[] tenants = aaiGetTenantsResponse.getT();
307 if (tenants != null) {
308 for (int i = 0; i < tenants.length; i++) {
309 tenants[i].isPermitted = roleValidator.isTenantPermitted(globalCustomerId, serviceType, tenants[i].tenantName);
310 }
311 }
312 return aaiGetTenantsResponse;
313
314
315 }
316
317 @Override
318 public AaiResponse getVNFData(String globalSubscriberId, String serviceType, String serviceInstanceId) {
319 return aaiClient.getVNFData(globalSubscriberId, serviceType, serviceInstanceId);
320 }
321
322 @Override
323 public Response getVNFData(String globalSubscriberId, String serviceType) {
324 return aaiClient.getVNFData(globalSubscriberId, serviceType);
325 }
326
327 @Override
328 public AaiResponse getAaiZones() {
329 return (AaiResponse<AicZones>) aaiClient.getAllAicZones();
330 }
331
332 @Override
333 public AaiResponse getAicZoneForPnf(String globalCustomerId, String serviceType, String serviceId) {
334 String aicZone = "";
335
336 AaiResponse<ServiceRelationships> serviceInstanceResp = aaiClient.getServiceInstance(globalCustomerId, serviceType, serviceId);
337 if (serviceInstanceResp.getT() != null) {
338 List<String> aicZoneList = getRelationshipDataByType(serviceInstanceResp.getT().getRelationshipList(), "zone", "zone.zone-id");
339 if (!aicZoneList.isEmpty()) {
340 aicZone = aicZoneList.get(0);
341 } else {
342 LOGGER.warn("aic zone not found for service instance " + serviceId);
343 }
344 } else {
345 if (serviceInstanceResp.getErrorMessage() != null) {
346 LOGGER.error("get service instance {} return error {}", serviceId, serviceInstanceResp.getErrorMessage());
347 return new AaiResponse(aicZone , serviceInstanceResp.getErrorMessage() ,serviceInstanceResp.getHttpCode());
348 } else {
349 LOGGER.warn("get service instance {} return empty body", serviceId);
350 return new AaiResponse(aicZone , "get service instance " + serviceId + " return empty body" ,serviceInstanceResp.getHttpCode());
351 }
352 }
353
354 return new AaiResponse(aicZone , null ,HttpStatus.SC_OK);
355 }
356
357 @Override
358 public AaiResponse getNodeTemplateInstances(String globalCustomerId, String serviceType, String modelVersionId, String modelInvariantId, String cloudRegion) {
359 return aaiClient.getNodeTemplateInstances(globalCustomerId, serviceType, modelVersionId, modelInvariantId, cloudRegion);
360 }
361
362 @Override
363 public AaiResponse getNetworkCollectionDetails(String serviceInstanceId){
364 AaiResponse<AaiGetNetworkCollectionDetails> getNetworkCollectionDetailsAaiResponse = aaiClient.getNetworkCollectionDetails(serviceInstanceId);
365 return getNetworkCollectionDetailsAaiResponse;
366 }
367
368 @Override
369 public AaiResponse<AaiGetInstanceGroupsByCloudRegion> getInstanceGroupsByCloudRegion(String cloudOwner, String cloudRegionId, String networkFunction){
370 AaiResponse<AaiGetInstanceGroupsByCloudRegion> getInstanceGroupsByCloudRegionResponse = aaiClient.getInstanceGroupsByCloudRegion(cloudOwner, cloudRegionId, networkFunction);
371 return getInstanceGroupsByCloudRegionResponse;
372 }
373
374 @Override
375 public List<String> getServiceInstanceAssociatedPnfs(String globalCustomerId, String serviceType, String serviceInstanceId) {
376 List<String> pnfs = new ArrayList<>();
377
378 AaiResponse<ServiceRelationships> serviceInstanceResp = aaiClient.getServiceInstance(globalCustomerId, serviceType, serviceInstanceId);
379 if (serviceInstanceResp.getT() != null) {
380
381 addPnfsToListViaLogicalLinks(pnfs, serviceInstanceResp);
382 addPnfsToListViaDirectRelations(pnfs, serviceInstanceResp);
383
384 if (pnfs.isEmpty()) {
385 LOGGER.warn("no pnf direct relation found for service id:" + serviceInstanceId+
386 " name: "+serviceInstanceResp.getT().getServiceInstanceName());
387 }
388 } else {
389 if (serviceInstanceResp.getErrorMessage() != null) {
390 LOGGER.error("get service instance {} return error {}", serviceInstanceId, serviceInstanceResp.getErrorMessage());
391 } else {
392 LOGGER.warn("get service instance {} return empty body", serviceInstanceId);
393 }
394 }
395
396 return pnfs.stream().distinct().collect(Collectors.toList());
397 }
398
399 @Override
400 public AaiResponse getInstanceGroupsByVnfInstanceId(String vnfInstanceId){
401 AaiResponse<AaiGetRelatedInstanceGroupsByVnfId> aaiResponse = aaiClient.getInstanceGroupsByVnfInstanceId(vnfInstanceId);
402 if(aaiResponse.getHttpCode() == HttpStatus.SC_OK){
403 return new AaiResponse(convertGetInstanceGroupsResponseToSimpleResponse(aaiResponse.getT()), aaiResponse.getErrorMessage(), aaiResponse.getHttpCode());
404 }
405 return aaiClient.getInstanceGroupsByVnfInstanceId(vnfInstanceId);
406 }
407
408 private List<InstanceGroupInfo> convertGetInstanceGroupsResponseToSimpleResponse(AaiGetRelatedInstanceGroupsByVnfId response) {
409 List<InstanceGroupInfo> instanceGroupInfoList = new ArrayList<>();
410 for(org.onap.osam.aai.model.AaiGetNetworkCollectionDetails.Relationship relationship: response.getRelationshipList().getRelationship()){
411 getInstanceGroupInfoFromRelationship(relationship, instanceGroupInfoList);
412 }
413 return instanceGroupInfoList;
414 }
415
416 private void getInstanceGroupInfoFromRelationship(org.onap.osam.aai.model.AaiGetNetworkCollectionDetails.Relationship relationship, List<InstanceGroupInfo> instanceGroupInfoList) {
417 if(relationship.getRelatedTo().equals("instance-group")){
418 for(org.onap.osam.aai.model.AaiGetNetworkCollectionDetails.RelatedToProperty relatedToProperty: relationship.getRelatedToPropertyList()){
419 if(relatedToProperty.getPropertyKey().equals("instance-group.instance-group-name")){
420 instanceGroupInfoList.add(new InstanceGroupInfo(relatedToProperty.getPropertyValue()));
421 }
422 }
423 }
424 }
425
426 @Override
427 public List<PortDetailsTranslator.PortDetails> getPortMirroringSourcePorts(String configurationId){
428 return aaiClient.getPortMirroringSourcePorts(configurationId);
429 }
430
431 private void addPnfsToListViaDirectRelations(List<String> pnfs, AaiResponse<ServiceRelationships> serviceInstanceResp) {
432 pnfs.addAll(getRelationshipDataByType(serviceInstanceResp.getT().getRelationshipList(), "pnf", "pnf.pnf-name"));
433 }
434
435 private void addPnfsToListViaLogicalLinks(List<String> pnfs, AaiResponse<ServiceRelationships> serviceInstanceResp) {
436 List<String> logicalLinks = getRelationshipDataByType(serviceInstanceResp.getT().getRelationshipList(), "logical-link", "logical-link.link-name");
437 for (String logicalLink : logicalLinks) {
438 String link;
439 try {
440 link = URLEncoder.encode(logicalLink, "UTF-8");
441 } catch (UnsupportedEncodingException e) {
442 LOGGER.error("Failed to encode logical link: " + logicalLink, e);
443 continue;
444 }
445
446 AaiResponse<LogicalLinkResponse> logicalLinkResp = aaiClient.getLogicalLink(link);
447 if (logicalLinkResp.getT() != null) {
448 //lag-interface is the key for pnf - approved by Bracha
449 List<String> linkPnfs = getRelationshipDataByType(logicalLinkResp.getT().getRelationshipList(), "lag-interface", "pnf.pnf-name");
450 if (!linkPnfs.isEmpty()) {
451 pnfs.addAll(linkPnfs);
452 } else {
453 LOGGER.warn("no pnf found for logical link " + logicalLink);
454 }
455 } else {
456 if (logicalLinkResp.getErrorMessage() != null) {
457 LOGGER.error("get logical link " + logicalLink + " return error", logicalLinkResp.getErrorMessage());
458 } else {
459 LOGGER.warn("get logical link " + logicalLink + " return empty body");
460 }
461 }
462 }
463 }
464
465 private List<String> getRelationshipDataByType(RelationshipList relationshipList, String relationshipType, String relationshipDataKey) {
466 List<String> relationshipValues = new ArrayList<>();
467 for (Relationship relationship : relationshipList.getRelationship()) {
468 if (relationship.getRelatedTo().equals(relationshipType)) {
469 relationshipValues.addAll( relationship.getRelationDataList().stream()
470 .filter(rel -> rel.getRelationshipKey().equals(relationshipDataKey))
471 .map(RelationshipData::getRelationshipValue)
472 .collect(Collectors.toList())
473 );
474 }
475 }
476
477
478 return relationshipValues;
479 }
480}