750008d8c1666682e2a90f4943d224f7f1e05379
[ccsdk/oran.git] /
1 /*-
2  * ========================LICENSE_START=================================
3  * ONAP : ccsdk oran
4  * ======================================================================
5  * Copyright (C) 2019-2020 Nordix Foundation. 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.ccsdk.oran.a1policymanagementservice.clients;
22
23 import java.util.Arrays;
24 import java.util.List;
25 import java.util.Set;
26
27 import org.onap.ccsdk.oran.a1policymanagementservice.configuration.RicConfig;
28 import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policy;
29
30 import reactor.core.publisher.Flux;
31 import reactor.core.publisher.Mono;
32
33 /**
34  * Client for accessing standard A1 REST API version 1.1
35  */
36 public class StdA1ClientVersion1 implements A1Client {
37
38     public static class UriBuilder implements A1UriBuilder {
39
40         private final RicConfig ricConfig;
41
42         public UriBuilder(RicConfig ricConfig) {
43             this.ricConfig = ricConfig;
44         }
45
46         /**
47          * /A1-P/v1/policies/{policyId}
48          */
49         @Override
50         public String createPutPolicyUri(String type, String policyId, String statusNotificationUri) {
51             return policiesBaseUri() + policyId;
52         }
53
54         /**
55          * /A1-P/v1/policies
56          */
57         @Override
58         public String createGetPolicyIdsUri(String type) {
59             return baseUri() + "/policies";
60         }
61
62         /**
63          * /A1-P/v1/policies/{policyId}
64          */
65         @Override
66         public String createDeleteUri(String type, String policyId) {
67             return policiesBaseUri() + policyId;
68         }
69
70         /**
71          * /A1-P/v1/policies/{policyId}/status
72          */
73         @Override
74         public String createGetPolicyStatusUri(String type, String policyId) {
75             return policiesBaseUri() + policyId + "/status";
76         }
77
78         private String baseUri() {
79             return ricConfig.getBaseUrl() + "/A1-P/v1";
80         }
81
82         private String policiesBaseUri() {
83             return createGetPolicyIdsUri("") + "/";
84         }
85
86         @Override
87         public String createPolicyTypesUri() {
88             throw new NullPointerException("Not supported URI");
89         }
90
91         @Override
92         public String createGetSchemaUri(String type) {
93             throw new NullPointerException("Not supported URI");
94         }
95     }
96
97     private final AsyncRestClient restClient;
98     private final UriBuilder uri;
99
100     public StdA1ClientVersion1(RicConfig ricConfig, AsyncRestClientFactory restClientFactory) {
101         this(restClientFactory.createRestClientUseHttpProxy(""), ricConfig);
102     }
103
104     public StdA1ClientVersion1(AsyncRestClient restClient, RicConfig ricConfig) {
105         this.restClient = restClient;
106         this.uri = new UriBuilder(ricConfig);
107     }
108
109     @Override
110     public Mono<List<String>> getPolicyIdentities() {
111         return getPolicyIds() //
112                 .collectList();
113     }
114
115     @Override
116     public Mono<String> putPolicy(Policy policy) {
117         return restClient.put(
118                 uri.createPutPolicyUri(policy.getType().getId(), policy.getId(), policy.getStatusNotificationUri()),
119                 policy.getJson());
120     }
121
122     @Override
123     public Mono<List<String>> getPolicyTypeIdentities() {
124         return Mono.just(Arrays.asList(""));
125     }
126
127     @Override
128     public Mono<String> getPolicyTypeSchema(String policyTypeId) {
129         return Mono.just("{}");
130     }
131
132     @Override
133     public Mono<String> deletePolicy(Policy policy) {
134         return deletePolicyById(policy.getId());
135     }
136
137     @Override
138     public Flux<String> deleteAllPolicies(Set<String> excludePolicyIds) {
139         return getPolicyIds() //
140                 .filter(policyId -> !excludePolicyIds.contains(policyId)) //
141                 .flatMap(this::deletePolicyById); //
142     }
143
144     @Override
145     public Mono<A1ProtocolType> getProtocolVersion() {
146         return getPolicyIdentities() //
147                 .flatMap(x -> Mono.just(A1ProtocolType.STD_V1_1));
148     }
149
150     @Override
151     public Mono<String> getPolicyStatus(Policy policy) {
152         return restClient.get(uri.createGetPolicyStatusUri(policy.getType().getId(), policy.getId()));
153     }
154
155     private Flux<String> getPolicyIds() {
156         return restClient.get(uri.createGetPolicyIdsUri("")) //
157                 .flatMapMany(A1AdapterJsonHelper::parseJsonArrayOfString);
158     }
159
160     private Mono<String> deletePolicyById(String policyId) {
161         return restClient.delete(uri.createDeleteUri("", policyId));
162     }
163 }