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(", "));