Update license and poms
[aai/sparky-be.git] / sparkybe-onap-service / src / main / java / org / onap / aai / sparky / search / filters / UiFiltersEntityConverter.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  */
21 package org.onap.aai.sparky.search.filters;
22
23 import java.util.List;
24
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;
30
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;
35
36 public class UiFiltersEntityConverter {
37   
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";
47   
48   /**
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.
51    * 
52    * @param entityToConvert - The UiFiltersEntity to be converted into a JSON response.
53    * @return A JsonObject representing the passed in UiFiltersEntity.
54    */
55   public static JsonObject convertUiFiltersEntityToUnifiedFilterResponse(UiFiltersEntity entityToConvert) {
56     JsonObjectBuilder filterBuilder = Json.createObjectBuilder();
57     
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));
63         }
64       }
65     }
66     
67     JsonObjectBuilder finalObject = Json.createObjectBuilder();
68     finalObject.add(KEY_FILTERS, filterBuilder.build());
69     return finalObject.build();
70   }
71   
72   /**
73    * Generates the core body of the a single filter within the JSON body.
74    * 
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.
77    */
78   private static JsonObject generateFilterObject(UiFilterEntity entity) {
79     JsonObjectBuilder filterBuilder = Json.createObjectBuilder();
80     
81     filterBuilder.add(KEY_LABEL, entity.getDisplayName());
82     filterBuilder.add(KEY_CONTROLS, generateControlObject(entity, entity.getFilterValueList()));
83     
84     return filterBuilder.build();
85   }
86   
87   /**
88    * Generates the "controls" object within the filter JSON.
89    * 
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.
94    */
95   private static JsonObject generateControlObject(UiFilterEntity filterEntity, List<UiFilterValueEntity> filterValues) {
96     JsonObjectBuilder controls = Json.createObjectBuilder();
97     JsonObjectBuilder subControl = Json.createObjectBuilder();
98   
99     subControl.add(KEY_TYPE, filterEntity.getDataType());
100     subControl.add(KEY_MULTISELECT, filterEntity.getMultiSelect());
101     subControl.add(KEY_WATERMARK, filterEntity.getWatermark());
102     
103     if(filterEntity.getDefaultValue() != null && !filterEntity.getDefaultValue().getCode().isEmpty() && !filterEntity.getDefaultValue().getDecode().isEmpty()) {
104       JsonObjectBuilder defaultValueBuilder = Json.createObjectBuilder();
105       
106       defaultValueBuilder.add(KEY_DECODE, filterEntity.getDefaultValue().getDecode());
107       defaultValueBuilder.add(KEY_CODE, filterEntity.getDefaultValue().getCode());
108       
109       subControl.add(KEY_DEFAULT_VALUE, defaultValueBuilder.build());
110     }
111     
112     if(filterEntity.getOptionsValues() == null || filterEntity.getOptionsValues().isEmpty()) {
113       subControl.add(filterEntity.getOptionsType(), generateOptionsObject(filterValues));
114     } else {
115       subControl.add(filterEntity.getOptionsType(), generateOptionsValuesObject(filterEntity.getOptionsValues()));
116     }
117     
118     controls.add(filterEntity.getFilterName(), subControl.build());
119     
120     return controls.build();
121   }
122   
123   /**
124    * Creates a JsonArray representing the list of options for a filter.
125    * Similar to function generateOptionsObject, except using different arguments.
126    * 
127    * @param optionsValues - Values that are loaded from config.
128    * @return JsonArray of options for a filter.
129    */
130   private static JsonArray generateOptionsValuesObject(List<UiFilterOptionsValuesConfig> optionsValues) {
131     JsonArrayBuilder optionsBuilder = Json.createArrayBuilder();
132     
133     if(optionsValues != null && !optionsValues.isEmpty()) {
134       for(UiFilterOptionsValuesConfig optionValue : optionsValues) {
135         JsonObjectBuilder option = Json.createObjectBuilder();
136         
137         option.add(KEY_DECODE, optionValue.getDecode());
138         option.add(KEY_CODE, optionValue.getCode());
139         
140         optionsBuilder.add(option.build());
141       }
142     }
143     
144     return optionsBuilder.build();
145   }
146   
147   /**
148    * Creates a JsonArray representing the list of options for a filter.
149    * 
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.
152    */
153   private static JsonArray generateOptionsObject(List<UiFilterValueEntity> filterValues) {
154     JsonArrayBuilder optionsBuilder = Json.createArrayBuilder();
155     
156     if(filterValues != null && !filterValues.isEmpty()) {
157       for(UiFilterValueEntity valueEntity : filterValues) {
158         JsonObjectBuilder option = Json.createObjectBuilder();
159         
160         option.add(KEY_DECODE, valueEntity.getDisplayName());
161         option.add(KEY_CODE, valueEntity.getFilterValue());
162         
163         optionsBuilder.add(option.build());
164       }
165     }
166     
167     return optionsBuilder.build();
168   }
169   
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();
175   }
176 }