Merge "Mapper to form event for DMI Plugin"
[cps.git] / cps-ncmp-service / src / main / java / org / onap / cps / ncmp / api / impl / utils / CmHandleIdMapper.java
1 /*
2  * ============LICENSE_START========================================================
3  * Copyright (c) 2024 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.api.impl.utils;
22
23 import java.util.Map;
24 import lombok.RequiredArgsConstructor;
25 import lombok.extern.slf4j.Slf4j;
26 import org.apache.commons.lang3.StringUtils;
27 import org.onap.cps.ncmp.api.NetworkCmProxyCmHandleQueryService;
28 import org.springframework.stereotype.Service;
29
30 @Service
31 @Slf4j
32 @RequiredArgsConstructor
33 public class CmHandleIdMapper {
34
35     private final Map<String, String> alternateIdPerCmHandleId;
36     private final Map<String, String> cmHandleIdPerAlternateId;
37     private final NetworkCmProxyCmHandleQueryService networkCmProxyCmHandleQueryService;
38
39     private boolean cacheIsInitialized = false;
40
41     public String cmHandleIdToAlternateId(final String cmHandleId) {
42         initializeCache();
43         return alternateIdPerCmHandleId.get(cmHandleId);
44     }
45
46     public String alternateIdToCmHandleId(final String alternateId) {
47         initializeCache();
48         return cmHandleIdPerAlternateId.get(alternateId);
49     }
50
51     public boolean addMapping(final String cmHandleId, final String alternateId) {
52         initializeCache();
53         return addMappingWithValidation(cmHandleId, alternateId);
54     }
55
56
57     private boolean addMappingWithValidation(final String cmHandleId, final String alternateId) {
58         if (alternateIdPerCmHandleId.containsKey(cmHandleId)) {
59             final String originalAlternateId = alternateIdPerCmHandleId.get(cmHandleId);
60             if (!originalAlternateId.equals(alternateId)) {
61                 log.warn("Alternate id update ignored, cannot update cm handle {}, already has an alternate id of {}",
62                         cmHandleId, originalAlternateId);
63             }
64             return false;
65         }
66         if (StringUtils.isBlank(alternateId)) {
67             return false;
68         }
69         alternateIdPerCmHandleId.put(cmHandleId, alternateId);
70         cmHandleIdPerAlternateId.put(alternateId, cmHandleId);
71         return true;
72     }
73
74     public void removeMapping(final String cmHandleId) {
75         final String alternateId = alternateIdPerCmHandleId.remove(cmHandleId);
76         removeAlternateIdWithValidation(alternateId);
77     }
78
79     private void removeAlternateIdWithValidation(final String alternateId) {
80         if (alternateId != null) {
81             cmHandleIdPerAlternateId.remove(alternateId);
82         }
83     }
84
85     private void initializeCache() {
86         if (!cacheIsInitialized) {
87             networkCmProxyCmHandleQueryService.getAllCmHandles().forEach(cmHandle ->
88                 addMappingWithValidation(cmHandle.getCmHandleId(), cmHandle.getAlternateId())
89             );
90             log.info("Alternate ID cache initialized from DB with {} cm handle/alternate id pairs ",
91                     alternateIdPerCmHandleId.size());
92             cacheIsInitialized = true;
93         }
94     }
95 }