Change formatting of API documentation
[nonrtric.git] / policy-agent / src / main / java / org / oransc / policyagent / clients / SdncJsonHelper.java
1 /*-
2  * ========================LICENSE_START=================================
3  * O-RAN-SC
4  * %%
5  * Copyright (C) 2020 Nordix Foundation
6  * %%
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ========================LICENSE_END===================================
19  */
20
21 package org.oransc.policyagent.clients;
22
23 import com.google.gson.FieldNamingPolicy;
24 import com.google.gson.Gson;
25 import com.google.gson.GsonBuilder;
26 import com.google.gson.JsonElement;
27 import com.google.gson.JsonObject;
28
29 import java.lang.invoke.MethodHandles;
30 import java.util.ArrayList;
31 import java.util.List;
32
33 import org.json.JSONArray;
34 import org.json.JSONException;
35 import org.json.JSONObject;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38
39 import reactor.core.publisher.Flux;
40 import reactor.core.publisher.Mono;
41
42 /**
43  * Common json functionality used by the SDNC clients
44  */
45 @SuppressWarnings("java:S1192") // Same text in several traces
46 class SdncJsonHelper {
47     private static Gson gson = new GsonBuilder() //
48         .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES) //
49         .create();
50     private static final String OUTPUT = "output";
51     private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
52
53     private SdncJsonHelper() {
54     }
55
56     public static Flux<String> parseJsonArrayOfString(String inputString) {
57         try {
58             List<String> arrayList = new ArrayList<>();
59             if (!inputString.isEmpty()) {
60                 JSONArray jsonArray = new JSONArray(inputString);
61                 for (int i = 0; i < jsonArray.length(); i++) {
62                     arrayList.add(jsonArray.getString(i));
63                 }
64             }
65             return Flux.fromIterable(arrayList);
66         } catch (JSONException ex) { // invalid json
67             logger.debug("Invalid json {}", ex.getMessage());
68             return Flux.error(ex);
69         }
70     }
71
72     public static <T> String createInputJsonString(T params) {
73         JsonElement paramsJson = gson.toJsonTree(params);
74         JsonObject jsonObj = new JsonObject();
75         jsonObj.add("input", paramsJson);
76         return gson.toJson(jsonObj);
77     }
78
79     public static <T> String createOutputJsonString(T params) {
80         JsonElement paramsJson = gson.toJsonTree(params);
81         JsonObject jsonObj = new JsonObject();
82         jsonObj.add(OUTPUT, paramsJson);
83         return gson.toJson(jsonObj);
84     }
85
86     public static Mono<JSONObject> getOutput(String response) {
87         try {
88             JSONObject outputJson = new JSONObject(response);
89             JSONObject responseParams = outputJson.getJSONObject(OUTPUT);
90             return Mono.just(responseParams);
91         } catch (JSONException ex) { // invalid json
92             logger.debug("Invalid json {}", ex.getMessage());
93             return Mono.error(ex);
94         }
95     }
96
97     public static Mono<String> getValueFromResponse(String response, String key) {
98         return getOutput(response) //
99             .flatMap(responseParams -> {
100                 if (!responseParams.has(key)) {
101                     return Mono.just("");
102                 }
103                 String value = responseParams.get(key).toString();
104                 return Mono.just(value);
105             });
106     }
107
108     public static Mono<String> extractPolicySchema(String inputString) {
109         try {
110             JSONObject jsonObject = new JSONObject(inputString);
111             JSONObject schemaObject = jsonObject.getJSONObject("policySchema");
112             String schemaString = schemaObject.toString();
113             return Mono.just(schemaString);
114         } catch (JSONException ex) { // invalid json
115             logger.debug("Invalid json {}", ex.getMessage());
116             return Mono.error(ex);
117         }
118     }
119 }