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