d34b1440bda4fdb0d442a3f96deba3b7d3b23201
[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.JsonElement;
24 import com.google.gson.JsonObject;
25 import io.vavr.collection.Stream;
26 import java.io.IOException;
27 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.streams.DataStreamDirection;
28 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.streams.ImmutableRawDataStream;
29 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.streams.RawDataStream;
30
31 /**
32  * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
33  * @since March 2019
34  */
35 public final class DataStreamUtils {
36
37     public static Stream<RawDataStream<JsonObject>> mapJsonToStreams(JsonElement streamsJson,
38             DataStreamDirection direction) {
39         return Stream.ofAll(streamsJson.getAsJsonObject().entrySet())
40                 .map(namedSinkJson -> {
41                     final JsonObject jsonObject = namedSinkJson.getValue().getAsJsonObject();
42                     return rawDataStream(namedSinkJson.getKey(), direction, jsonObject);
43                 });
44     }
45
46     public static void assertStreamType(
47             RawDataStream<JsonObject> json,
48             String expectedType,
49             DataStreamDirection expectedDirection) {
50         if (!json.type().equals(expectedType)) {
51             throw new IllegalArgumentException(
52                     "Invalid stream type. Expected '" + expectedType + "', but was '" + json.type() + "'");
53         }
54         if (json.direction() != expectedDirection) {
55             throw new IllegalArgumentException(
56                     "Invalid stream direction. Expected '" + expectedDirection + "', but was '" + json.direction()
57                             + "'");
58         }
59     }
60
61     public static RawDataStream<JsonObject> readSourceFromResource(String resource) throws IOException {
62         return rawDataStream(resource, DataStreamDirection.SOURCE, GsonUtils.readObjectFromResource(resource));
63     }
64
65     public  static RawDataStream<JsonObject> readSinkFromResource(String resource) throws IOException {
66         return rawDataStream(resource, DataStreamDirection.SINK, GsonUtils.readObjectFromResource(resource));
67     }
68
69     private static RawDataStream<JsonObject> rawDataStream(String name, DataStreamDirection direction, JsonObject json) {
70         return ImmutableRawDataStream.<JsonObject>builder()
71                 .name(name)
72                 .direction(direction)
73                 .type(GsonUtils.requiredString(json, "type"))
74                 .descriptor(json)
75                 .build();
76     }
77 }