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.rev211013.NotificationTapiService;
16 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
17 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
18 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
19 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification;
20 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.NotificationBuilder;
21 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfo;
22 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfoBuilder;
23 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfoKey;
24 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AlarmInfoBuilder;
25 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
26 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
27 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesKey;
28 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName;
29 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder;
30 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameKey;
31 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TcaInfoBuilder;
32 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
33 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
37 public class TapiNotificationDeserializer implements Deserializer<Notification> {
38 private static final Logger LOG = LoggerFactory.getLogger(TapiNotificationDeserializer.class);
39 private JsonStringConverter<NotificationTapiService> converter;
41 @SuppressWarnings("unchecked")
43 public void configure(Map<String, ?> configs, boolean isKey) {
44 LOG.info("Tapi Deserializer configuration {}", configs);
45 if (configs.containsKey(ConfigConstants.CONVERTER)
46 && configs.get(ConfigConstants.CONVERTER) instanceof JsonStringConverter<?>) {
47 converter = (JsonStringConverter<NotificationTapiService>) configs.get(ConfigConstants.CONVERTER);
52 public Notification deserialize(String topic, byte[] data) {
53 if (converter == null) {
54 throw new IllegalArgumentException(
55 "Converter should be configured through configure method of deserializer");
57 String value = new String(data, StandardCharsets.UTF_8);
58 // The message published is
59 // org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService
60 // we have to map it to
61 // org.opendaylight.yang.gen.v1
62 // .urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification
63 NotificationTapiService mappedString = converter.createDataObjectFromJsonString(
64 YangInstanceIdentifier.of(NotificationTapiService.QNAME), value, JSONCodecFactorySupplier.RFC7951);
65 if (mappedString == null) {
68 LOG.info("Reading Tapi event {}", mappedString);
69 return transformNotificationTapiService(mappedString);
72 private Notification transformNotificationTapiService(NotificationTapiService mappedString) {
73 LOG.info("Transforming TAPI notification for getNotificationList rpc");
74 Map<AdditionalInfoKey, AdditionalInfo> addInfoMap = new HashMap<>();
75 if (mappedString.getAdditionalInfo() != null) {
76 for (org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfo
77 addInfo:mappedString.getAdditionalInfo().values()) {
78 AdditionalInfo transAddInfo = new AdditionalInfoBuilder()
79 .setValue(addInfo.getValue())
80 .setValueName(addInfo.getValueName())
82 addInfoMap.put(transAddInfo.key(), transAddInfo);
85 Map<ChangedAttributesKey, ChangedAttributes> changedAttMap = new HashMap<>();
86 if (mappedString.getChangedAttributes() != null) {
87 for (org.opendaylight.yang.gen.v1
88 .nbi.notifications.rev211013.notification.tapi.service.ChangedAttributes changedAtt:mappedString
89 .getChangedAttributes().values()) {
90 ChangedAttributes transChangedAtt = new ChangedAttributesBuilder(changedAtt).build();
91 changedAttMap.put(transChangedAtt.key(), transChangedAtt);
94 Map<NameKey, Name> nameMap = new HashMap<>();
95 if (mappedString.getName() != null) {
96 for (Name name:mappedString.getName().values()) {
97 Name transName = new NameBuilder(name).build();
98 nameMap.put(transName.key(), transName);
101 Map<TargetObjectNameKey, TargetObjectName> targetObjNameMap = new HashMap<>();
102 if (mappedString.getTargetObjectName() != null) {
103 for (org.opendaylight.yang.gen.v1
104 .nbi.notifications.rev211013.notification.tapi.service.TargetObjectName
105 targetObjectName:mappedString.getTargetObjectName().values()) {
106 TargetObjectName transTargetObjName = new TargetObjectNameBuilder(targetObjectName).build();
107 targetObjNameMap.put(transTargetObjName.key(), transTargetObjName);
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())