4ce4ef36cf126ee9caea975459651b770846a7cd
[cps.git] /
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.impl.cmnotificationsubscription.dmi;
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.impl.cmnotificationsubscription.models.DmiCmSubscriptionPredicate;
31 import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.ncmp_to_dmi.CmHandle;
32 import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.ncmp_to_dmi.Data;
33 import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.ncmp_to_dmi.DmiInEvent;
34 import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.ncmp_to_dmi.Predicate;
35 import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.ncmp_to_dmi.ScopeFilter;
36 import org.onap.cps.ncmp.impl.inventory.InventoryPersistence;
37 import org.springframework.stereotype.Component;
38
39 @Component
40 @RequiredArgsConstructor
41 public class DmiInEventMapper {
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 dmiCmSubscriptionPredicates Collection of Cm Notification Subscription predicates
49      * @return DmiInEvent to be sent to DMI Plugin
50      */
51     public DmiInEvent toDmiInEvent(final List<DmiCmSubscriptionPredicate> dmiCmSubscriptionPredicates) {
52         final DmiInEvent dmiInEvent = new DmiInEvent();
53         final Data cmSubscriptionData = new Data();
54         cmSubscriptionData.setPredicates(mapToDmiInEventPredicates(dmiCmSubscriptionPredicates));
55         cmSubscriptionData.setCmHandles(mapToCmSubscriptionCmHandleWithPrivateProperties(
56                 extractUniqueCmHandleIds(dmiCmSubscriptionPredicates)));
57         dmiInEvent.setData(cmSubscriptionData);
58         return dmiInEvent;
59
60     }
61
62     private List<Predicate> mapToDmiInEventPredicates(
63             final List<DmiCmSubscriptionPredicate> dmiCmSubscriptionPredicates) {
64
65         final List<Predicate> predicates = new ArrayList<>();
66
67         dmiCmSubscriptionPredicates.forEach(dmiCmNotificationSubscriptionPredicate -> {
68             final Predicate predicate = new Predicate();
69             final ScopeFilter scopeFilter = new ScopeFilter();
70             scopeFilter.setDatastore(ScopeFilter.Datastore.fromValue(
71                     dmiCmNotificationSubscriptionPredicate.getDatastoreType().getDatastoreName()));
72             scopeFilter.setXpathFilter(dmiCmNotificationSubscriptionPredicate.getXpaths().stream().toList());
73             predicate.setScopeFilter(scopeFilter);
74             predicate.setTargetFilter(dmiCmNotificationSubscriptionPredicate.getTargetCmHandleIds().stream().toList());
75             predicates.add(predicate);
76         });
77
78         return predicates;
79
80     }
81
82     private List<CmHandle> mapToCmSubscriptionCmHandleWithPrivateProperties(final Set<String> cmHandleIds) {
83
84         final List<CmHandle> cmSubscriptionCmHandles = new ArrayList<>();
85
86         inventoryPersistence.getYangModelCmHandles(cmHandleIds).forEach(yangModelCmHandle -> {
87             final CmHandle cmhandle = new CmHandle();
88             final Map<String, String> cmhandleDmiProperties = new LinkedHashMap<>();
89             yangModelCmHandle.getDmiProperties()
90                     .forEach(dmiProperty -> cmhandleDmiProperties.put(dmiProperty.getName(), dmiProperty.getValue()));
91             cmhandle.setCmhandleId(yangModelCmHandle.getId());
92             cmhandle.setPrivateProperties(cmhandleDmiProperties);
93             cmSubscriptionCmHandles.add(cmhandle);
94         });
95
96         return cmSubscriptionCmHandles;
97
98     }
99
100     private Set<String> extractUniqueCmHandleIds(final List<DmiCmSubscriptionPredicate> dmiCmSubscriptionPredicates) {
101
102         final Set<String> cmHandleIds = new HashSet<>();
103         dmiCmSubscriptionPredicates.forEach(dmiCmNotificationSubscriptionPredicate -> cmHandleIds.addAll(
104                 dmiCmNotificationSubscriptionPredicate.getTargetCmHandleIds()));
105         return cmHandleIds;
106     }
107
108
109 }