Convert Sparky to Spring-Boot
[aai/sparky-be.git] / sparkybe-onap-service / src / main / java / org / onap / aai / sparky / search / filters / FilterProcessor.java
1 /**
2  * ============LICENSE_START===================================================
3  * SPARKY (AAI UI service)
4  * ============================================================================
5  * Copyright © 2017 AT&T Intellectual Property.
6  * Copyright © 2017 Amdocs
7  * All rights reserved.
8  * ============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=====================================================
21  *
22  * ECOMP and OpenECOMP are trademarks
23  * and service marks of AT&T Intellectual Property.
24  */
25 package org.onap.aai.sparky.search.filters;
26
27 import java.util.ArrayList;
28 import java.util.List;
29
30 import javax.json.JsonObject;
31 import javax.servlet.http.HttpServletRequest;
32
33 import org.apache.camel.Exchange;
34 import org.onap.aai.cl.api.Logger;
35 import org.onap.aai.cl.eelf.LoggerFactory;
36 import org.onap.aai.sparky.logging.AaiUiMsgs;
37 import org.onap.aai.sparky.logging.util.ServletUtils;
38 import org.onap.aai.sparky.search.filters.entity.UiFilterEntity;
39 import org.onap.aai.sparky.search.filters.entity.UiFiltersEntity;
40 import org.onap.aai.sparky.viewandinspect.config.SparkyConstants;
41
42 import com.fasterxml.jackson.databind.JsonNode;
43 import com.fasterxml.jackson.databind.ObjectMapper;
44
45 public class FilterProcessor {
46   
47   private static final Logger LOG = LoggerFactory.getInstance().getLogger(FilterProcessor.class);
48   
49   private ObjectMapper mapper;
50   private FilteredSearchHelper filteredSearchHelper;
51   
52   public FilterProcessor() {
53     this.mapper = new ObjectMapper();
54   }
55   
56   public ObjectMapper getMapper() {
57     return mapper;
58   }
59
60   public FilteredSearchHelper getFilteredSearchHelper() {
61     return filteredSearchHelper;
62   }
63   
64   public void setFilteredSearchHelper(FilteredSearchHelper filteredSearchHelper) {
65     this.filteredSearchHelper = filteredSearchHelper;
66   }
67
68   public void getFiltersWithValues(Exchange exchange) {
69     
70     HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
71     ServletUtils.setUpMdcContext(exchange, request);
72     
73     UiFiltersEntity viewFiltersList = null;
74     boolean wasErrorDuringFilterDiscovery = false;
75     
76     try {
77       String payload = exchange.getIn().getBody(String.class);
78
79       if (payload == null || payload.isEmpty()) {
80         /* Don't throw back an error, just return an empty set */
81         LOG.error(AaiUiMsgs.SEARCH_SERVLET_ERROR, "Request Payload is empty");
82         wasErrorDuringFilterDiscovery = true;
83       } else {
84         String viewName = mapper.readValue(payload, JsonNode.class).get(SparkyConstants.UI_FILTER_VIEW_NAME_PARAMETER).asText();
85
86         if (viewName == null || viewName.isEmpty()) {
87           wasErrorDuringFilterDiscovery = true;
88         } else {
89           viewFiltersList = filteredSearchHelper.doFilterDiscovery(viewName);
90         }
91       }
92     } catch(Exception exc) {
93       LOG.error(AaiUiMsgs.ERROR_GENERIC, "FilterProcessor failed to get filter list due to error = " + exc.getMessage());
94       
95       exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 500);
96       
97       exchange.getOut().setBody(
98           ServletUtils.generateJsonErrorResponse("FilterProcessor failed to get filter list due to error = " + exc.getMessage()),
99           String.class);
100       
101       return;
102     }
103     
104     boolean wasErrorDuringValueSearch = false;
105     if(!wasErrorDuringFilterDiscovery) {
106       try {
107         if(!viewFiltersList.getFilters().isEmpty()) {
108           List<String> filterIds = new ArrayList<String>();
109           
110           for(UiFilterEntity filterEntity : viewFiltersList.getFilters()) {
111             filterIds.add(filterEntity.getFilterId());
112           }
113           
114           UiFiltersEntity responseFiltersList = filteredSearchHelper.doFilterEnumeration(filterIds);
115           
116           JsonObject finalResponse = UiFiltersEntityConverter.convertUiFiltersEntityToUnifiedFilterResponse(responseFiltersList);
117           exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 200);
118           exchange.getOut().setBody(finalResponse.toString());
119         } else {
120           wasErrorDuringValueSearch = true;
121         }
122       } catch(Exception exc) {
123         LOG.error(AaiUiMsgs.ERROR_GENERIC, "FilterProcessor failed to generate valid unifiedFilterRequest response due to error, " + exc.getMessage());
124
125         exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 500);
126
127         exchange.getOut().setBody(
128             ServletUtils.generateJsonErrorResponse("FilterProcessor failed to generate valid unifiedFilterRequest response due to error = " + exc.getMessage()),
129             String.class);
130         
131         return;
132       }
133     } 
134     
135     // In the case of an error we want to respond with a valid empty response
136     if(wasErrorDuringFilterDiscovery || wasErrorDuringValueSearch) {
137       //response.setStatus(Status.SUCCESS_OK);
138       //response.setEntity(UiFiltersEntityConverter.generateEmptyResponse().toString(), MediaType.APPLICATION_JSON);
139       exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 404);
140       exchange.getOut().setBody(UiFiltersEntityConverter.generateEmptyResponse().toString());
141     }
142   }
143   
144 }