Migration to TAPI 2.4 Step2
[transportpce.git] / nbinotifications / src / main / java / org / opendaylight / transportpce / nbinotifications / serialization / TapiNotificationDeserializer.java
1 /*
2  * Copyright © 2021 Nokia, 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.serialization;
9
10 import java.nio.charset.StandardCharsets;
11 import java.util.HashMap;
12 import java.util.Map;
13 import org.apache.kafka.common.serialization.Deserializer;
14 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
15 import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
16 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name;
17 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder;
18 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey;
19 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.Notification;
20 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.NotificationBuilder;
21 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.AdditionalInfo;
22 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.AdditionalInfoBuilder;
23 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.AdditionalInfoKey;
24 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.ChangedAttributes;
25 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.ChangedAttributesBuilder;
26 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.ChangedAttributesKey;
27 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectName;
28 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectNameBuilder;
29 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectNameKey;
30 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
31 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 public class TapiNotificationDeserializer implements Deserializer<Notification> {
36     private static final Logger LOG = LoggerFactory.getLogger(TapiNotificationDeserializer.class);
37     private JsonStringConverter<NotificationTapiService> converter;
38
39     @SuppressWarnings("unchecked")
40     @Override
41     public void configure(Map<String, ?> configs, boolean isKey) {
42         LOG.info("Tapi Deserializer configuration {}", configs);
43         if (configs.containsKey(ConfigConstants.CONVERTER)
44             && configs.get(ConfigConstants.CONVERTER) instanceof JsonStringConverter<?>) {
45             converter = (JsonStringConverter<NotificationTapiService>) configs.get(ConfigConstants.CONVERTER);
46         }
47     }
48
49     @Override
50     public Notification deserialize(String topic, byte[] data) {
51         if (converter == null) {
52             throw new IllegalArgumentException(
53                 "Converter should be configured through configure method of deserializer");
54         }
55         String value = new String(data, StandardCharsets.UTF_8);
56         // The message published is
57         // org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService
58         // we have to map it to
59         // org.opendaylight.yang.gen.v1
60         // .urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.Notification
61         NotificationTapiService mappedString = converter.createDataObjectFromJsonString(
62             YangInstanceIdentifier.of(NotificationTapiService.QNAME), value, JSONCodecFactorySupplier.RFC7951);
63         if (mappedString == null) {
64             return null;
65         }
66         LOG.info("Reading Tapi event {}", mappedString);
67         return transformNotificationTapiService(mappedString);
68     }
69
70     private Notification transformNotificationTapiService(NotificationTapiService mappedString) {
71         LOG.info("Transforming TAPI notification for getNotificationList rpc");
72         Map<AdditionalInfoKey, AdditionalInfo> addInfoMap = new HashMap<>();
73         if (mappedString.getAdditionalInfo() != null) {
74             for (org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.AdditionalInfo
75                     addInfo:mappedString.getAdditionalInfo().values()) {
76                 AdditionalInfo transAddInfo = new AdditionalInfoBuilder()
77                     .setValue(addInfo.getValue())
78                     .setValueName(addInfo.getValueName())
79                     .build();
80                 addInfoMap.put(transAddInfo.key(), transAddInfo);
81             }
82         }
83         Map<ChangedAttributesKey, ChangedAttributes> changedAttMap = new HashMap<>();
84         if (mappedString.getChangedAttributes() != null) {
85             for (org.opendaylight.yang.gen.v1
86                     .nbi.notifications.rev230728.notification.tapi.service.ChangedAttributes changedAtt:mappedString
87                         .getChangedAttributes().values()) {
88                 ChangedAttributes transChangedAtt = new ChangedAttributesBuilder(changedAtt).build();
89                 changedAttMap.put(transChangedAtt.key(), transChangedAtt);
90             }
91         }
92         Map<NameKey, Name> nameMap = new HashMap<>();
93         if (mappedString.getName() != null) {
94             for (Name name:mappedString.getName().values()) {
95                 Name transName = new NameBuilder(name).build();
96                 nameMap.put(transName.key(), transName);
97             }
98         }
99         Map<TargetObjectNameKey, TargetObjectName> targetObjNameMap = new HashMap<>();
100         if (mappedString.getTargetObjectName() != null) {
101             for (org.opendaylight.yang.gen.v1
102                     .nbi.notifications.rev230728.notification.tapi.service.TargetObjectName
103                         targetObjectName:mappedString.getTargetObjectName().values()) {
104                 TargetObjectName transTargetObjName = new TargetObjectNameBuilder(targetObjectName).build();
105                 targetObjNameMap.put(transTargetObjName.key(), transTargetObjName);
106             }
107         }
108
109 //       In TAPI 2.4 get-notifcation-list, there is no more alarm-info and Tca-info
110         LOG.info("Notification uuid = {}", mappedString.getUuid().getValue());
111         return new NotificationBuilder()
112 //            .setAlarmInfo(mappedString.getAlarmInfo() == null ? null
113 //                : new AlarmInfoBuilder(mappedString.getAlarmInfo()).build())
114             .setAdditionalText(mappedString.getAdditionalText())
115             .setAdditionalInfo(addInfoMap)
116             .setNotificationType(mappedString.getNotificationType())
117             .setChangedAttributes(changedAttMap)
118             .setEventTimeStamp(mappedString.getEventTimeStamp())
119             .setLayerProtocolName(mappedString.getLayerProtocolName())
120             .setName(nameMap)
121             .setSequenceNumber(mappedString.getSequenceNumber())
122             .setSourceIndicator(mappedString.getSourceIndicator())
123             .setTargetObjectIdentifier(mappedString.getTargetObjectIdentifier())
124             .setTargetObjectName(targetObjNameMap)
125             .setTargetObjectType(mappedString.getTargetObjectType())
126 //            .setTcaInfo(mappedString.getTcaInfo() == null ? null
127 //                : new TcaInfoBuilder(mappedString.getTcaInfo()).build())
128             .setUuid(mappedString.getUuid())
129             .build();
130     }
131 }
132