797fca71966b61d8a654fd07b591a7127982022c
[transportpce.git] / nbinotifications / src / main / java / org / opendaylight / transportpce / nbinotifications / listener / NbiNotificationsListenerImpl.java
1 /*
2  * Copyright © 2020 Orange, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.transportpce.nbinotifications.listener;
9
10 import java.util.HashMap;
11 import java.util.Map;
12 import org.opendaylight.transportpce.nbinotifications.producer.Publisher;
13 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
14 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
15 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmServiceBuilder;
16 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
17 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessServiceBuilder;
18 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
19 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiServiceBuilder;
20 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
21 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
22 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
23 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfo;
24 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoBuilder;
25 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoKey;
26 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AlarmInfoBuilder;
27 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributes;
28 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesBuilder;
29 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesKey;
30 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectName;
31 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameBuilder;
32 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameKey;
33 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TcaInfoBuilder;
34 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
35 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
36 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory;
39
40 public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
41     private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsListenerImpl.class);
42     private Map<String, Publisher<NotificationProcessService>> publishersServiceMap;
43     private Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap;
44     private Map<String, Publisher<NotificationTapiService>> tapiPublisherMap;
45
46     public NbiNotificationsListenerImpl(Map<String, Publisher<NotificationProcessService>> publishersServiceMap,
47                                         Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap,
48                                         Map<String, Publisher<NotificationTapiService>> tapiPublisherMap) {
49         this.publishersServiceMap = publishersServiceMap;
50         this.publishersAlarmMap = publishersAlarmMap;
51         this.tapiPublisherMap = tapiPublisherMap;
52     }
53
54     @Override
55     public void onPublishNotificationProcessService(PublishNotificationProcessService notification) {
56         LOG.info("Receiving request for publishing notification service");
57         String publisherName = notification.getPublisherName();
58         if (!publishersServiceMap.containsKey(publisherName)) {
59             LOG.error("Unknown publisher {}", publisherName);
60             return;
61         }
62         Publisher<NotificationProcessService> publisher = publishersServiceMap.get(publisherName);
63         publisher.sendEvent(new NotificationProcessServiceBuilder()
64                 .setCommonId(notification.getCommonId())
65                 .setConnectionType(notification.getConnectionType())
66                 .setMessage(notification.getMessage())
67                 .setOperationalState(notification.getOperationalState())
68                 .setResponseFailed(notification.getResponseFailed())
69                 .setServiceAEnd(notification.getServiceAEnd())
70                 .setServiceName(notification.getServiceName())
71                 .setServiceZEnd(notification.getServiceZEnd())
72                         .build(), notification.getConnectionType().getName());
73     }
74
75     @Override
76     public void onPublishNotificationAlarmService(PublishNotificationAlarmService notification) {
77         LOG.info("Receiving request for publishing notification alarm service");
78         String publisherName = notification.getPublisherName();
79         if (!publishersAlarmMap.containsKey(publisherName)) {
80             LOG.error("Unknown topic {}", publisherName);
81             return;
82         }
83         Publisher<NotificationAlarmService> publisherAlarm = publishersAlarmMap.get(publisherName);
84         publisherAlarm.sendEvent(new NotificationAlarmServiceBuilder()
85                 .setConnectionType(notification.getConnectionType())
86                 .setMessage(notification.getMessage())
87                 .setOperationalState(notification.getOperationalState())
88                 .setServiceName(notification.getServiceName())
89                         .build(), "alarm" + notification.getConnectionType().getName());
90     }
91
92     @Override
93     public void onPublishTapiNotificationService(PublishTapiNotificationService notification) {
94         LOG.info("Receiving request for publishing TAPI notification");
95         String topic = notification.getTopic();
96         if (!tapiPublisherMap.containsKey(topic)) {
97             LOG.error("Unknown topic {}", topic);
98             return;
99         }
100         Publisher<NotificationTapiService> publisher = tapiPublisherMap.get(topic);
101         publisher.sendEvent(new NotificationTapiServiceBuilder(transformTapiNotification(notification))
102                 .build(), topic);
103     }
104
105     private NotificationTapiService transformTapiNotification(PublishTapiNotificationService notification) {
106         Map<AdditionalInfoKey, AdditionalInfo> addInfoMap = new HashMap<>();
107         if (notification.getAdditionalInfo() != null) {
108             for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfo
109                 addInfo:notification.getAdditionalInfo().values()) {
110                 AdditionalInfo transAddInfo = new AdditionalInfoBuilder(addInfo).build();
111                 addInfoMap.put(transAddInfo.key(), transAddInfo);
112             }
113         }
114         Map<ChangedAttributesKey, ChangedAttributes> changedAttMap = new HashMap<>();
115         if (notification.getChangedAttributes() != null) {
116             for (org.opendaylight.yang.gen.v1
117                 .urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes
118                     changedAtt:notification.getChangedAttributes().values()) {
119                 ChangedAttributes transChangedAtt = new ChangedAttributesBuilder(changedAtt).build();
120                 changedAttMap.put(transChangedAtt.key(), transChangedAtt);
121             }
122         }
123         Map<NameKey, Name> nameMap = new HashMap<>();
124         if (notification.getName() != null) {
125             for (Name name:notification.getName().values()) {
126                 Name transName = new NameBuilder(name).build();
127                 nameMap.put(transName.key(), transName);
128             }
129         }
130         Map<TargetObjectNameKey, TargetObjectName> targetObjNameMap = new HashMap<>();
131         if (notification.getTargetObjectName() != null) {
132             for (org.opendaylight.yang.gen.v1
133                 .urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName
134                     targetObjectName:notification.getTargetObjectName().values()) {
135                 TargetObjectName transTargetObjName = new TargetObjectNameBuilder(targetObjectName).build();
136                 targetObjNameMap.put(transTargetObjName.key(), transTargetObjName);
137             }
138         }
139         LOG.info("Notification uuid = {}", notification.getUuid());
140         return new NotificationTapiServiceBuilder()
141             .setAlarmInfo(notification.getAlarmInfo() == null ? null
142                 : new AlarmInfoBuilder(notification.getAlarmInfo()).build())
143             .setAdditionalText(notification.getAdditionalText())
144             .setAdditionalInfo(addInfoMap)
145             .setNotificationType(notification.getNotificationType())
146             .setChangedAttributes(changedAttMap)
147             .setEventTimeStamp(notification.getEventTimeStamp())
148             .setLayerProtocolName(notification.getLayerProtocolName())
149             .setName(nameMap)
150             .setSequenceNumber(notification.getSequenceNumber())
151             .setSourceIndicator(notification.getSourceIndicator())
152             .setTargetObjectIdentifier(notification.getTargetObjectIdentifier())
153             .setTargetObjectName(targetObjNameMap)
154             .setTargetObjectType(notification.getTargetObjectType())
155             .setTcaInfo(notification.getTcaInfo() == null ? null
156                 : new TcaInfoBuilder(notification.getTcaInfo()).build())
157             .setUuid(notification.getUuid())
158             .build();
159     }
160
161     public void setPublishersServiceMap(Map<String, Publisher<NotificationProcessService>> publishersServiceMap) {
162         this.publishersServiceMap = publishersServiceMap;
163     }
164
165     public void setPublishersAlarmMap(Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap) {
166         this.publishersAlarmMap = publishersAlarmMap;
167     }
168
169     public void setTapiPublishersMap(Map<String, Publisher<NotificationTapiService>> tapiPublishersMap) {
170         this.tapiPublisherMap = tapiPublishersMap;
171     }
172 }