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