Implant vid-app-common org.onap.vid.job (main and test)
[vid.git] / vid-app-common / src / main / java / org / onap / vid / controller / AaiController.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * VID
4  * ================================================================================
5  * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2019 Nokia.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.vid.controller;
23
24 import static org.onap.vid.utils.Logging.getMethodName;
25
26 import com.fasterxml.jackson.databind.ObjectMapper;
27 import java.io.IOException;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.UUID;
31 import java.util.stream.Collectors;
32 import javax.servlet.http.HttpServletRequest;
33 import javax.ws.rs.DefaultValue;
34 import javax.ws.rs.QueryParam;
35 import javax.ws.rs.WebApplicationException;
36 import javax.ws.rs.core.Response;
37 import org.apache.commons.lang3.tuple.ImmutablePair;
38 import org.apache.commons.lang3.tuple.Pair;
39 import org.onap.portalsdk.core.controller.RestrictedBaseController;
40 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
41 import org.onap.portalsdk.core.util.SystemProperties;
42 import org.onap.vid.aai.AaiGetVnfResponse;
43 import org.onap.vid.aai.AaiResponse;
44 import org.onap.vid.aai.AaiResponseTranslator.PortMirroringConfigData;
45 import org.onap.vid.aai.ServiceInstancesSearchResults;
46 import org.onap.vid.aai.SubscriberFilteredResults;
47 import org.onap.vid.aai.model.AaiGetInstanceGroupsByCloudRegion;
48 import org.onap.vid.aai.model.AaiGetOperationalEnvironments.OperationalEnvironmentList;
49 import org.onap.vid.aai.model.AaiGetPnfs.Pnf;
50 import org.onap.vid.aai.model.AaiGetTenatns.GetTenantsResponse;
51 import org.onap.vid.aai.util.AAIRestInterface;
52 import org.onap.vid.model.VersionByInvariantIdsRequest;
53 import org.onap.vid.properties.Features;
54 import org.onap.vid.roles.Role;
55 import org.onap.vid.roles.RoleProvider;
56 import org.onap.vid.roles.RoleValidator;
57 import org.onap.vid.services.AaiService;
58 import org.onap.vid.utils.SystemPropertiesWrapper;
59 import org.onap.vid.utils.Unchecked;
60 import org.springframework.beans.factory.annotation.Autowired;
61 import org.springframework.http.HttpStatus;
62 import org.springframework.http.MediaType;
63 import org.springframework.http.ResponseEntity;
64 import org.springframework.web.bind.annotation.PathVariable;
65 import org.springframework.web.bind.annotation.RequestBody;
66 import org.springframework.web.bind.annotation.RequestMapping;
67 import org.springframework.web.bind.annotation.RequestMethod;
68 import org.springframework.web.bind.annotation.RequestParam;
69 import org.springframework.web.bind.annotation.RestController;
70 import org.springframework.web.servlet.HandlerMapping;
71 import org.springframework.web.servlet.ModelAndView;
72 import org.togglz.core.manager.FeatureManager;
73
74
75 @RestController
76 public class AaiController extends RestrictedBaseController {
77
78     private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(AaiController.class);
79     private static final String FROM_APP_ID = "VidAaiController";
80
81     private AaiService aaiService;
82     private AAIRestInterface aaiRestInterface;
83     private RoleProvider roleProvider;
84     private SystemPropertiesWrapper systemPropertiesWrapper;
85     private FeatureManager featureManager;
86
87
88     @Autowired
89     public AaiController(AaiService aaiService,
90         AAIRestInterface aaiRestInterface,
91         RoleProvider roleProvider,
92         SystemPropertiesWrapper systemPropertiesWrapper,
93         FeatureManager featureManager
94     ) {
95
96         this.aaiService = aaiService;
97         this.aaiRestInterface = aaiRestInterface;
98         this.roleProvider = roleProvider;
99         this.systemPropertiesWrapper = systemPropertiesWrapper;
100         this.featureManager = featureManager;
101     }
102
103     @RequestMapping(value = {"/subscriberSearch"}, method = RequestMethod.GET)
104     public ModelAndView welcome() {
105         LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== AaiController welcome start");
106         return new ModelAndView(getViewName());
107     }
108
109     @RequestMapping(value = {"/aai_get_aic_zones"}, method = RequestMethod.GET)
110     public ResponseEntity<String> getAicZones() throws IOException {
111         LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== getAicZones controller start");
112         AaiResponse response = aaiService.getAaiZones();
113         return aaiResponseToResponseEntity(response);
114     }
115
116     @RequestMapping(value = {
117         "/aai_get_aic_zone_for_pnf/{globalCustomerId}/{serviceType}/{serviceId}"}, method = RequestMethod.GET)
118     public ResponseEntity<String> getAicZoneForPnf(@PathVariable("globalCustomerId") String globalCustomerId,
119         @PathVariable("serviceType") String serviceType, @PathVariable("serviceId") String serviceId) throws IOException {
120         LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== getAicZoneForPnf controller start");
121         AaiResponse response = aaiService.getAicZoneForPnf(globalCustomerId, serviceType, serviceId);
122         return aaiResponseToResponseEntity(response);
123     }
124
125     @RequestMapping(value = {"/aai_get_instance_groups_by_vnf_instance_id/{vnfInstanceId}"}, method = RequestMethod.GET)
126     public ResponseEntity<String> getInstanceGroupsByVnfInstanceId(@PathVariable("vnfInstanceId") String vnfInstanceId) throws IOException {
127         AaiResponse response = aaiService.getInstanceGroupsByVnfInstanceId(vnfInstanceId);
128         return aaiResponseToResponseEntity(response);
129     }
130
131     @RequestMapping(value = {"/getuserID"}, method = RequestMethod.GET)
132     public ResponseEntity<String> getUserID(HttpServletRequest request) {
133
134         String userId = new ControllersUtils(systemPropertiesWrapper).extractUserId(request);
135
136         return new ResponseEntity<>(userId, HttpStatus.OK);
137     }
138
139     @RequestMapping(value = "/aai_get_services", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
140     public ResponseEntity<String> doGetServices(HttpServletRequest request) throws IOException {
141         RoleValidator roleValidator = RoleValidator.by(roleProvider.getUserRoles(request));
142
143         AaiResponse subscriberList = aaiService.getServices(roleValidator);
144         return aaiResponseToResponseEntity(subscriberList);
145     }
146
147
148     @RequestMapping(value = {"/aai_get_version_by_invariant_id"}, method = RequestMethod.POST)
149     public ResponseEntity<String> getVersionByInvariantId(@RequestBody VersionByInvariantIdsRequest versions) {
150         Response result = aaiService.getVersionByInvariantId(versions.versions);
151
152         return new ResponseEntity<>(result.readEntity(String.class), HttpStatus.OK);
153     }
154
155
156     private ResponseEntity<String> aaiResponseToResponseEntity(AaiResponse aaiResponseData)
157         throws IOException {
158         ResponseEntity<String> responseEntity;
159         if (aaiResponseData.getHttpCode() == 200) {
160             responseEntity = new ResponseEntity<>(new ObjectMapper().writeValueAsString(aaiResponseData.getT()),
161                 HttpStatus.OK);
162         } else {
163             responseEntity = new ResponseEntity<>(aaiResponseData.getErrorMessage(),
164                 HttpStatus.valueOf(aaiResponseData.getHttpCode()));
165         }
166
167         return responseEntity;
168     }
169
170     @RequestMapping(value = "/aai_get_service_instance/{service-instance-id}/{service-instance-type}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
171     public ResponseEntity<String> doGetServiceInstance(@PathVariable("service-instance-id") String serviceInstanceId,
172         @PathVariable("service-instance-type") String serviceInstanceType) {
173         Response resp = null;
174
175         if (serviceInstanceType.equalsIgnoreCase("Service Instance Id")) {
176             resp = doAaiGet(
177                 "search/nodes-query?search-node-type=service-instance&filter=service-instance-id:EQUALS:"
178                     + serviceInstanceId, false);
179         } else {
180             resp = doAaiGet(
181                 "search/nodes-query?search-node-type=service-instance&filter=service-instance-name:EQUALS:"
182                     + serviceInstanceId, false);
183         }
184         return convertResponseToResponseEntity(resp);
185     }
186
187     @RequestMapping(value = "/aai_get_service_subscription/{global-customer-id}/{service-subscription-id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
188     public ResponseEntity<String> doGetServices(@PathVariable("global-customer-id") String globalCustomerId,
189         @PathVariable("service-subscription-id") String serviceSubscriptionId) {
190         Response resp = doAaiGet("business/customers/customer/" + globalCustomerId
191             + "/service-subscriptions/service-subscription/" + serviceSubscriptionId + "?depth=0", false);
192         return convertResponseToResponseEntity(resp);
193     }
194
195     @RequestMapping(value = "/aai_get_subscribers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
196     public ResponseEntity<String> doGetSubscriberList(HttpServletRequest request,
197         @DefaultValue("n") @QueryParam("fullSet") String fullSet) throws IOException {
198         return getFullSubscriberList(request);
199     }
200
201     @RequestMapping(value = "/get_system_prop_vnf_prov_status", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
202     public ResponseEntity<String> getTargetProvStatus() {
203         String p = SystemProperties.getProperty("aai.vnf.provstatus");
204         return new ResponseEntity<>(p, HttpStatus.OK);
205     }
206
207     @RequestMapping(value = "/get_operational_environments", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
208     public AaiResponse<OperationalEnvironmentList> getOperationalEnvironments(
209         @RequestParam(value = "operationalEnvironmentType", required = false) String operationalEnvironmentType,
210         @RequestParam(value = "operationalEnvironmentStatus", required = false) String operationalEnvironmentStatus) {
211         LOGGER.debug(EELFLoggerDelegate.debugLogger, "start {}({}, {})", getMethodName(), operationalEnvironmentType,
212             operationalEnvironmentStatus);
213         AaiResponse<OperationalEnvironmentList> response = aaiService
214             .getOperationalEnvironments(operationalEnvironmentType, operationalEnvironmentStatus);
215         if (response.getHttpCode() != 200) {
216             String errorMessage = getAaiErrorMessage(response.getErrorMessage());
217             if (errorMessage != null) {
218                 response = new AaiResponse<>(response.getT(), errorMessage, response.getHttpCode());
219             }
220         }
221
222         LOGGER.debug(EELFLoggerDelegate.debugLogger, "end {}() => {}", getMethodName(), response);
223         return response;
224     }
225
226     @RequestMapping(value = "/aai_get_full_subscribers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
227     public ResponseEntity<String> getFullSubscriberList(HttpServletRequest request) throws IOException {
228         ObjectMapper objectMapper = new ObjectMapper();
229         ResponseEntity<String> responseEntity;
230         RoleValidator roleValidator = RoleValidator.by(roleProvider.getUserRoles(request));
231         SubscriberFilteredResults subscriberList = aaiService.getFullSubscriberList(roleValidator);
232         if (subscriberList.getHttpCode() == 200) {
233             responseEntity = new ResponseEntity<>(objectMapper.writeValueAsString(subscriberList.getSubscriberList()),
234                 HttpStatus.OK);
235         } else {
236             responseEntity = new ResponseEntity<>(subscriberList.getErrorMessage(),
237                 HttpStatus.valueOf(subscriberList.getHttpCode()));
238         }
239
240         return responseEntity;
241     }
242
243
244     @RequestMapping(value = "/get_vnf_data_by_globalid_and_service_type/{globalCustomerId}/{serviceType}",
245         method = RequestMethod.GET,
246         produces = MediaType.APPLICATION_JSON_VALUE)
247     public ResponseEntity<String> getVnfDataByGlobalIdAndServiceType(
248         @PathVariable("globalCustomerId") String globalCustomerId,
249         @PathVariable("serviceType") String serviceType) throws IOException {
250
251         AaiResponse<AaiGetVnfResponse> resp = aaiService.getVNFData(globalCustomerId, serviceType);
252         return aaiResponseToResponseEntity(resp);
253     }
254
255     @RequestMapping(value = "/aai_refresh_subscribers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
256     public ResponseEntity<String> doRefreshSubscriberList() {
257         return refreshSubscriberList();
258     }
259
260     @RequestMapping(value = "/aai_refresh_full_subscribers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
261     public ResponseEntity<String> doRefreshFullSubscriberList() {
262         return refreshSubscriberList();
263     }
264
265     protected ResponseEntity<String> refreshSubscriberList() {
266         Response resp = getSubscribers();
267         return convertResponseToResponseEntity(resp);
268     }
269
270     @RequestMapping(value = "/aai_sub_details/{subscriberId}", method = RequestMethod.GET)
271     public ResponseEntity<String> getSubscriberDetails(HttpServletRequest request, @PathVariable("subscriberId") String subscriberId,
272                                                        @RequestParam(value="omitServiceInstances", required = false, defaultValue = "false") boolean omitServiceInstances) throws IOException {
273         ObjectMapper objectMapper = new ObjectMapper();
274         ResponseEntity responseEntity;
275         List<Role> roles = roleProvider.getUserRoles(request);
276         RoleValidator roleValidator = RoleValidator.by(roles);
277         AaiResponse subscriberData = aaiService.getSubscriberData(subscriberId, roleValidator, featureManager.isActive(Features.FLAG_1906_AAI_SUB_DETAILS_REDUCE_DEPTH) && omitServiceInstances);
278         String httpMessage = subscriberData.getT() != null ?
279             objectMapper.writeValueAsString(subscriberData.getT()) :
280             subscriberData.getErrorMessage();
281
282         responseEntity = new ResponseEntity<>(httpMessage, HttpStatus.valueOf(subscriberData.getHttpCode()));
283         return responseEntity;
284     }
285
286     @RequestMapping(value = "/search_service_instances", method = RequestMethod.GET)
287     public ResponseEntity<String> SearchServiceInstances(HttpServletRequest request,
288         @RequestParam(value = "subscriberId", required = false) String subscriberId,
289         @RequestParam(value = "serviceInstanceIdentifier", required = false) String instanceIdentifier,
290         @RequestParam(value = "project", required = false) List<String> projects,
291         @RequestParam(value = "owningEntity", required = false) List<String> owningEntities) throws IOException {
292         ObjectMapper objectMapper = new ObjectMapper();
293         ResponseEntity responseEntity;
294
295         List<Role> roles = roleProvider.getUserRoles(request);
296         RoleValidator roleValidator = RoleValidator.by(roles);
297
298         AaiResponse<ServiceInstancesSearchResults> searchResult = aaiService
299             .getServiceInstanceSearchResults(subscriberId, instanceIdentifier, roleValidator, owningEntities, projects);
300
301         String httpMessage = searchResult.getT() != null ?
302             objectMapper.writeValueAsString(searchResult.getT()) :
303             searchResult.getErrorMessage();
304
305         if (searchResult.getT().serviceInstances.isEmpty()) {
306             responseEntity = new ResponseEntity<>(httpMessage, HttpStatus.NOT_FOUND);
307
308         } else {
309             responseEntity = new ResponseEntity<>(httpMessage, HttpStatus.valueOf(searchResult.getHttpCode()));
310
311         }
312         return responseEntity;
313     }
314
315     @RequestMapping(value = "/aai_sub_viewedit/{namedQueryId}/{globalCustomerId}/{serviceType}/{serviceInstance}", method = RequestMethod.GET)
316     public ResponseEntity<String> viewEditGetComponentList(
317         @PathVariable("namedQueryId") String namedQueryId,
318         @PathVariable("globalCustomerId") String globalCustomerId,
319         @PathVariable("serviceType") String serviceType,
320         @PathVariable("serviceInstance") String serviceInstance) {
321
322         String componentListPayload = getComponentListPutPayload(namedQueryId, globalCustomerId, serviceType,
323             serviceInstance);
324
325         Response resp = doAaiPost("search/named-query", componentListPayload, false);
326         return convertResponseToResponseEntity(resp);
327     }
328
329     @RequestMapping(value = "/aai_get_models_by_service_type/{namedQueryId}/{globalCustomerId}/{serviceType}", method = RequestMethod.GET)
330     public ResponseEntity<String> viewEditGetComponentList(
331         @PathVariable("namedQueryId") String namedQueryId,
332         @PathVariable("globalCustomerId") String globalCustomerId,
333         @PathVariable("serviceType") String serviceType) {
334
335         String componentListPayload = getModelsByServiceTypePayload(namedQueryId, globalCustomerId, serviceType);
336
337         Response resp = doAaiPost("search/named-query", componentListPayload, false);
338         return convertResponseToResponseEntity(resp);
339     }
340
341     @RequestMapping(value = "/aai_get_vnf_instances/{globalCustomerId}/{serviceType}/{modelVersionId}/{modelInvariantId}/{cloudRegion}", method = RequestMethod.GET)
342     public ResponseEntity<String> getNodeTemplateInstances(
343         @PathVariable("globalCustomerId") String globalCustomerId,
344         @PathVariable("serviceType") String serviceType,
345         @PathVariable("modelVersionId") String modelVersionId,
346         @PathVariable("modelInvariantId") String modelInvariantId,
347         @PathVariable("cloudRegion") String cloudRegion) {
348
349         AaiResponse<String> resp = aaiService
350             .getNodeTemplateInstances(globalCustomerId, serviceType, modelVersionId, modelInvariantId, cloudRegion);
351         return new ResponseEntity<>(resp.getT(), HttpStatus.valueOf(resp.getHttpCode()));
352     }
353
354     @RequestMapping(value = "/aai_get_network_collection_details/{serviceInstanceId}", method = RequestMethod.GET)
355     public ResponseEntity<String> getNetworkCollectionDetails(
356         @PathVariable("serviceInstanceId") String serviceInstanceId) throws IOException {
357         com.fasterxml.jackson.databind.ObjectMapper objectMapper = new com.fasterxml.jackson.databind.ObjectMapper();
358         AaiResponse<String> resp = aaiService.getNetworkCollectionDetails(serviceInstanceId);
359
360         String httpMessage = resp.getT() != null ?
361             objectMapper.writeValueAsString(resp.getT()) :
362             resp.getErrorMessage();
363         return new ResponseEntity<>(httpMessage, HttpStatus.valueOf(resp.getHttpCode()));
364     }
365
366     @RequestMapping(value = "/aai_get_instance_groups_by_cloudregion/{cloudOwner}/{cloudRegionId}/{networkFunction}", method = RequestMethod.GET)
367     public ResponseEntity<String> getInstanceGroupsByCloudRegion(@PathVariable("cloudOwner") String cloudOwner,
368         @PathVariable("cloudRegionId") String cloudRegionId,
369         @PathVariable("networkFunction") String networkFunction) throws IOException {
370         com.fasterxml.jackson.databind.ObjectMapper objectMapper = new com.fasterxml.jackson.databind.ObjectMapper();
371         AaiResponse<AaiGetInstanceGroupsByCloudRegion> resp = aaiService
372             .getInstanceGroupsByCloudRegion(cloudOwner, cloudRegionId, networkFunction);
373
374         String httpMessage = resp.getT() != null ?
375             objectMapper.writeValueAsString(resp.getT()) :
376             resp.getErrorMessage();
377         return new ResponseEntity<>(httpMessage, HttpStatus.valueOf(resp.getHttpCode()));
378     }
379
380     @RequestMapping(value = "/aai_get_by_uri/**", method = RequestMethod.GET)
381     public ResponseEntity<String> getByUri(HttpServletRequest request) {
382
383         String restOfTheUrl = (String) request.getAttribute(
384             HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
385         String formattedUri = restOfTheUrl.replaceFirst("/aai_get_by_uri/", "").replaceFirst("^aai/v[\\d]+/", "");
386
387         Response resp = doAaiGet(formattedUri, false);
388
389         return convertResponseToResponseEntity(resp);
390     }
391
392     @RequestMapping(value = "/aai_get_configuration/{configuration_id}", method = RequestMethod.GET)
393     public ResponseEntity<String> getSpecificConfiguration(@PathVariable("configuration_id") String configurationId) {
394
395         Response resp = doAaiGet("network/configurations/configuration/" + configurationId, false);
396
397         return convertResponseToResponseEntity(resp);
398     }
399
400     @RequestMapping(value = "/aai_get_service_instance_pnfs/{globalCustomerId}/{serviceType}/{serviceInstanceId}", method = RequestMethod.GET)
401     public List<String> getServiceInstanceAssociatedPnfs(
402         @PathVariable("globalCustomerId") String globalCustomerId,
403         @PathVariable("serviceType") String serviceType,
404         @PathVariable("serviceInstanceId") String serviceInstanceId) {
405
406         return aaiService.getServiceInstanceAssociatedPnfs(globalCustomerId, serviceType, serviceInstanceId);
407     }
408
409     @RequestMapping(value = "/aai_get_pnfs/pnf/{pnf_id}", method = RequestMethod.GET)
410     public ResponseEntity getSpecificPnf(@PathVariable("pnf_id") String pnfId) {
411         ResponseEntity<Pnf> re;
412         try {
413             AaiResponse<Pnf> resp = aaiService.getSpecificPnf(pnfId);
414             re = new ResponseEntity<>(resp.getT(), HttpStatus.valueOf(resp.getHttpCode()));
415         } catch (Exception e) {
416             return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
417         }
418         return re;
419     }
420
421     @RequestMapping(value = "/aai_get_tenants/{global-customer-id}/{service-type}", method = RequestMethod.GET)
422     public ResponseEntity<String> viewEditGetTenantsFromServiceType(HttpServletRequest request,
423         @PathVariable("global-customer-id") String globalCustomerId, @PathVariable("service-type") String serviceType) {
424
425         ResponseEntity responseEntity;
426         try {
427             ObjectMapper objectMapper = new ObjectMapper();
428             List<Role> roles = roleProvider.getUserRoles(request);
429             RoleValidator roleValidator = RoleValidator.by(roles);
430             AaiResponse<GetTenantsResponse[]> response = aaiService
431                 .getTenants(globalCustomerId, serviceType, roleValidator);
432             if (response.getHttpCode() == 200) {
433                 responseEntity = new ResponseEntity<>(objectMapper.writeValueAsString(response.getT()),
434                     HttpStatus.OK);
435             } else {
436                 responseEntity = new ResponseEntity<>(response.getErrorMessage(),
437                     HttpStatus.valueOf(response.getHttpCode()));
438             }
439         } catch (Exception e) {
440             responseEntity = new ResponseEntity<>("Unable to proccess getTenants reponse",
441                 HttpStatus.INTERNAL_SERVER_ERROR);
442         }
443         return responseEntity;
444     }
445
446     @RequestMapping(value = "/aai_get_pnf_instances/{globalCustomerId}/{serviceType}/{modelVersionId}/{modelInvariantId}/{cloudRegion}/{equipVendor}/{equipModel}", method = RequestMethod.GET)
447     public ResponseEntity<String> getPnfInstances(
448         @PathVariable("globalCustomerId") String globalCustomerId,
449         @PathVariable("serviceType") String serviceType,
450         @PathVariable("modelVersionId") String modelVersionId,
451         @PathVariable("modelInvariantId") String modelInvariantId,
452         @PathVariable("cloudRegion") String cloudRegion,
453         @PathVariable("equipVendor") String equipVendor,
454         @PathVariable("equipModel") String equipModel) {
455
456         AaiResponse<String> resp = aaiService
457             .getPNFData(globalCustomerId, serviceType, modelVersionId, modelInvariantId, cloudRegion, equipVendor,
458                 equipModel);
459         return new ResponseEntity<>(resp.getT(), HttpStatus.valueOf(resp.getHttpCode()));
460     }
461
462     @RequestMapping(value = "/aai_getPortMirroringConfigsData", method = RequestMethod.GET)
463     public Map<String, PortMirroringConfigData> getPortMirroringConfigsData(
464         @RequestParam("configurationIds") List<String> configurationIds) {
465
466         return configurationIds.stream()
467             .map(id -> ImmutablePair.of(id, aaiService.getPortMirroringConfigData(id)))
468             .collect(Collectors.toMap(Pair::getKey, Pair::getValue));
469     }
470
471     @RequestMapping(value = "/aai_getPortMirroringSourcePorts", method = RequestMethod.GET)
472     public Map<String, Object> getPortMirroringSourcePorts(
473         @RequestParam("configurationIds") List<String> configurationIds) {
474
475         return configurationIds.stream()
476             .map(id -> ImmutablePair.of(id, aaiService.getPortMirroringSourcePorts(id)))
477             .collect(Collectors.toMap(Pair::getKey, Pair::getValue));
478     }
479
480     private ResponseEntity<String> convertResponseToResponseEntity(Response resp) {
481         ResponseEntity<String> respEnt;
482         if (resp == null) {
483             respEnt = new ResponseEntity<>("Failed to fetch data from A&AI, check server logs for details.",
484                 HttpStatus.INTERNAL_SERVER_ERROR);
485         } else {
486             respEnt = new ResponseEntity<>(resp.readEntity(String.class), HttpStatus.valueOf(resp.getStatus()));
487         }
488         return respEnt;
489     }
490
491     private Response getSubscribers() {
492
493         String depth = "0";
494
495         Response resp = doAaiGet("business/customers?subscriber-type=INFRA&depth=" + depth, false);
496         if (resp != null) {
497             LOGGER
498                 .debug(EELFLoggerDelegate.debugLogger, "<== getSubscribers() resp=" + resp.getStatusInfo().toString());
499         }
500         return resp;
501     }
502
503     protected Response doAaiGet(String uri, boolean xml) {
504         String methodName = "getSubscriberList";
505         String transId = UUID.randomUUID().toString();
506         LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== " + methodName + " start");
507
508         Response resp = null;
509         try {
510
511             resp = aaiRestInterface.RestGet(FROM_APP_ID, transId, Unchecked.toURI(uri), xml).getResponse();
512
513         } catch (WebApplicationException e) {
514             final String message = e.getResponse().readEntity(String.class);
515             LOGGER.info(EELFLoggerDelegate.errorLogger, "<== " + "." + methodName + message);
516             LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== " + "." + methodName + message);
517         } catch (Exception e) {
518             LOGGER.info(EELFLoggerDelegate.errorLogger, "<== " + "." + methodName + e.toString());
519             LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== " + "." + methodName + e.toString());
520         }
521
522         return resp;
523     }
524
525     protected Response doAaiPost(String uri, String payload, boolean xml) {
526         String methodName = "getSubscriberList";
527         LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== " + methodName + " start");
528
529         Response resp = null;
530         try {
531
532             resp = aaiRestInterface.RestPost(FROM_APP_ID, uri, payload, xml);
533
534         } catch (Exception e) {
535             LOGGER.info(EELFLoggerDelegate.errorLogger, "<== " + "." + methodName + e.toString());
536             LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== " + "." + methodName + e.toString());
537         }
538
539         return resp;
540     }
541
542     private String getComponentListPutPayload(String namedQueryId, String globalCustomerId, String serviceType,
543         String serviceInstance) {
544         return
545             "           {" +
546                 "    \"instance-filters\": {" +
547                 "        \"instance-filter\": [" +
548                 "            {" +
549                 "                \"customer\": {" +
550                 "                    \"global-customer-id\": \"" + globalCustomerId + "\"" +
551                 "                }," +
552                 "                \"service-instance\": {" +
553                 "                    \"service-instance-id\": \"" + serviceInstance + "\"" +
554                 "                }," +
555                 "                \"service-subscription\": {" +
556                 "                    \"service-type\": \"" + serviceType + "\"" +
557                 "                }" +
558                 "            }" +
559                 "        ]" +
560                 "    }," +
561                 "    \"query-parameters\": {" +
562                 "        \"named-query\": {" +
563                 "            \"named-query-uuid\": \"" + namedQueryId + "\"" +
564                 "        }" +
565                 "    }" +
566                 "}";
567
568     }
569
570     private String getModelsByServiceTypePayload(String namedQueryId, String globalCustomerId, String serviceType) {
571         // TODO Auto-generated method stub
572         return "                {" +
573             "    \"instance-filters\": {" +
574             "        \"instance-filter\": [" +
575             "            {" +
576             "                \"customer\": {" +
577             "                    \"global-customer-id\": \"" + globalCustomerId + "\"" +
578             "                }," +
579             "                \"service-subscription\": {" +
580             "                    \"service-type\": \"" + serviceType + "\"" +
581             "                }" +
582             "            }" +
583             "        ]" +
584             "    }," +
585             "    \"query-parameters\": {" +
586             "        \"named-query\": {" +
587             "            \"named-query-uuid\": \"" + namedQueryId + "\"" +
588             "        }" +
589             "    }" +
590             "}";
591
592     }
593
594     private String getAaiErrorMessage(String message) {
595         try {
596             org.json.JSONObject json = new org.json.JSONObject(message);
597             json = json.getJSONObject("requestError").getJSONObject("serviceException");
598
599             return json.getString("messageId") + ": " + json.getString("text");
600
601         } catch (Exception e) {
602             return null;
603         }
604     }
605 }