a813607ead55cb284f3550548038e0856913cd6d
[dcaegen2/services/sdk.git] /
1 /*
2  * ============LICENSE_START====================================
3  * DCAEGEN2-SERVICES-SDK
4  * =========================================================
5  * Copyright (C) 2019 Nokia. All rights reserved.
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.onap.dcaegen2.services.sdk.rest.services.cbs.client.impl.streams.gson;
22
23 import com.google.gson.Gson;
24 import com.google.gson.GsonBuilder;
25 import com.google.gson.JsonElement;
26 import com.google.gson.JsonObject;
27 import com.google.gson.JsonParser;
28 import io.vavr.Lazy;
29 import java.io.IOException;
30 import java.io.InputStreamReader;
31 import java.io.Reader;
32 import java.util.Map.Entry;
33 import java.util.concurrent.atomic.AtomicReference;
34 import java.util.stream.Collectors;
35 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.streams.GsonAdaptersAafCredentials;
36
37 /**
38  * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
39  * @since March 2019
40  */
41 final class GsonUtils {
42     private static final Lazy<Gson> GSON = Lazy.of(() -> {
43         GsonBuilder gsonBuilder = new GsonBuilder();
44         gsonBuilder.registerTypeAdapterFactory(new GsonAdaptersKafkaInfo());
45         gsonBuilder.registerTypeAdapterFactory(new GsonAdaptersAafCredentials());
46         return gsonBuilder.create();
47     });
48
49     private GsonUtils() {
50     }
51
52     static Gson gsonInstance() {
53         return GSON.get();
54     }
55
56     static void assertStreamType(JsonObject json, String expectedType) {
57         final String actualType = requiredString(json, "type");
58         if (!actualType.equals(expectedType)) {
59             throw new IllegalArgumentException("Invalid stream type. Expected '" + expectedType + "', but was '" + actualType + "'");
60         }
61     }
62
63     static String requiredString(JsonObject parent, String childName) {
64         return requiredChild(parent, childName).getAsString();
65     }
66
67     static JsonElement requiredChild(JsonObject parent, String childName) {
68         if (parent.has(childName)) {
69             return parent.get(childName);
70         } else {
71             throw new IllegalArgumentException(
72                     "Could not find sub-node '" + childName + "'. Actual sub-nodes: " + stringifyChildrenNames(parent));
73         }
74     }
75
76     static JsonObject readObjectFromResource(String resource) throws IOException {
77         return readFromResource(resource).getAsJsonObject();
78     }
79
80     static JsonElement readFromResource(String resource) throws IOException {
81         try (Reader reader = new InputStreamReader(GsonUtils.class.getResourceAsStream(resource))) {
82             return new JsonParser().parse(reader);
83         }
84     }
85
86     private static String stringifyChildrenNames(JsonObject parent) {
87         return parent.entrySet().stream().map(Entry::getKey).collect(Collectors.joining(", "));
88     }
89 }