2 * Copyright © 2021 Nokia, Inc. and others. All rights reserved.
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
8 package org.opendaylight.transportpce.nbinotifications.serialization;
10 import java.nio.charset.StandardCharsets;
11 import java.util.HashMap;
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;
35 public class TapiNotificationDeserializer implements Deserializer<Notification> {
36 private static final Logger LOG = LoggerFactory.getLogger(TapiNotificationDeserializer.class);
37 private JsonStringConverter<NotificationTapiService> converter;
39 @SuppressWarnings("unchecked")
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);
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");
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) {
66 LOG.info("Reading Tapi event {}", mappedString);
67 return transformNotificationTapiService(mappedString);
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())
80 addInfoMap.put(transAddInfo.key(), transAddInfo);
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);
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);
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);
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())
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())