2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
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=========================================================
22 package org.onap.ccsdk.features.sdnr.wt.common.database.responses;
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;
30 public class SearchResponse extends BaseResponse {
33 private SearchHit[] searchHits;
34 private JSONObject aggregations;
36 public SearchResponse(Response response) {
38 this.handleResult(this.getJson(response));
41 public SearchResponse(String json) {
43 this.handleResult(this.getJson(json));
46 private void handleResult(JSONObject result) {
47 if (result != null && this.isResponseSucceeded()) {
48 JSONObject hitsouter = result.getJSONObject("hits");
49 this.total = this.getTotalFromHits(hitsouter);
50 JSONArray a = hitsouter.getJSONArray("hits");
51 SearchHit[] hits = new SearchHit[a.length()];
52 for (int i = 0; i < a.length(); i++) {
53 hits[i] = new SearchHit(a.getJSONObject(i));
55 this.searchHits = hits;
56 if (result.has("aggregations")) {
57 this.aggregations = result.getJSONObject("aggregations");
59 this.aggregations = null;
62 this.searchHits = new SearchHit[0];
66 public SearchHit[] getHits() {
67 return this.searchHits;
70 public long getTotal() {
74 public boolean hasAggregations() {
75 return this.aggregations != null;
78 public AggregationEntries getAggregations(String property) {
79 AggregationEntries entries = new AggregationEntries();
80 if (this.aggregations != null && this.aggregations.has(property)) {
81 JSONArray a = this.aggregations.getJSONObject(property).getJSONArray("buckets");
82 for (int i = 0; i < a.length(); i++) {
83 entries.put(a.getJSONObject(i).getString("key"), a.getJSONObject(i).getLong("doc_count"));
93 private long getTotalFromHits(JSONObject hits) {
94 Object o = hits.get("total");
95 if (o instanceof Long || o instanceof Integer) {
96 return hits.getLong("total");
97 } else if (o instanceof JSONObject) {
98 return hits.getJSONObject("total").getLong("value");