2ca78782785fd7260f10cc967b5cfc8f308be4d7
[cps.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved.
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.datajobs.subscription.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.datajobs.subscription.ncmp_to_dmi.CmHandle;
31 import org.onap.cps.ncmp.impl.datajobs.subscription.ncmp_to_dmi.Data;
32 import org.onap.cps.ncmp.impl.datajobs.subscription.ncmp_to_dmi.DataJobSubscriptionDmiInEvent;
33 import org.onap.cps.ncmp.impl.datajobs.subscription.ncmp_to_dmi.DataSelector;
34 import org.onap.cps.ncmp.impl.datajobs.subscription.ncmp_to_dmi.ProductionJobDefinition;
35 import org.onap.cps.ncmp.impl.datajobs.subscription.ncmp_to_dmi.TargetSelector;
36 import org.onap.cps.ncmp.impl.inventory.InventoryPersistence;
37 import org.onap.cps.ncmp.impl.utils.JexParser;
38 import org.springframework.stereotype.Component;
39
40 @Component
41 @RequiredArgsConstructor
42 public class DmiInEventMapper {
43
44     private final InventoryPersistence inventoryPersistence;
45
46     /**
47      * This method maps relevant details for a subscription to a data job subscription DMI in event.
48      *
49      * @param cmHandleIds           list of cm handle ID(s)
50      * @param dataNodeSelectors     list of data node selectors
51      * @param notificationTypes     the list of notification types
52      * @param notificationFilter    the notification filter
53      * @return                      data job subscription DMI in event
54      */
55     public DataJobSubscriptionDmiInEvent toDmiInEvent(final List<String> cmHandleIds,
56                                                       final List<String> dataNodeSelectors,
57                                                       final List<String> notificationTypes,
58                                                       final String notificationFilter) {
59         final DataJobSubscriptionDmiInEvent dmiInEvent = new DataJobSubscriptionDmiInEvent();
60         final Data data = new Data();
61         final String dataNodeSelectorsAsJson = JexParser.toJsonExpressionsAsString(dataNodeSelectors);
62         data.setCmHandles(mapToCmSubscriptionCmHandleWithAdditionalProperties(new HashSet<>(cmHandleIds)));
63         addProductJobDefinition(data, dataNodeSelectorsAsJson);
64         addDataSelector(data, notificationTypes, notificationFilter);
65         dmiInEvent.setData(data);
66         return dmiInEvent;
67     }
68
69     private static void addProductJobDefinition(final Data data, final String dataNodeSelector) {
70         data.setProductionJobDefinition(new ProductionJobDefinition());
71         data.getProductionJobDefinition().setTargetSelector(new TargetSelector());
72         data.getProductionJobDefinition().getTargetSelector().setDataNodeSelector(dataNodeSelector);
73     }
74
75     private static void addDataSelector(final Data data, final List<String> notificationTypes,
76                                         final String notificationFilter) {
77         data.getProductionJobDefinition().setDataSelector(new DataSelector());
78         data.getProductionJobDefinition().getDataSelector().setNotificationTypes(notificationTypes);
79         data.getProductionJobDefinition().getDataSelector().setNotificationFilter(notificationFilter);
80     }
81
82     private List<CmHandle> mapToCmSubscriptionCmHandleWithAdditionalProperties(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> cmHandleAdditionalProperties = new LinkedHashMap<>();
89             yangModelCmHandle.getAdditionalProperties()
90                 .forEach(additionalProperty -> cmHandleAdditionalProperties.put(additionalProperty.name(),
91                     additionalProperty.value()));
92             cmHandle.setCmhandleId(yangModelCmHandle.getId());
93             cmHandle.setPrivateProperties(cmHandleAdditionalProperties);
94             cmSubscriptionCmHandles.add(cmHandle);
95         });
96
97         return cmSubscriptionCmHandles;
98
99     }
100
101 }