2 * ========================LICENSE_START=================================
5 * Copyright (C) 2020 Nordix Foundation
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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===================================
21 package org.oransc.policyagent.clients;
23 import java.lang.invoke.MethodHandles;
24 import java.util.List;
25 import org.oransc.policyagent.configuration.RicConfig;
26 import org.oransc.policyagent.repository.Policy;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29 import reactor.core.publisher.Flux;
30 import reactor.core.publisher.Mono;
32 public class SdncOscA1Client implements A1Client {
33 private static final String URL_PREFIX = "/A1-ADAPTER-API:";
35 private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
37 private final String a1ControllerUsername;
38 private final String a1ControllerPassword;
39 private final RicConfig ricConfig;
40 private final AsyncRestClient restClient;
42 public SdncOscA1Client(RicConfig ricConfig, String baseUrl, String username, String password) {
43 this(ricConfig, username, password, new AsyncRestClient(baseUrl + "/restconf/operations"));
44 if (logger.isDebugEnabled()) {
45 logger.debug("SdncOscA1Client for ric: {}, a1ControllerBaseUrl: {}", ricConfig.name(), baseUrl);
49 public SdncOscA1Client(RicConfig ricConfig, String username, String password, AsyncRestClient restClient) {
50 this.ricConfig = ricConfig;
51 this.a1ControllerUsername = username;
52 this.a1ControllerPassword = password;
53 this.restClient = restClient;
57 public Mono<List<String>> getPolicyTypeIdentities() {
58 SdncOscAdapterInput inputParams = ImmutableSdncOscAdapterInput.builder() //
59 .nearRtRicUrl(ricConfig.baseUrl()) //
61 String inputJsonString = JsonHelper.createInputJsonString(inputParams);
62 logger.debug("POST getPolicyTypeIdentities inputJsonString = {}", inputJsonString);
65 .postWithAuthHeader(URL_PREFIX + "getPolicyTypeIdentities", inputJsonString, a1ControllerUsername,
66 a1ControllerPassword) //
67 .flatMap(response -> JsonHelper.getValueFromResponse(response, "policy-type-id-list")) //
68 .flatMapMany(JsonHelper::parseJsonArrayOfString) //
73 public Mono<List<String>> getPolicyIdentities() {
74 return getPolicyIds() //
79 public Mono<String> getPolicyTypeSchema(String policyTypeId) {
80 SdncOscAdapterInput inputParams = ImmutableSdncOscAdapterInput.builder() //
81 .nearRtRicUrl(ricConfig.baseUrl()) //
82 .policyTypeId(policyTypeId) //
84 String inputJsonString = JsonHelper.createInputJsonString(inputParams);
85 logger.debug("POST getPolicyType inputJsonString = {}", inputJsonString);
88 .postWithAuthHeader(URL_PREFIX + "getPolicyType", inputJsonString, a1ControllerUsername,
89 a1ControllerPassword) //
90 .flatMap(response -> JsonHelper.getValueFromResponse(response, "policy-type")) //
91 .flatMap(JsonHelper::extractPolicySchema);
95 public Mono<String> putPolicy(Policy policy) {
96 SdncOscAdapterInput inputParams = ImmutableSdncOscAdapterInput.builder() //
97 .nearRtRicUrl(ricConfig.baseUrl()) //
98 .policyTypeId(policy.type().name()) //
99 .policyId(policy.id()) //
100 .policy(policy.json()) //
102 String inputJsonString = JsonHelper.createInputJsonString(inputParams);
103 logger.debug("POST putPolicy inputJsonString = {}", inputJsonString);
106 .postWithAuthHeader(URL_PREFIX + "putPolicy", inputJsonString, a1ControllerUsername, a1ControllerPassword)
107 .flatMap(response -> JsonHelper.getValueFromResponse(response, "returned-policy")) //
108 .flatMap(JsonHelper::validateJson);
112 public Mono<String> deletePolicy(Policy policy) {
113 return deletePolicyById(policy.id());
117 public Flux<String> deleteAllPolicies() {
118 return getPolicyIds() //
119 .flatMap(this::deletePolicyById); //
123 public Mono<A1ProtocolType> getProtocolVersion() {
124 return getPolicyTypeIdentities() //
125 .flatMap(x -> Mono.just(A1ProtocolType.SDNC_OSC));
129 public Mono<String> getPolicyStatus(Policy policy) {
130 return Mono.error(new Exception("Status not implemented in the SDNC controller"));
133 private Flux<String> getPolicyIds() {
134 SdncOscAdapterInput inputParams = ImmutableSdncOscAdapterInput.builder() //
135 .nearRtRicUrl(ricConfig.baseUrl()) //
137 String inputJsonString = JsonHelper.createInputJsonString(inputParams);
138 logger.debug("POST getPolicyIdentities inputJsonString = {}", inputJsonString);
141 .postWithAuthHeader("/A1-ADAPTER-API:getPolicyIdentities", inputJsonString, a1ControllerUsername,
142 a1ControllerPassword) //
143 .flatMap(response -> JsonHelper.getValueFromResponse(response, "policy-id-list")) //
144 .flatMapMany(JsonHelper::parseJsonArrayOfString);
147 private Mono<String> deletePolicyById(String policyId) {
148 SdncOscAdapterInput inputParams = ImmutableSdncOscAdapterInput.builder() //
149 .nearRtRicUrl(ricConfig.baseUrl()) //
150 .policyId(policyId) //
153 String inputJsonString = JsonHelper.createInputJsonString(inputParams);
154 logger.debug("POST deletePolicy inputJsonString = {}", inputJsonString);
156 return restClient.postWithAuthHeader(URL_PREFIX + "deletePolicy", inputJsonString, a1ControllerUsername,
157 a1ControllerPassword);