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