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;
26 import org.oransc.policyagent.configuration.RicConfig;
27 import org.oransc.policyagent.repository.Policy;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
31 import reactor.core.publisher.Flux;
32 import reactor.core.publisher.Mono;
34 public class SdncOscA1Client implements A1Client {
35 private static final String URL_PREFIX = "/A1-ADAPTER-API:";
37 private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
39 private final String a1ControllerUsername;
40 private final String a1ControllerPassword;
41 private final RicConfig ricConfig;
42 private final AsyncRestClient restClient;
44 public SdncOscA1Client(RicConfig ricConfig, String baseUrl, String username, String password) {
45 this(ricConfig, username, password, new AsyncRestClient(baseUrl + "/restconf/operations"));
46 if (logger.isDebugEnabled()) {
47 logger.debug("SdncOscA1Client for ric: {}, a1ControllerBaseUrl: {}", ricConfig.name(), baseUrl);
51 public SdncOscA1Client(RicConfig ricConfig, String username, String password, AsyncRestClient restClient) {
52 this.ricConfig = ricConfig;
53 this.a1ControllerUsername = username;
54 this.a1ControllerPassword = password;
55 this.restClient = restClient;
59 public Mono<List<String>> getPolicyTypeIdentities() {
60 SdncOscAdapterInput inputParams = ImmutableSdncOscAdapterInput.builder() //
61 .nearRtRicUrl(ricConfig.baseUrl()) //
63 String inputJsonString = JsonHelper.createInputJsonString(inputParams);
64 logger.debug("POST getPolicyTypeIdentities inputJsonString = {}", inputJsonString);
67 .postWithAuthHeader(URL_PREFIX + "getPolicyTypeIdentities", inputJsonString, a1ControllerUsername,
68 a1ControllerPassword) //
69 .flatMap(response -> JsonHelper.getValueFromResponse(response, "policy-type-id-list")) //
70 .flatMapMany(JsonHelper::parseJsonArrayOfString) //
75 public Mono<List<String>> getPolicyIdentities() {
76 return getPolicyIds() //
81 public Mono<String> getPolicyTypeSchema(String policyTypeId) {
82 SdncOscAdapterInput inputParams = ImmutableSdncOscAdapterInput.builder() //
83 .nearRtRicUrl(ricConfig.baseUrl()) //
84 .policyTypeId(policyTypeId) //
86 String inputJsonString = JsonHelper.createInputJsonString(inputParams);
87 logger.debug("POST getPolicyType inputJsonString = {}", inputJsonString);
90 .postWithAuthHeader(URL_PREFIX + "getPolicyType", inputJsonString, a1ControllerUsername,
91 a1ControllerPassword) //
92 .flatMap(response -> JsonHelper.getValueFromResponse(response, "policy-type")) //
93 .flatMap(JsonHelper::extractPolicySchema);
97 public Mono<String> putPolicy(Policy policy) {
98 SdncOscAdapterInput inputParams = ImmutableSdncOscAdapterInput.builder() //
99 .nearRtRicUrl(ricConfig.baseUrl()) //
100 .policyTypeId(policy.type().name()) //
101 .policyId(policy.id()) //
102 .policy(policy.json()) //
104 String inputJsonString = JsonHelper.createInputJsonString(inputParams);
105 logger.debug("POST putPolicy inputJsonString = {}", inputJsonString);
108 .postWithAuthHeader(URL_PREFIX + "putPolicy", inputJsonString, a1ControllerUsername, a1ControllerPassword)
109 .flatMap(response -> JsonHelper.getValueFromResponse(response, "returned-policy")) //
110 .flatMap(JsonHelper::validateJson);
114 public Mono<String> deletePolicy(Policy policy) {
115 return deletePolicyById(policy.id());
119 public Flux<String> deleteAllPolicies() {
120 return getPolicyIds() //
121 .flatMap(this::deletePolicyById); //
125 public Mono<A1ProtocolType> getProtocolVersion() {
126 return getPolicyTypeIdentities() //
127 .flatMap(x -> Mono.just(A1ProtocolType.SDNC_OSC));
131 public Mono<String> getPolicyStatus(Policy policy) {
132 return Mono.error(new Exception("Status not implemented in the SDNC controller"));
135 private Flux<String> getPolicyIds() {
136 SdncOscAdapterInput inputParams = ImmutableSdncOscAdapterInput.builder() //
137 .nearRtRicUrl(ricConfig.baseUrl()) //
139 String inputJsonString = JsonHelper.createInputJsonString(inputParams);
140 logger.debug("POST getPolicyIdentities inputJsonString = {}", inputJsonString);
143 .postWithAuthHeader("/A1-ADAPTER-API:getPolicyIdentities", inputJsonString, a1ControllerUsername,
144 a1ControllerPassword) //
145 .flatMap(response -> JsonHelper.getValueFromResponse(response, "policy-id-list")) //
146 .flatMapMany(JsonHelper::parseJsonArrayOfString);
149 private Mono<String> deletePolicyById(String policyId) {
150 SdncOscAdapterInput inputParams = ImmutableSdncOscAdapterInput.builder() //
151 .nearRtRicUrl(ricConfig.baseUrl()) //
152 .policyId(policyId) //
155 String inputJsonString = JsonHelper.createInputJsonString(inputParams);
156 logger.debug("POST deletePolicy inputJsonString = {}", inputJsonString);
158 return restClient.postWithAuthHeader(URL_PREFIX + "deletePolicy", inputJsonString, a1ControllerUsername,
159 a1ControllerPassword);