Initial tapi notification implementation
[transportpce.git] / nbinotifications / src / main / java / org / opendaylight / transportpce / nbinotifications / listener / NbiNotificationsListenerImpl.java
index 37b4c0181618044108e0d79435ca70ad5a7fa102..797fca71966b61d8a654fd07b591a7127982022c 100644 (file)
@@ -7,27 +7,48 @@
  */
 package org.opendaylight.transportpce.nbinotifications.listener;
 
+import java.util.HashMap;
 import java.util.Map;
 import org.opendaylight.transportpce.nbinotifications.producer.Publisher;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NbiNotificationsListener;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfo;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AlarmInfoBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributes;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectName;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TcaInfoBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
     private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsListenerImpl.class);
-    private final Map<String, Publisher<NotificationProcessService>> publishersServiceMap;
-    private final Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap;
+    private Map<String, Publisher<NotificationProcessService>> publishersServiceMap;
+    private Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap;
+    private Map<String, Publisher<NotificationTapiService>> tapiPublisherMap;
 
     public NbiNotificationsListenerImpl(Map<String, Publisher<NotificationProcessService>> publishersServiceMap,
-                                        Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap) {
+                                        Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap,
+                                        Map<String, Publisher<NotificationTapiService>> tapiPublisherMap) {
         this.publishersServiceMap = publishersServiceMap;
         this.publishersAlarmMap = publishersAlarmMap;
+        this.tapiPublisherMap = tapiPublisherMap;
     }
 
     @Override
@@ -67,4 +88,85 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
                 .setServiceName(notification.getServiceName())
                         .build(), "alarm" + notification.getConnectionType().getName());
     }
+
+    @Override
+    public void onPublishTapiNotificationService(PublishTapiNotificationService notification) {
+        LOG.info("Receiving request for publishing TAPI notification");
+        String topic = notification.getTopic();
+        if (!tapiPublisherMap.containsKey(topic)) {
+            LOG.error("Unknown topic {}", topic);
+            return;
+        }
+        Publisher<NotificationTapiService> publisher = tapiPublisherMap.get(topic);
+        publisher.sendEvent(new NotificationTapiServiceBuilder(transformTapiNotification(notification))
+                .build(), topic);
+    }
+
+    private NotificationTapiService transformTapiNotification(PublishTapiNotificationService notification) {
+        Map<AdditionalInfoKey, AdditionalInfo> addInfoMap = new HashMap<>();
+        if (notification.getAdditionalInfo() != null) {
+            for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfo
+                addInfo:notification.getAdditionalInfo().values()) {
+                AdditionalInfo transAddInfo = new AdditionalInfoBuilder(addInfo).build();
+                addInfoMap.put(transAddInfo.key(), transAddInfo);
+            }
+        }
+        Map<ChangedAttributesKey, ChangedAttributes> changedAttMap = new HashMap<>();
+        if (notification.getChangedAttributes() != null) {
+            for (org.opendaylight.yang.gen.v1
+                .urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes
+                    changedAtt:notification.getChangedAttributes().values()) {
+                ChangedAttributes transChangedAtt = new ChangedAttributesBuilder(changedAtt).build();
+                changedAttMap.put(transChangedAtt.key(), transChangedAtt);
+            }
+        }
+        Map<NameKey, Name> nameMap = new HashMap<>();
+        if (notification.getName() != null) {
+            for (Name name:notification.getName().values()) {
+                Name transName = new NameBuilder(name).build();
+                nameMap.put(transName.key(), transName);
+            }
+        }
+        Map<TargetObjectNameKey, TargetObjectName> targetObjNameMap = new HashMap<>();
+        if (notification.getTargetObjectName() != null) {
+            for (org.opendaylight.yang.gen.v1
+                .urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName
+                    targetObjectName:notification.getTargetObjectName().values()) {
+                TargetObjectName transTargetObjName = new TargetObjectNameBuilder(targetObjectName).build();
+                targetObjNameMap.put(transTargetObjName.key(), transTargetObjName);
+            }
+        }
+        LOG.info("Notification uuid = {}", notification.getUuid());
+        return new NotificationTapiServiceBuilder()
+            .setAlarmInfo(notification.getAlarmInfo() == null ? null
+                : new AlarmInfoBuilder(notification.getAlarmInfo()).build())
+            .setAdditionalText(notification.getAdditionalText())
+            .setAdditionalInfo(addInfoMap)
+            .setNotificationType(notification.getNotificationType())
+            .setChangedAttributes(changedAttMap)
+            .setEventTimeStamp(notification.getEventTimeStamp())
+            .setLayerProtocolName(notification.getLayerProtocolName())
+            .setName(nameMap)
+            .setSequenceNumber(notification.getSequenceNumber())
+            .setSourceIndicator(notification.getSourceIndicator())
+            .setTargetObjectIdentifier(notification.getTargetObjectIdentifier())
+            .setTargetObjectName(targetObjNameMap)
+            .setTargetObjectType(notification.getTargetObjectType())
+            .setTcaInfo(notification.getTcaInfo() == null ? null
+                : new TcaInfoBuilder(notification.getTcaInfo()).build())
+            .setUuid(notification.getUuid())
+            .build();
+    }
+
+    public void setPublishersServiceMap(Map<String, Publisher<NotificationProcessService>> publishersServiceMap) {
+        this.publishersServiceMap = publishersServiceMap;
+    }
+
+    public void setPublishersAlarmMap(Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap) {
+        this.publishersAlarmMap = publishersAlarmMap;
+    }
+
+    public void setTapiPublishersMap(Map<String, Publisher<NotificationTapiService>> tapiPublishersMap) {
+        this.tapiPublisherMap = tapiPublishersMap;
+    }
 }