aboutsummaryrefslogtreecommitdiffstats
path: root/a1-policy-management/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'a1-policy-management/src/main')
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java12
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java55
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/util/v3/Helper.java17
-rw-r--r--a1-policy-management/src/main/resources/application_configuration_schema.json3
4 files changed, 75 insertions, 12 deletions
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
index f7872a38..53abcd71 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
@@ -3,6 +3,7 @@
* ONAP : ccsdk oran
* ======================================================================
* Copyright (C) 2019-2023 Nordix Foundation. All rights reserved.
+ * Modifications Copyright (C) 2025 OpenInfra Foundation Europe. 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.
@@ -33,6 +34,7 @@ import org.onap.ccsdk.oran.a1policymanagementservice.models.v2.RicInfoList;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.PolicyTypes;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric;
import org.onap.ccsdk.oran.a1policymanagementservice.repository.Rics;
+import org.onap.ccsdk.oran.a1policymanagementservice.util.v3.Helper;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;
@@ -41,6 +43,7 @@ import reactor.core.publisher.Mono;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
@RestController("ricRepositoryControllerV2")
@RequiredArgsConstructor
@@ -63,12 +66,17 @@ public class RicRepositoryController implements NearRtRicRepositoryApi {
private static final String GET_RIC_DETAILS =
"Either a Near-RT RIC identity or a Managed Element identity can be specified.<br>" //
+ "The intention with Managed Element identity is the ID used in O1 for accessing the traffical element (such as the ID of CU).";
+ private final Helper helper;
+
@Override
public Mono<ResponseEntity<RicInfo>> getRic(
final String managedElementId, final String ricId, final ServerWebExchange exchange)
throws Exception {
+
+ helper.validateQueryParameters(exchange, Set.of("managed_element_id", "ric_id"));
+
if (managedElementId != null && ricId != null) {
- throw new InvalidRequestException("Give one query parameter");
+ throw new InvalidRequestException("Only one parameter allowed");
} else if (managedElementId != null) {
Ric ric = this.rics.lookupRicForManagedElement(managedElementId);
return Mono.just(new ResponseEntity<>(toRicInfo(ric), HttpStatus.OK));
@@ -76,7 +84,7 @@ public class RicRepositoryController implements NearRtRicRepositoryApi {
RicInfo info = toRicInfo(this.rics.getRic(ricId));
return Mono.just(new ResponseEntity<>(info, HttpStatus.OK));
} else {
- throw new InvalidRequestException("Give one query parameter");
+ throw new InvalidRequestException("Only one parameter allowed");
}
}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java
index 89d47d7f..ce2769e6 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java
@@ -2,7 +2,7 @@
* ========================LICENSE_START=================================
* ONAP : ccsdk oran
* ======================================================================
- * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+ * Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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.
@@ -24,17 +24,25 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.onap.ccsdk.oran.a1policymanagementservice.controllers.api.v3.NearRtRicRepositoryApi;
import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.Consts;
+import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.InvalidRequestException;
import org.onap.ccsdk.oran.a1policymanagementservice.mappers.v3.RicRepositoryMapper;
import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.RicRepositoryController;
import org.onap.ccsdk.oran.a1policymanagementservice.models.v3.RicInfo;
import org.onap.ccsdk.oran.a1policymanagementservice.models.v3.RicInfoList;
+import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric;
+import org.onap.ccsdk.oran.a1policymanagementservice.repository.Rics;
import org.onap.ccsdk.oran.a1policymanagementservice.service.v3.ErrorHandlingService;
+import org.onap.ccsdk.oran.a1policymanagementservice.util.v3.Helper;
+import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
+import java.util.List;
+import java.util.Set;
+
@RestController("ricRepositoryControllerV3")
@RequiredArgsConstructor
@Tag(
@@ -53,17 +61,50 @@ public class RicRepositoryControllerV3 implements NearRtRicRepositoryApi {
private final ErrorHandlingService errorHandlingService;
+ private final Rics rics;
+
+ private final Helper helper;
+
@Override
- public Mono<ResponseEntity<RicInfo>> getRic(String managedElementId, String ricId, String accept, ServerWebExchange exchange) throws Exception {
- return ricRepositoryController.getRic(managedElementId, ricId, exchange)
- .map(responseEntity -> new ResponseEntity<>(ricRepositoryMapper.toRicInfoV3(responseEntity.getBody()), responseEntity.getStatusCode()))
- .doOnError(errorHandlingService::handleError);
+ public Mono<ResponseEntity<RicInfo>> getRic(String ricId, String accept, ServerWebExchange exchange) throws Exception {
+
+ helper.validateQueryParameters(exchange, Set.of("ricId"));
+
+ if (ricId != null) {
+ RicInfo info = toRicInfo(this.rics.getRic(ricId));
+ return Mono.just(new ResponseEntity<>(info, HttpStatus.OK))
+ .map(responseEntity -> new ResponseEntity<>(
+ responseEntity.getBody(), responseEntity.getStatusCode()))
+ .doOnError(errorHandlingService::handleError);
+ } else {
+ throw new InvalidRequestException("Only one parameter allowed");
+ }
}
@Override
- public Mono<ResponseEntity<RicInfoList>> getRics(String policyTypeId, String accept, ServerWebExchange exchange) throws Exception {
+ public Mono<ResponseEntity<RicInfoList>> getRics(String policyTypeId, String accept,
+ ServerWebExchange exchange) throws Exception {
return ricRepositoryController.getRics(policyTypeId, exchange)
- .map(responseEntity -> new ResponseEntity<>(ricRepositoryMapper.toRicInfoListV3(responseEntity.getBody()), responseEntity.getStatusCode()))
+ .map(responseEntity ->
+ new ResponseEntity<>(
+ ricRepositoryMapper.toRicInfoListV3(responseEntity.getBody()),
+ responseEntity.getStatusCode()))
.doOnError(errorHandlingService::handleError);
}
+
+ private RicInfo toRicInfo(Ric ric) {
+ return new RicInfo().ricId(ric.id())
+ .managedElementIds((List<String>) ric.getManagedElementIds())
+ .policyTypeIds((List<String>) ric.getSupportedPolicyTypeNames())
+ .state(toRicState(ric.getState()));
+ }
+
+ private RicInfo.StateEnum toRicState(Ric.RicState state) {
+ return switch (state) {
+ case AVAILABLE -> RicInfo.StateEnum.AVAILABLE;
+ case CONSISTENCY_CHECK -> RicInfo.StateEnum.CONSISTENCY_CHECK;
+ case SYNCHRONIZING -> RicInfo.StateEnum.SYNCHRONIZING;
+ case UNAVAILABLE -> RicInfo.StateEnum.UNAVAILABLE;
+ };
+ }
}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/util/v3/Helper.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/util/v3/Helper.java
index 3f301b77..8f3be34a 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/util/v3/Helper.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/util/v3/Helper.java
@@ -2,7 +2,7 @@
* ========================LICENSE_START=================================
* ONAP : ccsdk oran
* ======================================================================
- * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+ * Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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.
@@ -23,6 +23,7 @@ package org.onap.ccsdk.oran.a1policymanagementservice.util.v3;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.RequiredArgsConstructor;
+import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.InvalidRequestException;
import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.ServiceException;
import org.onap.ccsdk.oran.a1policymanagementservice.models.v3.PolicyInformation;
import org.onap.ccsdk.oran.a1policymanagementservice.models.v3.PolicyObjectInformation;
@@ -43,6 +44,7 @@ import reactor.core.publisher.Mono;
import java.lang.invoke.MethodHandles;
import java.time.Instant;
import java.util.Collection;
+import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -149,4 +151,17 @@ public class Helper {
.map(type -> new PolicyTypeInformation(type.getId(), ric.getConfig().getRicId()))
.collect(Collectors.toList());
}
+
+
+ public void validateQueryParameters(ServerWebExchange exchange, Set<String> allowedParams) throws InvalidRequestException {
+ Set<String> receivedParams = exchange.getRequest().getQueryParams().keySet();
+
+ Set<String> extraParams = receivedParams.stream()
+ .filter(param -> !allowedParams.contains(param))
+ .collect(Collectors.toSet());
+
+ if (!extraParams.isEmpty()) {
+ throw new InvalidRequestException("Unexpected query parameters: " + extraParams);
+ }
+ }
}
diff --git a/a1-policy-management/src/main/resources/application_configuration_schema.json b/a1-policy-management/src/main/resources/application_configuration_schema.json
index 8476951c..3186dae6 100644
--- a/a1-policy-management/src/main/resources/application_configuration_schema.json
+++ b/a1-policy-management/src/main/resources/application_configuration_schema.json
@@ -72,8 +72,7 @@
},
"required": [
"name",
- "baseUrl",
- "managedElementIds"
+ "baseUrl"
],
"additionalProperties": false
}