2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 Amdocs
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.aai.sparky.search.filters;
23 import java.util.List;
25 import javax.json.Json;
26 import javax.json.JsonArray;
27 import javax.json.JsonArrayBuilder;
28 import javax.json.JsonObject;
29 import javax.json.JsonObjectBuilder;
31 import org.onap.aai.sparky.search.filters.config.UiFilterOptionsValuesConfig;
32 import org.onap.aai.sparky.search.filters.entity.UiFilterEntity;
33 import org.onap.aai.sparky.search.filters.entity.UiFilterValueEntity;
34 import org.onap.aai.sparky.search.filters.entity.UiFiltersEntity;
36 public class UiFiltersEntityConverter {
38 private static final String KEY_TYPE = "type";
39 private static final String KEY_MULTISELECT = "multiSelect";
40 private static final String KEY_WATERMARK = "watermark";
41 private static final String KEY_CONTROLS = "controls";
42 private static final String KEY_LABEL = "label";
43 private static final String KEY_FILTERS = "filters";
44 private static final String KEY_DECODE = "decode";
45 private static final String KEY_CODE = "code";
46 private static final String KEY_DEFAULT_VALUE = "defaultValue";
49 * Converts a UiFiltersEntity into a JSON object to satisfy a new (as of 23 Oct 2017)
50 * filter library being used in the FE.
52 * @param entityToConvert - The UiFiltersEntity to be converted into a JSON response.
53 * @return A JsonObject representing the passed in UiFiltersEntity.
55 public static JsonObject convertUiFiltersEntityToUnifiedFilterResponse(UiFiltersEntity entityToConvert) {
56 JsonObjectBuilder filterBuilder = Json.createObjectBuilder();
58 if(entityToConvert != null) {
59 List<UiFilterEntity> filterEntities = entityToConvert.getFilters();
60 if(filterEntities != null) {
61 for(UiFilterEntity entity : filterEntities) {
62 filterBuilder.add(entity.getFilterId(), generateFilterObject(entity));
67 JsonObjectBuilder finalObject = Json.createObjectBuilder();
68 finalObject.add(KEY_FILTERS, filterBuilder.build());
69 return finalObject.build();
73 * Generates the core body of the a single filter within the JSON body.
75 * @param entity - The filter entity (loaded from config and populated from data store).
76 * @return A JsonObject representing the core data of a filter.
78 private static JsonObject generateFilterObject(UiFilterEntity entity) {
79 JsonObjectBuilder filterBuilder = Json.createObjectBuilder();
81 filterBuilder.add(KEY_LABEL, entity.getDisplayName());
82 filterBuilder.add(KEY_CONTROLS, generateControlObject(entity, entity.getFilterValueList()));
84 return filterBuilder.build();
88 * Generates the "controls" object within the filter JSON.
90 * @param filterEntity - The filter entity on which this filter will be based.
91 * @param filterValues - The list of values associated with the filter
92 * from data store queries.
93 * @return A JsonObject representing the "controls" object of the filter JSON.
95 private static JsonObject generateControlObject(UiFilterEntity filterEntity, List<UiFilterValueEntity> filterValues) {
96 JsonObjectBuilder controls = Json.createObjectBuilder();
97 JsonObjectBuilder subControl = Json.createObjectBuilder();
99 subControl.add(KEY_TYPE, filterEntity.getDataType());
100 subControl.add(KEY_MULTISELECT, filterEntity.getMultiSelect());
101 subControl.add(KEY_WATERMARK, filterEntity.getWatermark());
103 if(filterEntity.getDefaultValue() != null && !filterEntity.getDefaultValue().getCode().isEmpty() && !filterEntity.getDefaultValue().getDecode().isEmpty()) {
104 JsonObjectBuilder defaultValueBuilder = Json.createObjectBuilder();
106 defaultValueBuilder.add(KEY_DECODE, filterEntity.getDefaultValue().getDecode());
107 defaultValueBuilder.add(KEY_CODE, filterEntity.getDefaultValue().getCode());
109 subControl.add(KEY_DEFAULT_VALUE, defaultValueBuilder.build());
112 if(filterEntity.getOptionsValues() == null || filterEntity.getOptionsValues().isEmpty()) {
113 subControl.add(filterEntity.getOptionsType(), generateOptionsObject(filterValues));
115 subControl.add(filterEntity.getOptionsType(), generateOptionsValuesObject(filterEntity.getOptionsValues()));
118 controls.add(filterEntity.getFilterName(), subControl.build());
120 return controls.build();
124 * Creates a JsonArray representing the list of options for a filter.
125 * Similar to function generateOptionsObject, except using different arguments.
127 * @param optionsValues - Values that are loaded from config.
128 * @return JsonArray of options for a filter.
130 private static JsonArray generateOptionsValuesObject(List<UiFilterOptionsValuesConfig> optionsValues) {
131 JsonArrayBuilder optionsBuilder = Json.createArrayBuilder();
133 if(optionsValues != null && !optionsValues.isEmpty()) {
134 for(UiFilterOptionsValuesConfig optionValue : optionsValues) {
135 JsonObjectBuilder option = Json.createObjectBuilder();
137 option.add(KEY_DECODE, optionValue.getDecode());
138 option.add(KEY_CODE, optionValue.getCode());
140 optionsBuilder.add(option.build());
144 return optionsBuilder.build();
148 * Creates a JsonArray representing the list of options for a filter.
150 * @param filterValues - The list of values associates with a filter (likely from a data store query).
151 * @return JsonArray of options for a filter.
153 private static JsonArray generateOptionsObject(List<UiFilterValueEntity> filterValues) {
154 JsonArrayBuilder optionsBuilder = Json.createArrayBuilder();
156 if(filterValues != null && !filterValues.isEmpty()) {
157 for(UiFilterValueEntity valueEntity : filterValues) {
158 JsonObjectBuilder option = Json.createObjectBuilder();
160 option.add(KEY_DECODE, valueEntity.getDisplayName());
161 option.add(KEY_CODE, valueEntity.getFilterValue());
163 optionsBuilder.add(option.build());
167 return optionsBuilder.build();
170 public static JsonObject generateEmptyResponse() {
171 JsonObjectBuilder filterBuilder = Json.createObjectBuilder();
172 JsonObjectBuilder finalObject = Json.createObjectBuilder();
173 finalObject.add(KEY_FILTERS, filterBuilder.build());
174 return finalObject.build();