6a7ed0d06eb08798f621d5fa774595e9aa2291bb
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
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  */
22 package org.onap.ccsdk.features.sdnr.wt.common.database.responses;
23
24 import org.elasticsearch.client.Response;
25 import org.json.JSONArray;
26 import org.json.JSONObject;
27 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit;
28
29 public class SearchResponse extends BaseResponse {
30
31     private long total;
32     private SearchHit[] searchHits;
33     private JSONObject aggregations;
34
35     public SearchResponse(Response response) {
36         super(response);
37         this.handleResult(this.getJson(response));
38     }
39
40     public SearchResponse(String json) {
41         super(null);
42         this.handleResult(this.getJson(json));
43     }
44
45     private void handleResult(JSONObject result) {
46         if (result != null && this.isResponseSucceeded()) {
47             JSONObject hitsouter = result.getJSONObject("hits");
48             this.total = hitsouter.getLong("total");
49             JSONArray a = hitsouter.getJSONArray("hits");
50             SearchHit[] hits = new SearchHit[a.length()];
51             for (int i = 0; i < a.length(); i++) {
52                 hits[i] = new SearchHit(a.getJSONObject(i));
53             }
54             this.searchHits = hits;
55             if (result.has("aggregations")) {
56                 this.aggregations = result.getJSONObject("aggregations");
57             } else {
58                 this.aggregations = null;
59             }
60         } else {
61             this.searchHits = new SearchHit[0];
62         }
63     }
64
65     public SearchHit[] getHits() {
66         return this.searchHits;
67     }
68
69     public long getTotal() {
70         return this.total;
71     }
72
73     public boolean hasAggregations() {
74         return this.aggregations != null;
75     }
76
77     public AggregationEntries getAggregations(String property) {
78         AggregationEntries entries = new AggregationEntries();
79         if (this.aggregations != null && this.aggregations.has(property)) {
80             JSONArray a = this.aggregations.getJSONObject(property).getJSONArray("buckets");
81             for (int i = 0; i < a.length(); i++) {
82                 entries.put(a.getJSONObject(i).getString("key"), a.getJSONObject(i).getLong("doc_count"));
83             }
84         }
85         return entries;
86     }
87 }