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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=====================================
21 package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.impl.streams.gson;
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;
29 import io.vavr.control.Option;
30 import java.io.IOException;
31 import java.io.InputStreamReader;
32 import java.io.Reader;
33 import java.util.Map.Entry;
34 import java.util.stream.Collectors;
35 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.impl.streams.gson.dmaap.mr.GsonAdaptersMessageRouterDmaapInfo;
36 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.impl.streams.gson.kafka.GsonAdaptersKafkaInfo;
37 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.streams.GsonAdaptersAafCredentials;
38 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.streams.dmaap.GsonAdaptersDataRouterSink;
39 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.streams.dmaap.GsonAdaptersDataRouterSource;
42 * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
45 public final class GsonUtils {
47 private static final Lazy<Gson> GSON = Lazy.of(() -> {
48 GsonBuilder gsonBuilder = new GsonBuilder();
49 gsonBuilder.registerTypeAdapterFactory(new GsonAdaptersKafkaInfo());
50 gsonBuilder.registerTypeAdapterFactory(new GsonAdaptersAafCredentials());
51 gsonBuilder.registerTypeAdapterFactory(new GsonAdaptersMessageRouterDmaapInfo());
52 gsonBuilder.registerTypeAdapterFactory(new GsonAdaptersDataRouterSink());
53 gsonBuilder.registerTypeAdapterFactory(new GsonAdaptersDataRouterSource());
54 return gsonBuilder.create();
60 public static Gson gsonInstance() {
64 public static String requiredString(JsonObject parent, String childName) {
65 return requiredChild(parent, childName).getAsString();
68 public static Option<String> optionalString(JsonObject parent, String childName) {
69 return Option.of(parent.get(childName).getAsString());
72 public static JsonElement requiredChild(JsonObject parent, String childName) {
73 return optionalChild(parent, childName)
74 .getOrElseThrow(() -> new IllegalArgumentException(
75 "Could not find sub-node '" + childName + "'. Actual sub-nodes: "
76 + stringifyChildrenNames(parent)));
80 public static Option<JsonElement> optionalChild(JsonObject parent, String childName) {
81 return Option.of(parent.get(childName));
84 public static JsonObject readObjectFromResource(String resource) throws IOException {
85 return readFromResource(resource).getAsJsonObject();
88 public static JsonElement readFromResource(String resource) throws IOException {
89 try (Reader reader = new InputStreamReader(GsonUtils.class.getResourceAsStream(resource))) {
90 return new JsonParser().parse(reader);
94 private static String stringifyChildrenNames(JsonObject parent) {
95 return parent.entrySet().stream().map(Entry::getKey).collect(Collectors.joining(", "));