Save new cm notification subscription
[cps.git] / cps-ncmp-rest / src / main / java / org / onap / cps / ncmp / rest / controller / handlers / NcmpCachedResourceRequestHandler.java
1 /*
2  *  ============LICENSE_START=======================================================
3  *  Copyright (C) 2022-2023 Nordix Foundation
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *  SPDX-License-Identifier: Apache-2.0
18  *  ============LICENSE_END=========================================================
19  */
20
21 package org.onap.cps.ncmp.rest.controller.handlers;
22
23 import java.util.function.Supplier;
24 import org.onap.cps.ncmp.api.NetworkCmProxyDataService;
25 import org.onap.cps.ncmp.api.NetworkCmProxyQueryService;
26 import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor;
27 import org.onap.cps.spi.FetchDescendantsOption;
28 import org.springframework.http.ResponseEntity;
29 import org.springframework.stereotype.Component;
30
31 @Component
32 public class NcmpCachedResourceRequestHandler extends NcmpDatastoreRequestHandler {
33
34     private final NetworkCmProxyDataService networkCmProxyDataService;
35     private final NetworkCmProxyQueryService networkCmProxyQueryService;
36
37     /**
38      * Constructor.
39      *
40      * @param cpsNcmpTaskExecutor        @see org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor
41      * @param networkCmProxyDataService  @see org.onap.cps.ncmp.api.NetworkCmProxyDataService
42      * @param networkCmProxyQueryService @see org.onap.cps.ncmp.api.NetworkCmProxyQueryService
43      */
44     public NcmpCachedResourceRequestHandler(final CpsNcmpTaskExecutor cpsNcmpTaskExecutor,
45                                             final NetworkCmProxyDataService networkCmProxyDataService,
46                                             final NetworkCmProxyQueryService networkCmProxyQueryService) {
47         super(cpsNcmpTaskExecutor);
48         this.networkCmProxyDataService = networkCmProxyDataService;
49         this.networkCmProxyQueryService = networkCmProxyQueryService;
50     }
51
52     /**
53      * Executes a synchronous query request for given cm handle.
54      * Note. Currently only ncmp-datastore:operational supports query operations.
55      *
56      * @param cmHandleId         the cm handle
57      * @param resourceIdentifier the resource identifier
58      * @param includeDescendants whether include descendants
59      * @return the response entity
60      */
61     public ResponseEntity<Object> executeRequest(final String cmHandleId,
62                                                  final String resourceIdentifier,
63                                                  final boolean includeDescendants) {
64
65         final Supplier<Object> taskSupplier = getTaskSupplierForQueryRequest(cmHandleId, resourceIdentifier,
66             includeDescendants);
67         return executeTaskSync(taskSupplier);
68     }
69
70     @Override
71     protected Supplier<Object> getTaskSupplierForGetRequest(final String datastoreName,
72                                                   final String cmHandleId,
73                                                   final String resourceIdentifier,
74                                                   final String optionsParamInQuery,
75                                                   final String topicParamInQuery,
76                                                   final String requestId,
77                                                   final boolean includeDescendants,
78                                                   final String authorization) {
79
80         final FetchDescendantsOption fetchDescendantsOption = getFetchDescendantsOption(includeDescendants);
81
82         return () -> networkCmProxyDataService.getResourceDataForCmHandle(datastoreName, cmHandleId, resourceIdentifier,
83             fetchDescendantsOption);
84     }
85
86     private Supplier<Object> getTaskSupplierForQueryRequest(final String cmHandleId,
87                                                             final String resourceIdentifier,
88                                                             final boolean includeDescendants) {
89
90         final FetchDescendantsOption fetchDescendantsOption = getFetchDescendantsOption(includeDescendants);
91
92         return () -> networkCmProxyQueryService.queryResourceDataOperational(cmHandleId, resourceIdentifier,
93             fetchDescendantsOption);
94     }
95
96     private static FetchDescendantsOption getFetchDescendantsOption(final boolean includeDescendants) {
97         return includeDescendants ? FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS
98             : FetchDescendantsOption.OMIT_DESCENDANTS;
99     }
100
101
102 }