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