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