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
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.impl.datajobs.subscription.dmi;
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.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;
41 @RequiredArgsConstructor
42 public class DmiInEventMapper {
44 private final InventoryPersistence inventoryPersistence;
47 * This method maps relevant details for a subscription to a data job subscription DMI in event.
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
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);
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);
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);
82 private List<CmHandle> mapToCmSubscriptionCmHandleWithAdditionalProperties(final Set<String> cmHandleIds) {
84 final List<CmHandle> cmSubscriptionCmHandles = new ArrayList<>();
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);
97 return cmSubscriptionCmHandles;