Adding interfaces in documentation
[aai/sparky-be.git] / sparkybe-onap-service / src / main / java / org / onap / aai / sparky / search / filters / UiFiltersEntityConverter.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.List;
28
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;
34
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;
39
40 public class UiFiltersEntityConverter {
41   
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";
51   
52   /**
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.
55    * 
56    * @param entityToConvert - The UiFiltersEntity to be converted into a JSON response.
57    * @return A JsonObject representing the passed in UiFiltersEntity.
58    */
59   public static JsonObject convertUiFiltersEntityToUnifiedFilterResponse(UiFiltersEntity entityToConvert) {
60     JsonObjectBuilder filterBuilder = Json.createObjectBuilder();
61     
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));
67         }
68       }
69     }
70     
71     JsonObjectBuilder finalObject = Json.createObjectBuilder();
72     finalObject.add(KEY_FILTERS, filterBuilder.build());
73     return finalObject.build();
74   }
75   
76   /**
77    * Generates the core body of the a single filter within the JSON body.
78    * 
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.
81    */
82   private static JsonObject generateFilterObject(UiFilterEntity entity) {
83     JsonObjectBuilder filterBuilder = Json.createObjectBuilder();
84     
85     filterBuilder.add(KEY_LABEL, entity.getDisplayName());
86     filterBuilder.add(KEY_CONTROLS, generateControlObject(entity, entity.getFilterValueList()));
87     
88     return filterBuilder.build();
89   }
90   
91   /**
92    * Generates the "controls" object within the filter JSON.
93    * 
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.
98    */
99   private static JsonObject generateControlObject(UiFilterEntity filterEntity, List<UiFilterValueEntity> filterValues) {
100     JsonObjectBuilder controls = Json.createObjectBuilder();
101     JsonObjectBuilder subControl = Json.createObjectBuilder();
102   
103     subControl.add(KEY_TYPE, filterEntity.getDataType());
104     subControl.add(KEY_MULTISELECT, filterEntity.getMultiSelect());
105     subControl.add(KEY_WATERMARK, filterEntity.getWatermark());
106     
107     if(filterEntity.getDefaultValue() != null && !filterEntity.getDefaultValue().getCode().isEmpty() && !filterEntity.getDefaultValue().getDecode().isEmpty()) {
108       JsonObjectBuilder defaultValueBuilder = Json.createObjectBuilder();
109       
110       defaultValueBuilder.add(KEY_DECODE, filterEntity.getDefaultValue().getDecode());
111       defaultValueBuilder.add(KEY_CODE, filterEntity.getDefaultValue().getCode());
112       
113       subControl.add(KEY_DEFAULT_VALUE, defaultValueBuilder.build());
114     }
115     
116     if(filterEntity.getOptionsValues() == null || filterEntity.getOptionsValues().isEmpty()) {
117       subControl.add(filterEntity.getOptionsType(), generateOptionsObject(filterValues));
118     } else {
119       subControl.add(filterEntity.getOptionsType(), generateOptionsValuesObject(filterEntity.getOptionsValues()));
120     }
121     
122     controls.add(filterEntity.getFilterName(), subControl.build());
123     
124     return controls.build();
125   }
126   
127   /**
128    * Creates a JsonArray representing the list of options for a filter.
129    * Similar to function generateOptionsObject, except using different arguments.
130    * 
131    * @param optionsValues - Values that are loaded from config.
132    * @return JsonArray of options for a filter.
133    */
134   private static JsonArray generateOptionsValuesObject(List<UiFilterOptionsValuesConfig> optionsValues) {
135     JsonArrayBuilder optionsBuilder = Json.createArrayBuilder();
136     
137     if(optionsValues != null && !optionsValues.isEmpty()) {
138       for(UiFilterOptionsValuesConfig optionValue : optionsValues) {
139         JsonObjectBuilder option = Json.createObjectBuilder();
140         
141         option.add(KEY_DECODE, optionValue.getDecode());
142         option.add(KEY_CODE, optionValue.getCode());
143         
144         optionsBuilder.add(option.build());
145       }
146     }
147     
148     return optionsBuilder.build();
149   }
150   
151   /**
152    * Creates a JsonArray representing the list of options for a filter.
153    * 
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.
156    */
157   private static JsonArray generateOptionsObject(List<UiFilterValueEntity> filterValues) {
158     JsonArrayBuilder optionsBuilder = Json.createArrayBuilder();
159     
160     if(filterValues != null && !filterValues.isEmpty()) {
161       for(UiFilterValueEntity valueEntity : filterValues) {
162         JsonObjectBuilder option = Json.createObjectBuilder();
163         
164         option.add(KEY_DECODE, valueEntity.getDisplayName());
165         option.add(KEY_CODE, valueEntity.getFilterValue());
166         
167         optionsBuilder.add(option.build());
168       }
169     }
170     
171     return optionsBuilder.build();
172   }
173   
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();
179   }
180 }