737892689b905d18fe4e1fccb79bcbebf7c3f562
[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 package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api;
21
22 import com.google.gson.JsonElement;
23 import com.google.gson.JsonObject;
24 import java.time.Duration;
25 import reactor.core.publisher.Flux;
26 import reactor.core.publisher.Mono;
27 import org.jetbrains.annotations.NotNull;
28
29 /**
30  * <p>Main Config Binding Service client interface.</p>
31  *
32  * <p>User should use this interface to subscribe to events published when CBS client fetches configuration.</p>
33  *
34  * @since 1.1.2
35  */
36 public interface CbsClient {
37
38     /**
39      * Get reactive configuration stream.
40      * <p>
41      * Returns a {@link Mono} that publishes new configuration after CBS client retrieves one.
42      *
43      * @return reactive stream of configuration
44      * @since 1.1.2
45      */
46     @NotNull Mono<JsonObject> get();
47
48
49     /**
50      * Poll for configuration.
51      *
52      * Will call {@link #get()} after {@code initialDelay} every {@code period}. Resulting entries may or may not be
53      * changed, ie. items in the stream might be the same until change is made in CBS.
54      *
55      * @param initialDelay delay after first request attempt
56      * @param period frequency of update checks
57      * @return stream of configuration states
58      */
59     default Flux<JsonElement> get(Duration initialDelay, Duration period) {
60         return Flux.interval(initialDelay, period)
61                 .flatMap(i -> get());
62     }
63 }