2 * ========================LICENSE_START=================================
4 * ======================================================================
5 * Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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
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.onap.ccsdk.oran.a1policymanagementservice.controllers.v3;
23 import io.swagger.v3.oas.annotations.tags.Tag;
24 import lombok.RequiredArgsConstructor;
25 import org.onap.ccsdk.oran.a1policymanagementservice.controllers.api.v3.NearRtRicRepositoryApi;
26 import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.Consts;
27 import org.onap.ccsdk.oran.a1policymanagementservice.exceptions.InvalidRequestException;
28 import org.onap.ccsdk.oran.a1policymanagementservice.mappers.v3.RicRepositoryMapper;
29 import org.onap.ccsdk.oran.a1policymanagementservice.controllers.v2.RicRepositoryController;
30 import org.onap.ccsdk.oran.a1policymanagementservice.models.v3.RicInfo;
31 import org.onap.ccsdk.oran.a1policymanagementservice.models.v3.RicInfoList;
32 import org.onap.ccsdk.oran.a1policymanagementservice.repository.Ric;
33 import org.onap.ccsdk.oran.a1policymanagementservice.repository.Rics;
34 import org.onap.ccsdk.oran.a1policymanagementservice.service.v3.ErrorHandlingService;
35 import org.onap.ccsdk.oran.a1policymanagementservice.util.v3.Helper;
36 import org.springframework.http.HttpStatus;
37 import org.springframework.http.ResponseEntity;
38 import org.springframework.web.bind.annotation.RequestMapping;
39 import org.springframework.web.bind.annotation.RestController;
40 import org.springframework.web.server.ServerWebExchange;
41 import reactor.core.publisher.Mono;
43 import java.util.List;
46 @RestController("ricRepositoryControllerV3")
47 @RequiredArgsConstructor
49 name = RicRepositoryControllerV3.API_NAME,
50 description = RicRepositoryControllerV3.API_DESCRIPTION
52 @RequestMapping(Consts.V3_API_ROOT)
53 public class RicRepositoryControllerV3 implements NearRtRicRepositoryApi {
55 public static final String API_NAME = "NearRT-RIC Repository V3";
56 public static final String API_DESCRIPTION = "API used to get the NearRT-RIC for the managed element";
58 private final RicRepositoryController ricRepositoryController;
60 private final RicRepositoryMapper ricRepositoryMapper;
62 private final ErrorHandlingService errorHandlingService;
64 private final Rics rics;
66 private final Helper helper;
69 public Mono<ResponseEntity<RicInfo>> getRic(String ricId, String accept, ServerWebExchange exchange) throws Exception {
71 helper.validateQueryParameters(exchange, Set.of("ricId"));
74 RicInfo info = toRicInfo(this.rics.getRic(ricId));
75 return Mono.just(new ResponseEntity<>(info, HttpStatus.OK))
76 .map(responseEntity -> new ResponseEntity<>(
77 responseEntity.getBody(), responseEntity.getStatusCode()))
78 .doOnError(errorHandlingService::handleError);
80 throw new InvalidRequestException("Only one parameter allowed");
85 public Mono<ResponseEntity<RicInfoList>> getRics(String policyTypeId, String accept,
86 ServerWebExchange exchange) throws Exception {
87 return ricRepositoryController.getRics(policyTypeId, exchange)
88 .map(responseEntity ->
90 ricRepositoryMapper.toRicInfoListV3(responseEntity.getBody()),
91 responseEntity.getStatusCode()))
92 .doOnError(errorHandlingService::handleError);
95 private RicInfo toRicInfo(Ric ric) {
96 return new RicInfo().ricId(ric.id())
97 .managedElementIds((List<String>) ric.getManagedElementIds())
98 .policyTypeIds((List<String>) ric.getSupportedPolicyTypeNames())
99 .state(toRicState(ric.getState()));
102 private RicInfo.StateEnum toRicState(Ric.RicState state) {
103 return switch (state) {
104 case AVAILABLE -> RicInfo.StateEnum.AVAILABLE;
105 case CONSISTENCY_CHECK -> RicInfo.StateEnum.CONSISTENCY_CHECK;
106 case SYNCHRONIZING -> RicInfo.StateEnum.SYNCHRONIZING;
107 case UNAVAILABLE -> RicInfo.StateEnum.UNAVAILABLE;