From 988f2af648a069ae86a4d9fc9499b80716ca8443 Mon Sep 17 00:00:00 2001 From: ecaiyanlinux Date: Tue, 27 Oct 2020 20:40:57 +0100 Subject: Remove code for sdnc onap controller sdnc onap controller is dismissed rename SdncOscA1Client to CcsdkA1AdapterClient rename SdncJsonHelper to A1AdapterJsonHelper update comments accordingly Signed-off-by: ecaiyanlinux Issue-ID: CCSDK-2502 Change-Id: If525dab599f9fd28203e85dcd57c010c67e20a8b --- .../clients/A1AdapterJsonHelper.java | 119 ++++++++ .../clients/A1Client.java | 7 +- .../clients/A1ClientFactory.java | 11 +- .../clients/CcsdkA1AdapterClient.java | 304 +++++++++++++++++++++ .../clients/OscA1Client.java | 4 +- .../clients/SdncJsonHelper.java | 119 -------- .../clients/SdncOnapA1Client.java | 194 ------------- .../clients/SdncOscA1Client.java | 304 --------------------- .../clients/StdA1ClientVersion1.java | 2 +- .../clients/StdA1ClientVersion2.java | 4 +- 10 files changed, 435 insertions(+), 633 deletions(-) create mode 100644 a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1AdapterJsonHelper.java create mode 100644 a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/CcsdkA1AdapterClient.java delete mode 100644 a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncJsonHelper.java delete mode 100644 a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncOnapA1Client.java delete mode 100644 a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncOscA1Client.java (limited to 'a1-policy-management/src/main/java/org') diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1AdapterJsonHelper.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1AdapterJsonHelper.java new file mode 100644 index 00000000..c72f196a --- /dev/null +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1AdapterJsonHelper.java @@ -0,0 +1,119 @@ +/*- + * ========================LICENSE_START================================= + * ONAP : ccsdk oran + * ====================================================================== + * Copyright (C) 2020 Nordix Foundation. All rights reserved. + * ====================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================LICENSE_END=================================== + */ + +package org.onap.ccsdk.oran.a1policymanagementservice.clients; + +import com.google.gson.FieldNamingPolicy; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import java.lang.invoke.MethodHandles; +import java.util.ArrayList; +import java.util.List; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +/** + * Common json functionality used by the CCSDK A1 Adapter clients + */ +@SuppressWarnings("java:S1192") // Same text in several traces +class A1AdapterJsonHelper { + private static Gson gson = new GsonBuilder() // + .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES) // + .create(); + private static final String OUTPUT = "output"; + private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + + private A1AdapterJsonHelper() {} + + public static Flux parseJsonArrayOfString(String inputString) { + try { + List arrayList = new ArrayList<>(); + if (!inputString.isEmpty()) { + JSONArray jsonArray = new JSONArray(inputString); + for (int i = 0; i < jsonArray.length(); i++) { + Object value = jsonArray.get(i); + arrayList.add(value.toString()); + } + } + return Flux.fromIterable(arrayList); + } catch (JSONException ex) { // invalid json + logger.debug("Invalid json {}", ex.getMessage()); + return Flux.error(ex); + } + } + + public static String createInputJsonString(T params) { + JsonElement paramsJson = gson.toJsonTree(params); + JsonObject jsonObj = new JsonObject(); + jsonObj.add("input", paramsJson); + return gson.toJson(jsonObj); + } + + public static String createOutputJsonString(T params) { + JsonElement paramsJson = gson.toJsonTree(params); + JsonObject jsonObj = new JsonObject(); + jsonObj.add(OUTPUT, paramsJson); + return gson.toJson(jsonObj); + } + + public static Mono getOutput(String response) { + try { + JSONObject outputJson = new JSONObject(response); + JSONObject responseParams = outputJson.getJSONObject(OUTPUT); + return Mono.just(responseParams); + } catch (JSONException ex) { // invalid json + logger.debug("Invalid json {}", ex.getMessage()); + return Mono.error(ex); + } + } + + public static Mono getValueFromResponse(String response, String key) { + return getOutput(response) // + .flatMap(responseParams -> { + if (!responseParams.has(key)) { + return Mono.just(""); + } + String value = responseParams.get(key).toString(); + return Mono.just(value); + }); + } + + public static Mono extractPolicySchema(String inputString) { + try { + JSONObject jsonObject = new JSONObject(inputString); + JSONObject schemaObject = jsonObject.getJSONObject("policySchema"); + String schemaString = schemaObject.toString(); + return Mono.just(schemaString); + } catch (JSONException ex) { // invalid json + logger.debug("Invalid json {}", ex.getMessage()); + return Mono.error(ex); + } + } +} diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1Client.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1Client.java index 4321ed48..5e498e4b 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1Client.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1Client.java @@ -38,10 +38,9 @@ public interface A1Client { STD_V1_1, // STD A1 version 1.1 STD_V2_0_0, // STD A1 version 2.0.0 OSC_V1, // OSC 'A1' - SDNC_OSC_STD_V1_1, // SDNC_OSC with STD A1 version 1.1 southbound - SDNC_OSC_STD_V2_0_0, // SDNC_OSC with STD A1 version 2.0.0 southbound - SDNC_OSC_OSC_V1, // SDNC_OSC with OSC 'A1' southbound - SDNC_ONAP + CCSDK_A1_ADAPTER_STD_V1_1, // CCSDK_A1_ADAPTER with STD A1 version 1.1 southbound + CCSDK_A1_ADAPTER_STD_V2_0_0, // CCSDK_A1_ADAPTER with STD A1 version 2.0.0 southbound + CCSDK_A1_ADAPTER_OSC_V1 // CCSDK_A1_ADAPTER with OSC 'A1' southbound } public Mono getProtocolVersion(); diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactory.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactory.java index 66ba60c0..0ca3a45d 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactory.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/A1ClientFactory.java @@ -79,11 +79,9 @@ public class A1ClientFactory { } else if (version == A1ProtocolType.OSC_V1) { assertNoControllerConfig(ric, version); return new OscA1Client(ric.getConfig(), this.restClientFactory); - } else if (version == A1ProtocolType.SDNC_OSC_STD_V1_1 || version == A1ProtocolType.SDNC_OSC_OSC_V1 - || version == A1ProtocolType.SDNC_OSC_STD_V2_0_0) { - return new SdncOscA1Client(version, ric.getConfig(), getControllerConfig(ric), this.restClientFactory); - } else if (version == A1ProtocolType.SDNC_ONAP) { - return new SdncOnapA1Client(ric.getConfig(), getControllerConfig(ric), this.restClientFactory); + } else if (version == A1ProtocolType.CCSDK_A1_ADAPTER_STD_V1_1 || version == A1ProtocolType.CCSDK_A1_ADAPTER_OSC_V1 + || version == A1ProtocolType.CCSDK_A1_ADAPTER_STD_V2_0_0) { + return new CcsdkA1AdapterClient(version, ric.getConfig(), getControllerConfig(ric), this.restClientFactory); } else { logger.error("Unhandled protocol: {}", version); throw new ServiceException("Unhandled protocol"); @@ -125,8 +123,7 @@ public class A1ClientFactory { return fetchVersion(ric, A1ProtocolType.STD_V2_0_0) // .onErrorResume(notUsed -> fetchVersion(ric, A1ProtocolType.STD_V1_1)) // .onErrorResume(notUsed -> fetchVersion(ric, A1ProtocolType.OSC_V1)) // - .onErrorResume(notUsed -> fetchVersion(ric, A1ProtocolType.SDNC_OSC_STD_V1_1)) // - .onErrorResume(notUsed -> fetchVersion(ric, A1ProtocolType.SDNC_ONAP)) // + .onErrorResume(notUsed -> fetchVersion(ric, A1ProtocolType.CCSDK_A1_ADAPTER_STD_V1_1)) // .doOnNext(ric::setProtocolVersion) .doOnNext(version -> logger.debug("Established protocol version:{} for Near-RT RIC: {}", version, ric.id())) // diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/CcsdkA1AdapterClient.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/CcsdkA1AdapterClient.java new file mode 100644 index 00000000..3b581b63 --- /dev/null +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/CcsdkA1AdapterClient.java @@ -0,0 +1,304 @@ +/*- + * ========================LICENSE_START================================= + * ONAP : ccsdk oran + * ====================================================================== + * Copyright (C) 2020 Nordix Foundation. All rights reserved. + * ====================================================================== + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================LICENSE_END=================================== + */ + +package org.onap.ccsdk.oran.a1policymanagementservice.clients; + +import com.google.gson.FieldNamingPolicy; +import com.google.gson.GsonBuilder; + +import java.lang.invoke.MethodHandles; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +import org.immutables.value.Value; +import org.json.JSONObject; +import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ControllerConfig; +import org.onap.ccsdk.oran.a1policymanagementservice.configuration.RicConfig; +import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.web.reactive.function.client.WebClientResponseException; + +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +/** + * Client for accessing the A1 adapter in the CCSDK in ONAP. + */ +@SuppressWarnings("squid:S2629") // Invoke method(s) only conditionally +public class CcsdkA1AdapterClient implements A1Client { + + static final int CONCURRENCY_RIC = 1; // How many paralell requests that is sent to one NearRT RIC + + @Value.Immutable + @org.immutables.gson.Gson.TypeAdapters + public interface AdapterRequest { + public String nearRtRicUrl(); + + public Optional body(); + } + + @Value.Immutable + @org.immutables.gson.Gson.TypeAdapters + public interface AdapterOutput { + public Optional body(); + + public int httpStatus(); + } + + static com.google.gson.Gson gson = new GsonBuilder() // + .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES) // + .create(); // + + private static final String GET_POLICY_RPC = "getA1Policy"; + private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + private final ControllerConfig controllerConfig; + private final AsyncRestClient restClient; + private final RicConfig ricConfig; + private final A1ProtocolType protocolType; + + /** + * Constructor that creates the REST client to use. + * + * @param protocolType the southbound protocol of the controller. Supported + * protocols are CCSDK_A1_ADAPTER_STD_V1_1, CCSDK_A1_ADAPTER_OSC_V1 and + * CCSDK_A1_ADAPTER_STD_V2_0_0 with + * @param ricConfig the configuration of the Near-RT RIC to communicate + * with + * @param controllerConfig the configuration of the CCSDK A1 Adapter to use + * + * @throws IllegalArgumentException when the protocolType is wrong. + */ + public CcsdkA1AdapterClient(A1ProtocolType protocolType, RicConfig ricConfig, ControllerConfig controllerConfig, + AsyncRestClientFactory restClientFactory) { + this(protocolType, ricConfig, controllerConfig, + restClientFactory.createRestClient(controllerConfig.baseUrl() + "/restconf/operations")); + } + + /** + * Constructor where the REST client to use is provided. + * + * @param protocolType the southbound protocol of the controller. Supported + * protocols are CCSDK_A1_ADAPTER_STD_V1_1, CCSDK_A1_ADAPTER_OSC_V1 and + * CCSDK_A1_ADAPTER_STD_V2_0_0 with + * @param ricConfig the configuration of the Near-RT RIC to communicate + * with + * @param controllerConfig the configuration of the CCSDK A1 Adapter to use + * @param restClient the REST client to use + * + * @throws IllegalArgumentException when the protocolType is illegal. + */ + public CcsdkA1AdapterClient(A1ProtocolType protocolType, RicConfig ricConfig, ControllerConfig controllerConfig, + AsyncRestClient restClient) { + if (A1ProtocolType.CCSDK_A1_ADAPTER_STD_V1_1.equals(protocolType) // + || A1ProtocolType.CCSDK_A1_ADAPTER_OSC_V1.equals(protocolType) // + || A1ProtocolType.CCSDK_A1_ADAPTER_STD_V2_0_0.equals(protocolType)) { + this.restClient = restClient; + this.ricConfig = ricConfig; + this.protocolType = protocolType; + this.controllerConfig = controllerConfig; + logger.debug("CcsdkA1AdapterClient for ric: {}, a1Controller: {}", ricConfig.ricId(), controllerConfig); + } else { + throw new IllegalArgumentException("Not handeled protocolversion: " + protocolType); + } + + } + + @Override + public Mono> getPolicyTypeIdentities() { + if (this.protocolType == A1ProtocolType.CCSDK_A1_ADAPTER_STD_V1_1) { + return Mono.just(Arrays.asList("")); + } else { + return post(GET_POLICY_RPC, getUriBuilder().createPolicyTypesUri(), Optional.empty()) // + .flatMapMany(A1AdapterJsonHelper::parseJsonArrayOfString) // + .collectList(); + } + + } + + @Override + public Mono> getPolicyIdentities() { + return getPolicyIds() // + .collectList(); + } + + @Override + public Mono getPolicyTypeSchema(String policyTypeId) { + if (this.protocolType == A1ProtocolType.CCSDK_A1_ADAPTER_STD_V1_1) { + return Mono.just("{}"); + } else { + A1UriBuilder uri = this.getUriBuilder(); + final String ricUrl = uri.createGetSchemaUri(policyTypeId); + return post(GET_POLICY_RPC, ricUrl, Optional.empty()) // + .flatMap(response -> extractCreateSchema(response, policyTypeId)); + } + } + + private Mono extractCreateSchema(String controllerResponse, String policyTypeId) { + if (this.protocolType == A1ProtocolType.CCSDK_A1_ADAPTER_OSC_V1) { + return OscA1Client.extractCreateSchema(controllerResponse, policyTypeId); + } else if (this.protocolType == A1ProtocolType.CCSDK_A1_ADAPTER_STD_V2_0_0) { + return StdA1ClientVersion2.extractPolicySchema(controllerResponse, policyTypeId); + } else { + throw new NullPointerException("Not supported"); + } + } + + @Override + public Mono putPolicy(Policy policy) { + String ricUrl = + getUriBuilder().createPutPolicyUri(policy.type().id(), policy.id(), policy.statusNotificationUri()); + return post("putA1Policy", ricUrl, Optional.of(policy.json())); + } + + @Override + public Mono deletePolicy(Policy policy) { + return deletePolicyById(policy.type().id(), policy.id()); + } + + @Override + public Flux deleteAllPolicies() { + if (this.protocolType == A1ProtocolType.CCSDK_A1_ADAPTER_STD_V1_1) { + return getPolicyIds() // + .flatMap(policyId -> deletePolicyById("", policyId), CONCURRENCY_RIC); // + } else { + A1UriBuilder uriBuilder = this.getUriBuilder(); + return getPolicyTypeIdentities() // + .flatMapMany(Flux::fromIterable) // + .flatMap(type -> deleteAllInstancesForType(uriBuilder, type), CONCURRENCY_RIC); + } + } + + private Flux getInstancesForType(A1UriBuilder uriBuilder, String type) { + return post(GET_POLICY_RPC, uriBuilder.createGetPolicyIdsUri(type), Optional.empty()) // + .flatMapMany(A1AdapterJsonHelper::parseJsonArrayOfString); + } + + private Flux deleteAllInstancesForType(A1UriBuilder uriBuilder, String type) { + return getInstancesForType(uriBuilder, type) // + .flatMap(instance -> deletePolicyById(type, instance), CONCURRENCY_RIC); + } + + @Override + public Mono getProtocolVersion() { + return tryStdProtocolVersion2() // + .onErrorResume(t -> tryStdProtocolVersion1()) // + .onErrorResume(t -> tryOscProtocolVersion()); + } + + @Override + public Mono getPolicyStatus(Policy policy) { + String ricUrl = getUriBuilder().createGetPolicyStatusUri(policy.type().id(), policy.id()); + return post("getA1PolicyStatus", ricUrl, Optional.empty()); + + } + + private A1UriBuilder getUriBuilder() { + if (protocolType == A1ProtocolType.CCSDK_A1_ADAPTER_STD_V1_1) { + return new StdA1ClientVersion1.UriBuilder(ricConfig); + } else if (protocolType == A1ProtocolType.CCSDK_A1_ADAPTER_STD_V2_0_0) { + return new StdA1ClientVersion2.OranV2UriBuilder(ricConfig); + } else if (protocolType == A1ProtocolType.CCSDK_A1_ADAPTER_OSC_V1) { + return new OscA1Client.UriBuilder(ricConfig); + } + throw new NullPointerException(); + } + + private Mono tryOscProtocolVersion() { + OscA1Client.UriBuilder oscApiuriBuilder = new OscA1Client.UriBuilder(ricConfig); + return post(GET_POLICY_RPC, oscApiuriBuilder.createHealtcheckUri(), Optional.empty()) // + .flatMap(x -> Mono.just(A1ProtocolType.CCSDK_A1_ADAPTER_OSC_V1)); + } + + private Mono tryStdProtocolVersion1() { + StdA1ClientVersion1.UriBuilder uriBuilder = new StdA1ClientVersion1.UriBuilder(ricConfig); + return post(GET_POLICY_RPC, uriBuilder.createGetPolicyIdsUri(""), Optional.empty()) // + .flatMap(x -> Mono.just(A1ProtocolType.CCSDK_A1_ADAPTER_STD_V1_1)); + } + + private Mono tryStdProtocolVersion2() { + StdA1ClientVersion2.OranV2UriBuilder uriBuilder = new StdA1ClientVersion2.OranV2UriBuilder(ricConfig); + return post(GET_POLICY_RPC, uriBuilder.createPolicyTypesUri(), Optional.empty()) // + .flatMap(x -> Mono.just(A1ProtocolType.CCSDK_A1_ADAPTER_STD_V2_0_0)); + } + + private Flux getPolicyIds() { + if (this.protocolType == A1ProtocolType.CCSDK_A1_ADAPTER_STD_V1_1) { + StdA1ClientVersion1.UriBuilder uri = new StdA1ClientVersion1.UriBuilder(ricConfig); + final String ricUrl = uri.createGetPolicyIdsUri(""); + return post(GET_POLICY_RPC, ricUrl, Optional.empty()) // + .flatMapMany(A1AdapterJsonHelper::parseJsonArrayOfString); + } else { + A1UriBuilder uri = this.getUriBuilder(); + return getPolicyTypeIdentities() // + .flatMapMany(Flux::fromIterable) + .flatMap(type -> post(GET_POLICY_RPC, uri.createGetPolicyIdsUri(type), Optional.empty())) // + .flatMap(A1AdapterJsonHelper::parseJsonArrayOfString); + } + } + + private Mono deletePolicyById(String type, String policyId) { + String ricUrl = getUriBuilder().createDeleteUri(type, policyId); + return post("deleteA1Policy", ricUrl, Optional.empty()); + } + + private Mono post(String rpcName, String ricUrl, Optional body) { + AdapterRequest inputParams = ImmutableAdapterRequest.builder() // + .nearRtRicUrl(ricUrl) // + .body(body) // + .build(); + final String inputJsonString = A1AdapterJsonHelper.createInputJsonString(inputParams); + logger.debug("POST inputJsonString = {}", inputJsonString); + + return restClient + .postWithAuthHeader(controllerUrl(rpcName), inputJsonString, this.controllerConfig.userName(), + this.controllerConfig.password()) // + .flatMap(this::extractResponseBody); + } + + private Mono extractResponse(JSONObject responseOutput) { + AdapterOutput output = gson.fromJson(responseOutput.toString(), ImmutableAdapterOutput.class); + Optional optionalBody = output.body(); + String body = optionalBody.isPresent() ? optionalBody.get() : ""; + if (HttpStatus.valueOf(output.httpStatus()).is2xxSuccessful()) { + return Mono.just(body); + } else { + logger.debug("Error response: {} {}", output.httpStatus(), body); + byte[] responseBodyBytes = body.getBytes(StandardCharsets.UTF_8); + HttpStatus httpStatus = HttpStatus.valueOf(output.httpStatus()); + WebClientResponseException responseException = new WebClientResponseException(httpStatus.value(), + httpStatus.getReasonPhrase(), null, responseBodyBytes, StandardCharsets.UTF_8, null); + + return Mono.error(responseException); + } + } + + private Mono extractResponseBody(String responseStr) { + return A1AdapterJsonHelper.getOutput(responseStr) // + .flatMap(this::extractResponse); + } + + private String controllerUrl(String rpcName) { + return "/A1-ADAPTER-API:" + rpcName; + } +} diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1Client.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1Client.java index f54dc2e0..402a73b4 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1Client.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/OscA1Client.java @@ -195,12 +195,12 @@ public class OscA1Client implements A1Client { private Flux getPolicyTypeIds() { return restClient.get(uri.createPolicyTypesUri()) // - .flatMapMany(SdncJsonHelper::parseJsonArrayOfString); + .flatMapMany(A1AdapterJsonHelper::parseJsonArrayOfString); } private Flux getPolicyIdentitiesByType(String typeId) { return restClient.get(uri.createGetPolicyIdsUri(typeId)) // - .flatMapMany(SdncJsonHelper::parseJsonArrayOfString); + .flatMapMany(A1AdapterJsonHelper::parseJsonArrayOfString); } private Mono deletePolicyById(String typeId, String policyId) { diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncJsonHelper.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncJsonHelper.java deleted file mode 100644 index ada35fd6..00000000 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncJsonHelper.java +++ /dev/null @@ -1,119 +0,0 @@ -/*- - * ========================LICENSE_START================================= - * ONAP : ccsdk oran - * ====================================================================== - * Copyright (C) 2020 Nordix Foundation. All rights reserved. - * ====================================================================== - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================LICENSE_END=================================== - */ - -package org.onap.ccsdk.oran.a1policymanagementservice.clients; - -import com.google.gson.FieldNamingPolicy; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import java.lang.invoke.MethodHandles; -import java.util.ArrayList; -import java.util.List; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -/** - * Common json functionality used by the SDNC clients - */ -@SuppressWarnings("java:S1192") // Same text in several traces -class SdncJsonHelper { - private static Gson gson = new GsonBuilder() // - .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES) // - .create(); - private static final String OUTPUT = "output"; - private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - - private SdncJsonHelper() {} - - public static Flux parseJsonArrayOfString(String inputString) { - try { - List arrayList = new ArrayList<>(); - if (!inputString.isEmpty()) { - JSONArray jsonArray = new JSONArray(inputString); - for (int i = 0; i < jsonArray.length(); i++) { - Object value = jsonArray.get(i); - arrayList.add(value.toString()); - } - } - return Flux.fromIterable(arrayList); - } catch (JSONException ex) { // invalid json - logger.debug("Invalid json {}", ex.getMessage()); - return Flux.error(ex); - } - } - - public static String createInputJsonString(T params) { - JsonElement paramsJson = gson.toJsonTree(params); - JsonObject jsonObj = new JsonObject(); - jsonObj.add("input", paramsJson); - return gson.toJson(jsonObj); - } - - public static String createOutputJsonString(T params) { - JsonElement paramsJson = gson.toJsonTree(params); - JsonObject jsonObj = new JsonObject(); - jsonObj.add(OUTPUT, paramsJson); - return gson.toJson(jsonObj); - } - - public static Mono getOutput(String response) { - try { - JSONObject outputJson = new JSONObject(response); - JSONObject responseParams = outputJson.getJSONObject(OUTPUT); - return Mono.just(responseParams); - } catch (JSONException ex) { // invalid json - logger.debug("Invalid json {}", ex.getMessage()); - return Mono.error(ex); - } - } - - public static Mono getValueFromResponse(String response, String key) { - return getOutput(response) // - .flatMap(responseParams -> { - if (!responseParams.has(key)) { - return Mono.just(""); - } - String value = responseParams.get(key).toString(); - return Mono.just(value); - }); - } - - public static Mono extractPolicySchema(String inputString) { - try { - JSONObject jsonObject = new JSONObject(inputString); - JSONObject schemaObject = jsonObject.getJSONObject("policySchema"); - String schemaString = schemaObject.toString(); - return Mono.just(schemaString); - } catch (JSONException ex) { // invalid json - logger.debug("Invalid json {}", ex.getMessage()); - return Mono.error(ex); - } - } -} diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncOnapA1Client.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncOnapA1Client.java deleted file mode 100644 index 68b0ab18..00000000 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncOnapA1Client.java +++ /dev/null @@ -1,194 +0,0 @@ -/*- - * ========================LICENSE_START================================= - * ONAP : ccsdk oran - * ====================================================================== - * Copyright (C) 2020 Nordix Foundation. All rights reserved. - * ====================================================================== - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================LICENSE_END=================================== - */ - -package org.onap.ccsdk.oran.a1policymanagementservice.clients; - -import java.lang.invoke.MethodHandles; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -import org.immutables.gson.Gson; -import org.immutables.value.Value; -import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ControllerConfig; -import org.onap.ccsdk.oran.a1policymanagementservice.configuration.RicConfig; -import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policy; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -/** - * Client for accessing the A1 adapter in the SDNC controller in ONAP - */ -@SuppressWarnings("squid:S2629") // Invoke method(s) only conditionally -public class SdncOnapA1Client implements A1Client { - @Value.Immutable - @Gson.TypeAdapters - interface SdncOnapAdapterInput { - public String nearRtRicId(); - - public Optional policyTypeId(); - - public Optional policyInstanceId(); - - public Optional policyInstance(); - - public Optional> properties(); - } - - private static final String URL_PREFIX = "/A1-ADAPTER-API:"; - - private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - - private final ControllerConfig controllerConfig; - private final RicConfig ricConfig; - private final AsyncRestClient restClient; - - public SdncOnapA1Client(RicConfig ricConfig, ControllerConfig controllerConfig, - AsyncRestClientFactory restClientFactory) { - this(ricConfig, controllerConfig, - restClientFactory.createRestClient(controllerConfig.baseUrl() + "/restconf/operations")); - logger.debug("SdncOnapA1Client for ric: {}, a1ControllerBaseUrl: {}", ricConfig.ricId(), - controllerConfig.baseUrl()); - } - - public SdncOnapA1Client(RicConfig ricConfig, ControllerConfig controllerConfig, AsyncRestClient restClient) { - this.ricConfig = ricConfig; - this.controllerConfig = controllerConfig; - this.restClient = restClient; - } - - @Override - public Mono> getPolicyTypeIdentities() { - return getPolicyTypeIds() // - .collectList(); - } - - @Override - public Mono> getPolicyIdentities() { - return getPolicyTypeIds() // - .flatMap(this::getPolicyIdentitiesByType) // - .collectList(); - } - - @Override - public Mono getPolicyTypeSchema(String policyTypeId) { - SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() // - .nearRtRicId(ricConfig.baseUrl()) // - .policyTypeId(policyTypeId) // - .build(); - String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams); - logger.debug("POST getPolicyType inputJsonString = {}", inputJsonString); - - return restClient - .postWithAuthHeader(URL_PREFIX + "getPolicyType", inputJsonString, controllerConfig.userName(), - controllerConfig.password()) // - .flatMap(response -> SdncJsonHelper.getValueFromResponse(response, "policy-type")) // - .flatMap(SdncJsonHelper::extractPolicySchema); - } - - @Override - public Mono putPolicy(Policy policy) { - SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() // - .nearRtRicId(ricConfig.baseUrl()) // - .policyTypeId(policy.type().id()) // - .policyInstanceId(policy.id()) // - .policyInstance(policy.json()) // - .properties(new ArrayList<>()) // - .build(); - - String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams); - logger.debug("POST putPolicy inputJsonString = {}", inputJsonString); - - return restClient.postWithAuthHeader(URL_PREFIX + "createPolicyInstance", inputJsonString, - controllerConfig.userName(), controllerConfig.password()); - } - - @Override - public Mono deletePolicy(Policy policy) { - return deletePolicyByTypeId(policy.type().id(), policy.id()); - } - - @Override - public Flux deleteAllPolicies() { - return getPolicyTypeIds() // - .flatMap(this::deletePoliciesForType); // - } - - @Override - public Mono getProtocolVersion() { - return getPolicyTypeIdentities() // - .flatMap(notUsed -> Mono.just(A1ProtocolType.SDNC_ONAP)); - } - - @Override - public Mono getPolicyStatus(Policy policy) { - return Mono.error(new Exception("Status not implemented in the controller")); - } - - private Flux getPolicyTypeIds() { - SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() // - .nearRtRicId(ricConfig.baseUrl()) // - .build(); - String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams); - logger.debug("POST getPolicyTypeIdentities inputJsonString = {}", inputJsonString); - - return restClient - .postWithAuthHeader(URL_PREFIX + "getPolicyTypes", inputJsonString, controllerConfig.userName(), - controllerConfig.password()) // - .flatMap(response -> SdncJsonHelper.getValueFromResponse(response, "policy-type-id-list")) // - .flatMapMany(SdncJsonHelper::parseJsonArrayOfString); - } - - private Flux getPolicyIdentitiesByType(String policyTypeId) { - SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() // - .nearRtRicId(ricConfig.baseUrl()) // - .policyTypeId(policyTypeId) // - .build(); - String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams); - logger.debug("POST getPolicyIdentities inputJsonString = {}", inputJsonString); - - return restClient - .postWithAuthHeader(URL_PREFIX + "getPolicyInstances", inputJsonString, controllerConfig.userName(), - controllerConfig.password()) // - .flatMap(response -> SdncJsonHelper.getValueFromResponse(response, "policy-instance-id-list")) // - .flatMapMany(SdncJsonHelper::parseJsonArrayOfString); - } - - private Flux deletePoliciesForType(String typeId) { - return getPolicyIdentitiesByType(typeId) // - .flatMap(policyId -> deletePolicyByTypeId(typeId, policyId)); // - } - - private Mono deletePolicyByTypeId(String policyTypeId, String policyId) { - SdncOnapAdapterInput inputParams = ImmutableSdncOnapAdapterInput.builder() // - .nearRtRicId(ricConfig.baseUrl()) // - .policyTypeId(policyTypeId) // - .policyInstanceId(policyId) // - .build(); - String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams); - logger.debug("POST deletePolicy inputJsonString = {}", inputJsonString); - - return restClient.postWithAuthHeader(URL_PREFIX + "deletePolicyInstance", inputJsonString, - controllerConfig.userName(), controllerConfig.password()); - } -} diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncOscA1Client.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncOscA1Client.java deleted file mode 100644 index 88859d37..00000000 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/SdncOscA1Client.java +++ /dev/null @@ -1,304 +0,0 @@ -/*- - * ========================LICENSE_START================================= - * ONAP : ccsdk oran - * ====================================================================== - * Copyright (C) 2020 Nordix Foundation. All rights reserved. - * ====================================================================== - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================LICENSE_END=================================== - */ - -package org.onap.ccsdk.oran.a1policymanagementservice.clients; - -import com.google.gson.FieldNamingPolicy; -import com.google.gson.GsonBuilder; - -import java.lang.invoke.MethodHandles; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; - -import org.immutables.value.Value; -import org.json.JSONObject; -import org.onap.ccsdk.oran.a1policymanagementservice.configuration.ControllerConfig; -import org.onap.ccsdk.oran.a1policymanagementservice.configuration.RicConfig; -import org.onap.ccsdk.oran.a1policymanagementservice.repository.Policy; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.web.reactive.function.client.WebClientResponseException; - -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -/** - * Client for accessing the A1 adapter in the SDNC controller in OSC. - */ -@SuppressWarnings("squid:S2629") // Invoke method(s) only conditionally -public class SdncOscA1Client implements A1Client { - - static final int CONCURRENCY_RIC = 1; // How many paralell requests that is sent to one NearRT RIC - - @Value.Immutable - @org.immutables.gson.Gson.TypeAdapters - public interface AdapterRequest { - public String nearRtRicUrl(); - - public Optional body(); - } - - @Value.Immutable - @org.immutables.gson.Gson.TypeAdapters - public interface AdapterOutput { - public Optional body(); - - public int httpStatus(); - } - - static com.google.gson.Gson gson = new GsonBuilder() // - .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES) // - .create(); // - - private static final String GET_POLICY_RPC = "getA1Policy"; - private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - private final ControllerConfig controllerConfig; - private final AsyncRestClient restClient; - private final RicConfig ricConfig; - private final A1ProtocolType protocolType; - - /** - * Constructor that creates the REST client to use. - * - * @param protocolType the southbound protocol of the controller. Supported - * protocols are SDNC_OSC_STD_V1_1, SDNC_OSC_OSC_V1 and - * SDNC_OSC_STD_V2_0_0 with - * @param ricConfig the configuration of the Near-RT RIC to communicate - * with - * @param controllerConfig the configuration of the SDNC controller to use - * - * @throws IllegalArgumentException when the protocolType is wrong. - */ - public SdncOscA1Client(A1ProtocolType protocolType, RicConfig ricConfig, ControllerConfig controllerConfig, - AsyncRestClientFactory restClientFactory) { - this(protocolType, ricConfig, controllerConfig, - restClientFactory.createRestClient(controllerConfig.baseUrl() + "/restconf/operations")); - } - - /** - * Constructor where the REST client to use is provided. - * - * @param protocolType the southbound protocol of the controller. Supported - * protocols are SDNC_OSC_STD_V1_1, SDNC_OSC_OSC_V1 and - * SDNC_OSC_STD_V2_0_0 with - * @param ricConfig the configuration of the Near-RT RIC to communicate - * with - * @param controllerConfig the configuration of the SDNC controller to use - * @param restClient the REST client to use - * - * @throws IllegalArgumentException when the protocolType is illegal. - */ - public SdncOscA1Client(A1ProtocolType protocolType, RicConfig ricConfig, ControllerConfig controllerConfig, - AsyncRestClient restClient) { - if (A1ProtocolType.SDNC_OSC_STD_V1_1.equals(protocolType) // - || A1ProtocolType.SDNC_OSC_OSC_V1.equals(protocolType) // - || A1ProtocolType.SDNC_OSC_STD_V2_0_0.equals(protocolType)) { - this.restClient = restClient; - this.ricConfig = ricConfig; - this.protocolType = protocolType; - this.controllerConfig = controllerConfig; - logger.debug("SdncOscA1Client for ric: {}, a1Controller: {}", ricConfig.ricId(), controllerConfig); - } else { - throw new IllegalArgumentException("Not handeled protocolversion: " + protocolType); - } - - } - - @Override - public Mono> getPolicyTypeIdentities() { - if (this.protocolType == A1ProtocolType.SDNC_OSC_STD_V1_1) { - return Mono.just(Arrays.asList("")); - } else { - return post(GET_POLICY_RPC, getUriBuilder().createPolicyTypesUri(), Optional.empty()) // - .flatMapMany(SdncJsonHelper::parseJsonArrayOfString) // - .collectList(); - } - - } - - @Override - public Mono> getPolicyIdentities() { - return getPolicyIds() // - .collectList(); - } - - @Override - public Mono getPolicyTypeSchema(String policyTypeId) { - if (this.protocolType == A1ProtocolType.SDNC_OSC_STD_V1_1) { - return Mono.just("{}"); - } else { - A1UriBuilder uri = this.getUriBuilder(); - final String ricUrl = uri.createGetSchemaUri(policyTypeId); - return post(GET_POLICY_RPC, ricUrl, Optional.empty()) // - .flatMap(response -> extractCreateSchema(response, policyTypeId)); - } - } - - private Mono extractCreateSchema(String controllerResponse, String policyTypeId) { - if (this.protocolType == A1ProtocolType.SDNC_OSC_OSC_V1) { - return OscA1Client.extractCreateSchema(controllerResponse, policyTypeId); - } else if (this.protocolType == A1ProtocolType.SDNC_OSC_STD_V2_0_0) { - return StdA1ClientVersion2.extractPolicySchema(controllerResponse, policyTypeId); - } else { - throw new NullPointerException("Not supported"); - } - } - - @Override - public Mono putPolicy(Policy policy) { - String ricUrl = - getUriBuilder().createPutPolicyUri(policy.type().id(), policy.id(), policy.statusNotificationUri()); - return post("putA1Policy", ricUrl, Optional.of(policy.json())); - } - - @Override - public Mono deletePolicy(Policy policy) { - return deletePolicyById(policy.type().id(), policy.id()); - } - - @Override - public Flux deleteAllPolicies() { - if (this.protocolType == A1ProtocolType.SDNC_OSC_STD_V1_1) { - return getPolicyIds() // - .flatMap(policyId -> deletePolicyById("", policyId), CONCURRENCY_RIC); // - } else { - A1UriBuilder uriBuilder = this.getUriBuilder(); - return getPolicyTypeIdentities() // - .flatMapMany(Flux::fromIterable) // - .flatMap(type -> deleteAllInstancesForType(uriBuilder, type), CONCURRENCY_RIC); - } - } - - private Flux getInstancesForType(A1UriBuilder uriBuilder, String type) { - return post(GET_POLICY_RPC, uriBuilder.createGetPolicyIdsUri(type), Optional.empty()) // - .flatMapMany(SdncJsonHelper::parseJsonArrayOfString); - } - - private Flux deleteAllInstancesForType(A1UriBuilder uriBuilder, String type) { - return getInstancesForType(uriBuilder, type) // - .flatMap(instance -> deletePolicyById(type, instance), CONCURRENCY_RIC); - } - - @Override - public Mono getProtocolVersion() { - return tryStdProtocolVersion2() // - .onErrorResume(t -> tryStdProtocolVersion1()) // - .onErrorResume(t -> tryOscProtocolVersion()); - } - - @Override - public Mono getPolicyStatus(Policy policy) { - String ricUrl = getUriBuilder().createGetPolicyStatusUri(policy.type().id(), policy.id()); - return post("getA1PolicyStatus", ricUrl, Optional.empty()); - - } - - private A1UriBuilder getUriBuilder() { - if (protocolType == A1ProtocolType.SDNC_OSC_STD_V1_1) { - return new StdA1ClientVersion1.UriBuilder(ricConfig); - } else if (protocolType == A1ProtocolType.SDNC_OSC_STD_V2_0_0) { - return new StdA1ClientVersion2.OranV2UriBuilder(ricConfig); - } else if (protocolType == A1ProtocolType.SDNC_OSC_OSC_V1) { - return new OscA1Client.UriBuilder(ricConfig); - } - throw new NullPointerException(); - } - - private Mono tryOscProtocolVersion() { - OscA1Client.UriBuilder oscApiuriBuilder = new OscA1Client.UriBuilder(ricConfig); - return post(GET_POLICY_RPC, oscApiuriBuilder.createHealtcheckUri(), Optional.empty()) // - .flatMap(x -> Mono.just(A1ProtocolType.SDNC_OSC_OSC_V1)); - } - - private Mono tryStdProtocolVersion1() { - StdA1ClientVersion1.UriBuilder uriBuilder = new StdA1ClientVersion1.UriBuilder(ricConfig); - return post(GET_POLICY_RPC, uriBuilder.createGetPolicyIdsUri(""), Optional.empty()) // - .flatMap(x -> Mono.just(A1ProtocolType.SDNC_OSC_STD_V1_1)); - } - - private Mono tryStdProtocolVersion2() { - StdA1ClientVersion2.OranV2UriBuilder uriBuilder = new StdA1ClientVersion2.OranV2UriBuilder(ricConfig); - return post(GET_POLICY_RPC, uriBuilder.createPolicyTypesUri(), Optional.empty()) // - .flatMap(x -> Mono.just(A1ProtocolType.SDNC_OSC_STD_V2_0_0)); - } - - private Flux getPolicyIds() { - if (this.protocolType == A1ProtocolType.SDNC_OSC_STD_V1_1) { - StdA1ClientVersion1.UriBuilder uri = new StdA1ClientVersion1.UriBuilder(ricConfig); - final String ricUrl = uri.createGetPolicyIdsUri(""); - return post(GET_POLICY_RPC, ricUrl, Optional.empty()) // - .flatMapMany(SdncJsonHelper::parseJsonArrayOfString); - } else { - A1UriBuilder uri = this.getUriBuilder(); - return getPolicyTypeIdentities() // - .flatMapMany(Flux::fromIterable) - .flatMap(type -> post(GET_POLICY_RPC, uri.createGetPolicyIdsUri(type), Optional.empty())) // - .flatMap(SdncJsonHelper::parseJsonArrayOfString); - } - } - - private Mono deletePolicyById(String type, String policyId) { - String ricUrl = getUriBuilder().createDeleteUri(type, policyId); - return post("deleteA1Policy", ricUrl, Optional.empty()); - } - - private Mono post(String rpcName, String ricUrl, Optional body) { - AdapterRequest inputParams = ImmutableAdapterRequest.builder() // - .nearRtRicUrl(ricUrl) // - .body(body) // - .build(); - final String inputJsonString = SdncJsonHelper.createInputJsonString(inputParams); - logger.debug("POST inputJsonString = {}", inputJsonString); - - return restClient - .postWithAuthHeader(controllerUrl(rpcName), inputJsonString, this.controllerConfig.userName(), - this.controllerConfig.password()) // - .flatMap(this::extractResponseBody); - } - - private Mono extractResponse(JSONObject responseOutput) { - AdapterOutput output = gson.fromJson(responseOutput.toString(), ImmutableAdapterOutput.class); - Optional optionalBody = output.body(); - String body = optionalBody.isPresent() ? optionalBody.get() : ""; - if (HttpStatus.valueOf(output.httpStatus()).is2xxSuccessful()) { - return Mono.just(body); - } else { - logger.debug("Error response: {} {}", output.httpStatus(), body); - byte[] responseBodyBytes = body.getBytes(StandardCharsets.UTF_8); - HttpStatus httpStatus = HttpStatus.valueOf(output.httpStatus()); - WebClientResponseException responseException = new WebClientResponseException(httpStatus.value(), - httpStatus.getReasonPhrase(), null, responseBodyBytes, StandardCharsets.UTF_8, null); - - return Mono.error(responseException); - } - } - - private Mono extractResponseBody(String responseStr) { - return SdncJsonHelper.getOutput(responseStr) // - .flatMap(this::extractResponse); - } - - private String controllerUrl(String rpcName) { - return "/A1-ADAPTER-API:" + rpcName; - } -} diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion1.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion1.java index a1c5ac7a..ba18afea 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion1.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion1.java @@ -151,7 +151,7 @@ public class StdA1ClientVersion1 implements A1Client { private Flux getPolicyIds() { return restClient.get(uri.createGetPolicyIdsUri("")) // - .flatMapMany(SdncJsonHelper::parseJsonArrayOfString); + .flatMapMany(A1AdapterJsonHelper::parseJsonArrayOfString); } private Mono deletePolicyById(String policyId) { diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion2.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion2.java index cdf35954..471b3c4d 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion2.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/StdA1ClientVersion2.java @@ -200,12 +200,12 @@ public class StdA1ClientVersion2 implements A1Client { private Flux getPolicyTypeIds() { return restClient.get(uriBuiler.createPolicyTypesUri()) // - .flatMapMany(SdncJsonHelper::parseJsonArrayOfString); + .flatMapMany(A1AdapterJsonHelper::parseJsonArrayOfString); } private Flux getPolicyIdentitiesByType(String typeId) { return restClient.get(uriBuiler.createGetPolicyIdsUri(typeId)) // - .flatMapMany(SdncJsonHelper::parseJsonArrayOfString); + .flatMapMany(A1AdapterJsonHelper::parseJsonArrayOfString); } private Mono deletePolicyById(String typeId, String policyId) { -- cgit 1.2.3-korg