Get Subscription Delta
[cps.git] / cps-ncmp-service / src / main / java / org / onap / cps / ncmp / api / impl / events / cmsubscription / mapper / CmNotificationSubscriptionDmiInEventMapper.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.events.cmsubscription.mapper;
22
23 import java.util.ArrayList;
24 import java.util.HashSet;
25 import java.util.LinkedHashMap;
26 import java.util.List;
27 import java.util.Map;
28 import java.util.Set;
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;
38
39 @Component
40 @RequiredArgsConstructor
41 public class CmNotificationSubscriptionDmiInEventMapper {
42
43     private final InventoryPersistence inventoryPersistence;
44
45     /**
46      * Mapper to form a request for the DMI Plugin for the Cm Notification Subscription.
47      *
48      * @param dmiCmNotificationSubscriptionPredicates Collection of Cm Notification Subscription predicates
49      * @return CmNotificationSubscriptionDmiInEvent to be sent to DMI Plugin
50      */
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;
61
62     }
63
64     private List<Predicate> mapToDmiInEventPredicates(
65             final List<DmiCmNotificationSubscriptionPredicate> dmiCmNotificationSubscriptionPredicates) {
66
67         final List<Predicate> predicates = new ArrayList<>();
68
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);
78         });
79
80         return predicates;
81
82     }
83
84     private List<Cmhandle> mapToCmSubscriptionCmhandleWithPrivateProperties(final Set<String> cmHandleIds) {
85
86         final List<Cmhandle> cmSubscriptionCmHandles = new ArrayList<>();
87
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);
96         });
97
98         return cmSubscriptionCmHandles;
99
100     }
101
102     private Set<String> extractUniqueCmHandleIds(
103             final List<DmiCmNotificationSubscriptionPredicate> dmiCmNotificationSubscriptionPredicates) {
104
105         final Set<String> cmHandleIds = new HashSet<>();
106         dmiCmNotificationSubscriptionPredicates.forEach(dmiCmNotificationSubscriptionPredicate -> cmHandleIds.addAll(
107                 dmiCmNotificationSubscriptionPredicate.getTargetCmHandleIds()));
108         return cmHandleIds;
109     }
110
111
112 }