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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.cps.ncmp.api.impl.events.cmsubscription.mapper;
23 import java.util.ArrayList;
24 import java.util.HashSet;
25 import java.util.LinkedHashMap;
26 import java.util.List;
29 import lombok.RequiredArgsConstructor;
30 import org.onap.cps.ncmp.api.impl.events.cmsubscription.model.DmiCmNotificationSubscriptionPredicate;
31 import org.onap.cps.ncmp.api.impl.inventory.InventoryPersistence;
32 import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.ncmp_to_dmi.CmNotificationSubscriptionDmiInEvent;
33 import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.ncmp_to_dmi.Cmhandle;
34 import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.ncmp_to_dmi.Data;
35 import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.ncmp_to_dmi.Predicate;
36 import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.ncmp_to_dmi.ScopeFilter;
37 import org.springframework.stereotype.Component;
40 @RequiredArgsConstructor
41 public class CmNotificationSubscriptionDmiInEventMapper {
43 private final InventoryPersistence inventoryPersistence;
46 * Mapper to form a request for the DMI Plugin for the Cm Notification Subscription.
48 * @param dmiCmNotificationSubscriptionPredicates Collection of Cm Notification Subscription predicates
49 * @return CmNotificationSubscriptionDmiInEvent to be sent to DMI Plugin
51 public CmNotificationSubscriptionDmiInEvent toCmNotificationSubscriptionDmiInEvent(
52 final List<DmiCmNotificationSubscriptionPredicate> dmiCmNotificationSubscriptionPredicates) {
53 final CmNotificationSubscriptionDmiInEvent cmNotificationSubscriptionDmiInEvent =
54 new CmNotificationSubscriptionDmiInEvent();
55 final Data cmSubscriptionData = new Data();
56 cmSubscriptionData.setPredicates(mapToDmiInEventPredicates(dmiCmNotificationSubscriptionPredicates));
57 cmSubscriptionData.setCmhandles(mapToCmSubscriptionCmhandleWithPrivateProperties(
58 extractUniqueCmHandleIds(dmiCmNotificationSubscriptionPredicates)));
59 cmNotificationSubscriptionDmiInEvent.setData(cmSubscriptionData);
60 return cmNotificationSubscriptionDmiInEvent;
64 private List<Predicate> mapToDmiInEventPredicates(
65 final List<DmiCmNotificationSubscriptionPredicate> dmiCmNotificationSubscriptionPredicates) {
67 final List<Predicate> predicates = new ArrayList<>();
69 dmiCmNotificationSubscriptionPredicates.forEach(dmiCmNotificationSubscriptionPredicate -> {
70 final Predicate predicate = new Predicate();
71 final ScopeFilter scopeFilter = new ScopeFilter();
72 scopeFilter.setDatastore(ScopeFilter.Datastore.fromValue(
73 dmiCmNotificationSubscriptionPredicate.getDatastoreType().getDatastoreName()));
74 scopeFilter.setXpathFilter(dmiCmNotificationSubscriptionPredicate.getXpaths().stream().toList());
75 predicate.setScopeFilter(scopeFilter);
76 predicate.setTargetFilter(dmiCmNotificationSubscriptionPredicate.getTargetCmHandleIds().stream().toList());
77 predicates.add(predicate);
84 private List<Cmhandle> mapToCmSubscriptionCmhandleWithPrivateProperties(final Set<String> cmHandleIds) {
86 final List<Cmhandle> cmSubscriptionCmHandles = new ArrayList<>();
88 inventoryPersistence.getYangModelCmHandles(cmHandleIds).forEach(yangModelCmHandle -> {
89 final Cmhandle cmhandle = new Cmhandle();
90 final Map<String, String> cmhandleDmiProperties = new LinkedHashMap<>();
91 yangModelCmHandle.getDmiProperties()
92 .forEach(dmiProperty -> cmhandleDmiProperties.put(dmiProperty.getName(), dmiProperty.getValue()));
93 cmhandle.setCmhandleId(yangModelCmHandle.getId());
94 cmhandle.setPrivateProperties(cmhandleDmiProperties);
95 cmSubscriptionCmHandles.add(cmhandle);
98 return cmSubscriptionCmHandles;
102 private Set<String> extractUniqueCmHandleIds(
103 final List<DmiCmNotificationSubscriptionPredicate> dmiCmNotificationSubscriptionPredicates) {
105 final Set<String> cmHandleIds = new HashSet<>();
106 dmiCmNotificationSubscriptionPredicates.forEach(dmiCmNotificationSubscriptionPredicate -> cmHandleIds.addAll(
107 dmiCmNotificationSubscriptionPredicate.getTargetCmHandleIds()));