ce2769e671bb36d6d2ee8f392a7c06a7f57cc745
[ccsdk/oran.git] /
1 /*-
2  * ========================LICENSE_START=================================
3  * ONAP : ccsdk oran
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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===================================
19  */
20
21 package org.onap.ccsdk.oran.a1policymanagementservice.controllers.v3;
22
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;
42
43 import java.util.List;
44 import java.util.Set;
45
46 @RestController("ricRepositoryControllerV3")
47 @RequiredArgsConstructor
48 @Tag(
49         name = RicRepositoryControllerV3.API_NAME,
50         description = RicRepositoryControllerV3.API_DESCRIPTION
51 )
52 @RequestMapping(Consts.V3_API_ROOT)
53 public class RicRepositoryControllerV3 implements NearRtRicRepositoryApi {
54
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";
57
58     private final RicRepositoryController ricRepositoryController;
59
60     private final RicRepositoryMapper ricRepositoryMapper;
61
62     private final ErrorHandlingService errorHandlingService;
63
64     private final Rics rics;
65
66     private final Helper helper;
67
68     @Override
69     public Mono<ResponseEntity<RicInfo>> getRic(String ricId, String accept, ServerWebExchange exchange) throws Exception {
70
71         helper.validateQueryParameters(exchange, Set.of("ricId"));
72
73         if (ricId != null) {
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);
79         } else {
80             throw new InvalidRequestException("Only one parameter allowed");
81         }
82     }
83
84     @Override
85     public Mono<ResponseEntity<RicInfoList>> getRics(String policyTypeId, String accept,
86                                                      ServerWebExchange exchange) throws Exception {
87         return ricRepositoryController.getRics(policyTypeId, exchange)
88                 .map(responseEntity ->
89                         new ResponseEntity<>(
90                                 ricRepositoryMapper.toRicInfoListV3(responseEntity.getBody()),
91                                 responseEntity.getStatusCode()))
92                 .doOnError(errorHandlingService::handleError);
93     }
94
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()));
100     }
101
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;
108         };
109     }
110 }