blob: ecc54eb61e41b384d82bc12d8273ac2890225882 [file] [log] [blame]
Ray Milkey2d572dd2017-04-14 10:01:24 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Ray Milkey2d572dd2017-04-14 10:01:24 -07003 *
Shravan Ambatibb6b4452016-05-04 13:25:28 -07004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
Ray Milkey2d572dd2017-04-14 10:01:24 -07007 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
Shravan Ambatibb6b4452016-05-04 13:25:28 -070010 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.kafkaintegration.converter;
17
Yuta HIGUCHI9efba1e2016-07-09 11:07:13 -070018import com.google.protobuf.GeneratedMessageV3;
19
Shravan Ambatibb6b4452016-05-04 13:25:28 -070020import org.onosproject.event.Event;
Jian Lic9b4bf12017-06-26 23:50:32 +090021import org.onosproject.grpc.net.device.models.DeviceEnumsProto.DeviceEventTypeProto;
22import org.onosproject.grpc.net.device.models.DeviceEnumsProto.DeviceTypeProto;
23import org.onosproject.grpc.net.device.models.DeviceEventProto.DeviceNotificationProto;
24import org.onosproject.grpc.net.device.models.PortEnumsProto;
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090025import org.onosproject.grpc.net.models.DeviceProtoOuterClass.DeviceProto;
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090026import org.onosproject.grpc.net.models.PortProtoOuterClass;
Pravin Chaudhary31a8c292019-01-03 17:43:15 +053027import org.onosproject.incubator.protobuf.models.net.AnnotationsTranslator;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070028import org.onosproject.net.device.DeviceEvent;
29import org.slf4j.Logger;
30import org.slf4j.LoggerFactory;
31
Shravan Ambatibb6b4452016-05-04 13:25:28 -070032/**
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070033 * Converts ONOS Device event message to protobuf format.
Shravan Ambatibb6b4452016-05-04 13:25:28 -070034 */
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070035public class DeviceEventConverter implements EventConverter {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070036
37 private final Logger log = LoggerFactory.getLogger(getClass());
38
39 @Override
Shravan Ambatia4875d82017-01-09 13:06:51 -080040 public byte[] convertToProtoMessage(Event<?, ?> event) {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070041
42 DeviceEvent deviceEvent = (DeviceEvent) event;
43
Shravan Ambati32770ad2016-07-11 21:18:11 -070044 if (!deviceEventTypeSupported(deviceEvent)) {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070045 log.error("Unsupported Onos Device Event {}. There is no matching"
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090046 + "proto Device Event type", deviceEvent.type().toString());
Shravan Ambatibb6b4452016-05-04 13:25:28 -070047 return null;
48 }
49
Shravan Ambatia4875d82017-01-09 13:06:51 -080050 return ((GeneratedMessageV3) buildDeviceProtoMessage(deviceEvent)).toByteArray();
Shravan Ambatibb6b4452016-05-04 13:25:28 -070051 }
52
53 /**
54 * Checks if the ONOS Device Event type is supported.
55 *
56 * @param event ONOS Device event
57 * @return true if there is a match and false otherwise
58 */
Shravan Ambati32770ad2016-07-11 21:18:11 -070059 private boolean deviceEventTypeSupported(DeviceEvent event) {
Jian Lic9b4bf12017-06-26 23:50:32 +090060 DeviceEventTypeProto[] deviceEvents = DeviceEventTypeProto.values();
61 for (DeviceEventTypeProto deviceEventType : deviceEvents) {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070062 if (deviceEventType.name().equals(event.type().name())) {
63 return true;
64 }
65 }
66
67 return false;
68 }
69
Jian Lic9b4bf12017-06-26 23:50:32 +090070 private DeviceNotificationProto buildDeviceProtoMessage(DeviceEvent deviceEvent) {
71 DeviceNotificationProto.Builder notificationBuilder =
72 DeviceNotificationProto.newBuilder();
Shravan Ambati32770ad2016-07-11 21:18:11 -070073
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090074 DeviceProto deviceCore =
75 DeviceProto.newBuilder()
Shravan Ambatibb6b4452016-05-04 13:25:28 -070076 .setChassisId(deviceEvent.subject().chassisId().id()
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070077 .toString())
Shravan Ambatibb6b4452016-05-04 13:25:28 -070078 .setDeviceId(deviceEvent.subject().id().toString())
79 .setHwVersion(deviceEvent.subject().hwVersion())
80 .setManufacturer(deviceEvent.subject().manufacturer())
81 .setSerialNumber(deviceEvent.subject().serialNumber())
82 .setSwVersion(deviceEvent.subject().swVersion())
Jian Lic9b4bf12017-06-26 23:50:32 +090083 .setType(DeviceTypeProto
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070084 .valueOf(deviceEvent.subject().type().name()))
Pravin Chaudhary31a8c292019-01-03 17:43:15 +053085 .putAllAnnotations(AnnotationsTranslator.asMap(deviceEvent.subject().annotations()))
Shravan Ambati32770ad2016-07-11 21:18:11 -070086 .build();
Shravan Ambatibb6b4452016-05-04 13:25:28 -070087
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090088 PortProtoOuterClass.PortProto portProto = null;
Shravan Ambati32770ad2016-07-11 21:18:11 -070089 if (deviceEvent.port() != null) {
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090090 portProto =
91 PortProtoOuterClass.PortProto.newBuilder()
Shravan Ambati32770ad2016-07-11 21:18:11 -070092 .setIsEnabled(deviceEvent.port().isEnabled())
93 .setPortNumber(deviceEvent.port().number()
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070094 .toString())
Shravan Ambati32770ad2016-07-11 21:18:11 -070095 .setPortSpeed(deviceEvent.port().portSpeed())
Jian Lic9b4bf12017-06-26 23:50:32 +090096 .setType(PortEnumsProto.PortTypeProto
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070097 .valueOf(deviceEvent.port().type().name()))
Shravan Ambati32770ad2016-07-11 21:18:11 -070098 .build();
99
Aaron Kruglikov9f95f992017-06-23 14:15:25 +0900100 notificationBuilder.setPort(portProto);
Shravan Ambati32770ad2016-07-11 21:18:11 -0700101 }
102
103 notificationBuilder.setDeviceEventType(getProtoType(deviceEvent))
104 .setDevice(deviceCore);
105
106 return notificationBuilder.build();
Shravan Ambatibb6b4452016-05-04 13:25:28 -0700107 }
108
109 /**
110 * Retrieves the protobuf generated device event type.
111 *
112 * @param event ONOS Device Event
113 * @return generated Device Event Type
114 */
Jian Lic9b4bf12017-06-26 23:50:32 +0900115 private DeviceEventTypeProto getProtoType(DeviceEvent event) {
116 DeviceEventTypeProto protobufEventType = null;
117 DeviceEventTypeProto[] deviceEvents = DeviceEventTypeProto.values();
118 for (DeviceEventTypeProto deviceEventType : deviceEvents) {
Shravan Ambatibb6b4452016-05-04 13:25:28 -0700119 if (deviceEventType.name().equals(event.type().name())) {
120 protobufEventType = deviceEventType;
121 }
122 }
123
124 return protobufEventType;
125 }
126}