648b7a61b6aa7bfd83a04352397e0cf526c381be
[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.api.streams;
22
23 import com.google.gson.JsonElement;
24 import com.google.gson.JsonObject;
25 import io.vavr.collection.Stream;
26 import org.onap.dcaegen2.services.sdk.rest.services.annotations.ExperimentalApi;
27 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.impl.streams.gson.DataStreamUtils;
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.RawDataStream;
30
31 /**
32  * Extract streams from the application configuration represented as GSON JsonObject.
33  *
34  * Example input:
35  * <pre>
36  * {
37  *     "application_config_1": "value_1,
38  *     ...
39  *     "streams_publishes": {
40  *         "stream1": {
41  *             "type": "message_router",
42  *             "dmaap_info": {
43  *                 ...
44  *             }
45  *         },
46  *         "stream2": {
47  *             "type": "data_router",
48  *             "dmaap_info": {
49  *                 ...
50  *             }
51  *         }
52  *     },
53  *     "streams_subscribes": {
54  *         "stream3": {
55  *             "type": "message_router",
56  *             "dmaap_info": {
57  *                 ...
58  *             }
59  *         },
60  *     }
61  * }
62  * </pre>
63  *
64  * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
65  * @since 1.1.4
66  */
67 @ExperimentalApi
68 public final class DataStreams {
69
70     private DataStreams() {
71     }
72
73     /**
74      * <p>
75      * Extracts sources from application configuration. Parses <em>streams_subscribes</em> subtree.
76      * </p>
77      *
78      * <p>
79      * For sample input it will yield:
80      * </p>
81      *
82      * <pre>
83      * [
84      *     RawDataStream{
85      *         name="stream3"
86      *         type="message_router"
87      *         direction=SOURCE
88      *         descriptor=JsonObject{
89      *             type: "message_router",
90      *             dmaap_info: {
91      *                 ...
92      *             }
93      *         }
94      *     }
95      * ]
96      * </pre>
97      *
98      * @param rootJson - the full application configuration
99      * @return io.vavr.collection.Stream of data streams
100      */
101     public static Stream<RawDataStream<JsonObject>> namedSources(JsonObject rootJson) {
102         return createCollectionOfStreams(rootJson, DataStreamDirection.SOURCE);
103     }
104
105
106     /**
107      * <p>
108      * Extracts sinks from application configuration. Parses <em>streams_publishes</em> subtree.
109      * </p>
110      *
111      * <p>
112      * For sample input it will yield:
113      * </p>
114      *
115      * <pre>
116      * [
117      *     RawDataStream{
118      *         name="stream1"
119      *         type="message_router"
120      *         direction=SINK
121      *         descriptor=JsonObject{
122      *             type: "message_router",
123      *             dmaap_info: {
124      *                 ...
125      *             }
126      *         }
127      *     },
128      *     RawDataStream{
129      *         name="stream2"
130      *         type="data_router"
131      *         direction=SINK
132      *         descriptor=JsonObject{
133      *             type: "data_router"
134      *             dmaap_info: {
135      *                 ...
136      *             }
137      *         }
138      *     }
139      * ]
140      * </pre>
141      *
142      * @param rootJson - the full application configuration
143      * @return io.vavr.collection.Stream of data streams
144      */
145     public static Stream<RawDataStream<JsonObject>> namedSinks(JsonObject rootJson) {
146         return createCollectionOfStreams(rootJson, DataStreamDirection.SINK);
147     }
148
149     private static Stream<RawDataStream<JsonObject>> createCollectionOfStreams(JsonObject rootJson, DataStreamDirection direction) {
150         final JsonElement streamsJson = rootJson.get(direction.configurationKey());
151         return streamsJson == null
152                 ? Stream.empty()
153                 : DataStreamUtils.mapJsonToStreams(streamsJson, direction);
154     }
155
156
157 }