2 * ============LICENSE_START===================================================
3 * SPARKY (AAI UI service)
4 * ============================================================================
5 * Copyright © 2017 AT&T Intellectual Property.
6 * Copyright © 2017 Amdocs
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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=====================================================
22 * ECOMP and OpenECOMP are trademarks
23 * and service marks of AT&T Intellectual Property.
25 package org.onap.aai.sparky.search.filters;
27 import java.util.ArrayList;
28 import java.util.List;
30 import javax.json.JsonObject;
31 import javax.servlet.http.HttpServletRequest;
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;
42 import com.fasterxml.jackson.databind.JsonNode;
43 import com.fasterxml.jackson.databind.ObjectMapper;
45 public class FilterProcessor {
47 private static final Logger LOG = LoggerFactory.getInstance().getLogger(FilterProcessor.class);
49 private ObjectMapper mapper;
50 private FilteredSearchHelper filteredSearchHelper;
52 public FilterProcessor() {
53 this.mapper = new ObjectMapper();
56 public ObjectMapper getMapper() {
60 public FilteredSearchHelper getFilteredSearchHelper() {
61 return filteredSearchHelper;
64 public void setFilteredSearchHelper(FilteredSearchHelper filteredSearchHelper) {
65 this.filteredSearchHelper = filteredSearchHelper;
68 public void getFiltersWithValues(Exchange exchange) {
70 HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
71 ServletUtils.setUpMdcContext(exchange, request);
73 UiFiltersEntity viewFiltersList = null;
74 boolean wasErrorDuringFilterDiscovery = false;
77 String payload = exchange.getIn().getBody(String.class);
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;
84 String viewName = mapper.readValue(payload, JsonNode.class).get(SparkyConstants.UI_FILTER_VIEW_NAME_PARAMETER).asText();
86 if (viewName == null || viewName.isEmpty()) {
87 wasErrorDuringFilterDiscovery = true;
89 viewFiltersList = filteredSearchHelper.doFilterDiscovery(viewName);
92 } catch(Exception exc) {
93 LOG.error(AaiUiMsgs.ERROR_GENERIC, "FilterProcessor failed to get filter list due to error = " + exc.getMessage());
95 exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 500);
97 exchange.getOut().setBody(
98 ServletUtils.generateJsonErrorResponse("FilterProcessor failed to get filter list due to error = " + exc.getMessage()),
104 boolean wasErrorDuringValueSearch = false;
105 if(!wasErrorDuringFilterDiscovery) {
107 if(!viewFiltersList.getFilters().isEmpty()) {
108 List<String> filterIds = new ArrayList<String>();
110 for(UiFilterEntity filterEntity : viewFiltersList.getFilters()) {
111 filterIds.add(filterEntity.getFilterId());
114 UiFiltersEntity responseFiltersList = filteredSearchHelper.doFilterEnumeration(filterIds);
116 JsonObject finalResponse = UiFiltersEntityConverter.convertUiFiltersEntityToUnifiedFilterResponse(responseFiltersList);
117 exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 200);
118 exchange.getOut().setBody(finalResponse.toString());
120 wasErrorDuringValueSearch = true;
122 } catch(Exception exc) {
123 LOG.error(AaiUiMsgs.ERROR_GENERIC, "FilterProcessor failed to generate valid unifiedFilterRequest response due to error, " + exc.getMessage());
125 exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 500);
127 exchange.getOut().setBody(
128 ServletUtils.generateJsonErrorResponse("FilterProcessor failed to generate valid unifiedFilterRequest response due to error = " + exc.getMessage()),
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());