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.List;
29 import javax.json.Json;
30 import javax.json.JsonArray;
31 import javax.json.JsonArrayBuilder;
32 import javax.json.JsonObject;
33 import javax.json.JsonObjectBuilder;
35 import org.onap.aai.sparky.search.filters.config.UiFilterOptionsValuesConfig;
36 import org.onap.aai.sparky.search.filters.entity.UiFilterEntity;
37 import org.onap.aai.sparky.search.filters.entity.UiFilterValueEntity;
38 import org.onap.aai.sparky.search.filters.entity.UiFiltersEntity;
40 public class UiFiltersEntityConverter {
42 private static final String KEY_TYPE = "type";
43 private static final String KEY_MULTISELECT = "multiSelect";
44 private static final String KEY_WATERMARK = "watermark";
45 private static final String KEY_CONTROLS = "controls";
46 private static final String KEY_LABEL = "label";
47 private static final String KEY_FILTERS = "filters";
48 private static final String KEY_DECODE = "decode";
49 private static final String KEY_CODE = "code";
50 private static final String KEY_DEFAULT_VALUE = "defaultValue";
53 * Converts a UiFiltersEntity into a JSON object to satisfy a new (as of 23 Oct 2017)
54 * filter library being used in the FE.
56 * @param entityToConvert - The UiFiltersEntity to be converted into a JSON response.
57 * @return A JsonObject representing the passed in UiFiltersEntity.
59 public static JsonObject convertUiFiltersEntityToUnifiedFilterResponse(UiFiltersEntity entityToConvert) {
60 JsonObjectBuilder filterBuilder = Json.createObjectBuilder();
62 if(entityToConvert != null) {
63 List<UiFilterEntity> filterEntities = entityToConvert.getFilters();
64 if(filterEntities != null) {
65 for(UiFilterEntity entity : filterEntities) {
66 filterBuilder.add(entity.getFilterId(), generateFilterObject(entity));
71 JsonObjectBuilder finalObject = Json.createObjectBuilder();
72 finalObject.add(KEY_FILTERS, filterBuilder.build());
73 return finalObject.build();
77 * Generates the core body of the a single filter within the JSON body.
79 * @param entity - The filter entity (loaded from config and populated from data store).
80 * @return A JsonObject representing the core data of a filter.
82 private static JsonObject generateFilterObject(UiFilterEntity entity) {
83 JsonObjectBuilder filterBuilder = Json.createObjectBuilder();
85 filterBuilder.add(KEY_LABEL, entity.getDisplayName());
86 filterBuilder.add(KEY_CONTROLS, generateControlObject(entity, entity.getFilterValueList()));
88 return filterBuilder.build();
92 * Generates the "controls" object within the filter JSON.
94 * @param filterEntity - The filter entity on which this filter will be based.
95 * @param filterValues - The list of values associated with the filter
96 * from data store queries.
97 * @return A JsonObject representing the "controls" object of the filter JSON.
99 private static JsonObject generateControlObject(UiFilterEntity filterEntity, List<UiFilterValueEntity> filterValues) {
100 JsonObjectBuilder controls = Json.createObjectBuilder();
101 JsonObjectBuilder subControl = Json.createObjectBuilder();
103 subControl.add(KEY_TYPE, filterEntity.getDataType());
104 subControl.add(KEY_MULTISELECT, filterEntity.getMultiSelect());
105 subControl.add(KEY_WATERMARK, filterEntity.getWatermark());
107 if(filterEntity.getDefaultValue() != null && !filterEntity.getDefaultValue().getCode().isEmpty() && !filterEntity.getDefaultValue().getDecode().isEmpty()) {
108 JsonObjectBuilder defaultValueBuilder = Json.createObjectBuilder();
110 defaultValueBuilder.add(KEY_DECODE, filterEntity.getDefaultValue().getDecode());
111 defaultValueBuilder.add(KEY_CODE, filterEntity.getDefaultValue().getCode());
113 subControl.add(KEY_DEFAULT_VALUE, defaultValueBuilder.build());
116 if(filterEntity.getOptionsValues() == null || filterEntity.getOptionsValues().isEmpty()) {
117 subControl.add(filterEntity.getOptionsType(), generateOptionsObject(filterValues));
119 subControl.add(filterEntity.getOptionsType(), generateOptionsValuesObject(filterEntity.getOptionsValues()));
122 controls.add(filterEntity.getFilterName(), subControl.build());
124 return controls.build();
128 * Creates a JsonArray representing the list of options for a filter.
129 * Similar to function generateOptionsObject, except using different arguments.
131 * @param optionsValues - Values that are loaded from config.
132 * @return JsonArray of options for a filter.
134 private static JsonArray generateOptionsValuesObject(List<UiFilterOptionsValuesConfig> optionsValues) {
135 JsonArrayBuilder optionsBuilder = Json.createArrayBuilder();
137 if(optionsValues != null && !optionsValues.isEmpty()) {
138 for(UiFilterOptionsValuesConfig optionValue : optionsValues) {
139 JsonObjectBuilder option = Json.createObjectBuilder();
141 option.add(KEY_DECODE, optionValue.getDecode());
142 option.add(KEY_CODE, optionValue.getCode());
144 optionsBuilder.add(option.build());
148 return optionsBuilder.build();
152 * Creates a JsonArray representing the list of options for a filter.
154 * @param filterValues - The list of values associates with a filter (likely from a data store query).
155 * @return JsonArray of options for a filter.
157 private static JsonArray generateOptionsObject(List<UiFilterValueEntity> filterValues) {
158 JsonArrayBuilder optionsBuilder = Json.createArrayBuilder();
160 if(filterValues != null && !filterValues.isEmpty()) {
161 for(UiFilterValueEntity valueEntity : filterValues) {
162 JsonObjectBuilder option = Json.createObjectBuilder();
164 option.add(KEY_DECODE, valueEntity.getDisplayName());
165 option.add(KEY_CODE, valueEntity.getFilterValue());
167 optionsBuilder.add(option.build());
171 return optionsBuilder.build();
174 public static JsonObject generateEmptyResponse() {
175 JsonObjectBuilder filterBuilder = Json.createObjectBuilder();
176 JsonObjectBuilder finalObject = Json.createObjectBuilder();
177 finalObject.add(KEY_FILTERS, filterBuilder.build());
178 return finalObject.build();