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