blob: 40c656172710b99e6ad98184ca5872e83044558f [file] [log] [blame]
Ray Milkey2d572dd2017-04-14 10:01:24 -07001/*
Brian O'Connor0a4e6742016-09-15 23:03:10 -07002 * Copyright 2016-present Open Networking Laboratory
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;
21import org.onosproject.grpc.net.Device.DeviceCore;
22import org.onosproject.grpc.net.Device.DeviceType;
23import org.onosproject.grpc.net.DeviceEvent.DeviceEventType;
24import org.onosproject.grpc.net.DeviceEvent.DeviceNotification;
25import org.onosproject.grpc.net.Port.PortCore;
26import org.onosproject.grpc.net.Port.PortType;
27import org.onosproject.net.device.DeviceEvent;
28import org.slf4j.Logger;
29import org.slf4j.LoggerFactory;
30
Shravan Ambatibb6b4452016-05-04 13:25:28 -070031/**
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070032 * Converts ONOS Device event message to protobuf format.
Shravan Ambatibb6b4452016-05-04 13:25:28 -070033 */
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070034public class DeviceEventConverter implements EventConverter {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070035
36 private final Logger log = LoggerFactory.getLogger(getClass());
37
38 @Override
Shravan Ambatia4875d82017-01-09 13:06:51 -080039 public byte[] convertToProtoMessage(Event<?, ?> event) {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070040
41 DeviceEvent deviceEvent = (DeviceEvent) event;
42
Shravan Ambati32770ad2016-07-11 21:18:11 -070043 if (!deviceEventTypeSupported(deviceEvent)) {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070044 log.error("Unsupported Onos Device Event {}. There is no matching"
45 + "proto Device Event type", deviceEvent.type().toString());
46 return null;
47 }
48
Shravan Ambatia4875d82017-01-09 13:06:51 -080049 return ((GeneratedMessageV3) buildDeviceProtoMessage(deviceEvent)).toByteArray();
Shravan Ambatibb6b4452016-05-04 13:25:28 -070050 }
51
52 /**
53 * Checks if the ONOS Device Event type is supported.
54 *
55 * @param event ONOS Device event
56 * @return true if there is a match and false otherwise
57 */
Shravan Ambati32770ad2016-07-11 21:18:11 -070058 private boolean deviceEventTypeSupported(DeviceEvent event) {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070059 DeviceEventType[] deviceEvents = DeviceEventType.values();
60 for (DeviceEventType deviceEventType : deviceEvents) {
61 if (deviceEventType.name().equals(event.type().name())) {
62 return true;
63 }
64 }
65
66 return false;
67 }
68
69 private DeviceNotification buildDeviceProtoMessage(DeviceEvent deviceEvent) {
Shravan Ambati32770ad2016-07-11 21:18:11 -070070 DeviceNotification.Builder notificationBuilder =
71 DeviceNotification.newBuilder();
72
73 DeviceCore deviceCore =
74 DeviceCore.newBuilder()
Shravan Ambatibb6b4452016-05-04 13:25:28 -070075 .setChassisId(deviceEvent.subject().chassisId().id()
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070076 .toString())
Shravan Ambatibb6b4452016-05-04 13:25:28 -070077 .setDeviceId(deviceEvent.subject().id().toString())
78 .setHwVersion(deviceEvent.subject().hwVersion())
79 .setManufacturer(deviceEvent.subject().manufacturer())
80 .setSerialNumber(deviceEvent.subject().serialNumber())
81 .setSwVersion(deviceEvent.subject().swVersion())
Shravan Ambati32770ad2016-07-11 21:18:11 -070082 .setType(DeviceType
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070083 .valueOf(deviceEvent.subject().type().name()))
Shravan Ambati32770ad2016-07-11 21:18:11 -070084 .build();
Shravan Ambatibb6b4452016-05-04 13:25:28 -070085
Shravan Ambati32770ad2016-07-11 21:18:11 -070086 PortCore portCore = null;
87 if (deviceEvent.port() != null) {
88 portCore =
89 PortCore.newBuilder()
90 .setIsEnabled(deviceEvent.port().isEnabled())
91 .setPortNumber(deviceEvent.port().number()
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070092 .toString())
Shravan Ambati32770ad2016-07-11 21:18:11 -070093 .setPortSpeed(deviceEvent.port().portSpeed())
94 .setType(PortType
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070095 .valueOf(deviceEvent.port().type().name()))
Shravan Ambati32770ad2016-07-11 21:18:11 -070096 .build();
97
98 notificationBuilder.setPort(portCore);
99 }
100
101 notificationBuilder.setDeviceEventType(getProtoType(deviceEvent))
102 .setDevice(deviceCore);
103
104 return notificationBuilder.build();
Shravan Ambatibb6b4452016-05-04 13:25:28 -0700105 }
106
107 /**
108 * Retrieves the protobuf generated device event type.
109 *
110 * @param event ONOS Device Event
111 * @return generated Device Event Type
112 */
113 private DeviceEventType getProtoType(DeviceEvent event) {
114 DeviceEventType protobufEventType = null;
115 DeviceEventType[] deviceEvents = DeviceEventType.values();
116 for (DeviceEventType deviceEventType : deviceEvents) {
117 if (deviceEventType.name().equals(event.type().name())) {
118 protobufEventType = deviceEventType;
119 }
120 }
121
122 return protobufEventType;
123 }
124}