blob: 5abab45d53af83e76f03af5148f0ffebef1e7097 [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
Jian Lic9b4bf12017-06-26 23:50:32 +090018import com.google.protobuf.GeneratedMessageV3;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070019import org.onosproject.event.Event;
Jian Lic9b4bf12017-06-26 23:50:32 +090020import org.onosproject.grpc.net.link.models.LinkEnumsProto.LinkEventTypeProto;
21import org.onosproject.grpc.net.link.models.LinkEnumsProto.LinkStateProto;
22import org.onosproject.grpc.net.link.models.LinkEnumsProto.LinkTypeProto;
23import org.onosproject.grpc.net.link.models.LinkEventProto.LinkNotificationProto;
24import org.onosproject.grpc.net.models.ConnectPointProtoOuterClass.ConnectPointProto;
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090025import org.onosproject.grpc.net.models.LinkProtoOuterClass.LinkProto;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070026import org.onosproject.net.link.LinkEvent;
27import org.slf4j.Logger;
28import org.slf4j.LoggerFactory;
29
Shravan Ambatibb6b4452016-05-04 13:25:28 -070030/**
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070031 * Converts for ONOS Link event message to protobuf format.
Shravan Ambatibb6b4452016-05-04 13:25:28 -070032 */
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070033public class LinkEventConverter implements EventConverter {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070034
35 private final Logger log = LoggerFactory.getLogger(getClass());
36
37 @Override
Shravan Ambatia4875d82017-01-09 13:06:51 -080038 public byte[] convertToProtoMessage(Event<?, ?> event) {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070039
40 LinkEvent linkEvent = (LinkEvent) event;
41
Shravan Ambati32770ad2016-07-11 21:18:11 -070042 if (!linkEventTypeSupported(linkEvent)) {
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070043 log.error("Unsupported Onos Event {}. There is no matching "
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090044 + "proto Event type", linkEvent.type().toString());
Shravan Ambatibb6b4452016-05-04 13:25:28 -070045 return null;
46 }
47
Shravan Ambatia4875d82017-01-09 13:06:51 -080048 return ((GeneratedMessageV3) buildDeviceProtoMessage(linkEvent)).toByteArray();
Shravan Ambatibb6b4452016-05-04 13:25:28 -070049 }
50
Shravan Ambati32770ad2016-07-11 21:18:11 -070051 private boolean linkEventTypeSupported(LinkEvent event) {
Jian Lic9b4bf12017-06-26 23:50:32 +090052 LinkEventTypeProto[] kafkaLinkEvents = LinkEventTypeProto.values();
53 for (LinkEventTypeProto linkEventType : kafkaLinkEvents) {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070054 if (linkEventType.name().equals(event.type().name())) {
55 return true;
56 }
57 }
Shravan Ambatibb6b4452016-05-04 13:25:28 -070058 return false;
59 }
60
Jian Lic9b4bf12017-06-26 23:50:32 +090061 private LinkNotificationProto buildDeviceProtoMessage(LinkEvent linkEvent) {
62 LinkNotificationProto notification = LinkNotificationProto.newBuilder()
Shravan Ambatibb6b4452016-05-04 13:25:28 -070063 .setLinkEventType(getProtoType(linkEvent))
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090064 .setLink(LinkProto.newBuilder()
Jian Lic9b4bf12017-06-26 23:50:32 +090065 .setState(LinkStateProto.ACTIVE
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090066 .valueOf(linkEvent.subject().state().name()))
Jian Lic9b4bf12017-06-26 23:50:32 +090067 .setType(LinkTypeProto.valueOf(linkEvent.subject().type().name()))
68 .setDst(ConnectPointProto.newBuilder()
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090069 .setDeviceId(linkEvent.subject().dst()
70 .deviceId().toString())
71 .setPortNumber(linkEvent.subject().dst().port()
72 .toString()))
Jian Lic9b4bf12017-06-26 23:50:32 +090073 .setSrc(ConnectPointProto.newBuilder()
Aaron Kruglikov9f95f992017-06-23 14:15:25 +090074 .setDeviceId(linkEvent.subject().src()
75 .deviceId().toString())
76 .setPortNumber(linkEvent.subject().src().port()
77 .toString())))
Shravan Ambatibb6b4452016-05-04 13:25:28 -070078 .build();
79
80 return notification;
81 }
82
83 /**
84 * Returns the specific Kafka Device Event Type for the corresponding ONOS
85 * Device Event Type.
86 *
87 * @param event ONOS Device Event
88 * @return Kafka Device Event Type
89 */
Jian Lic9b4bf12017-06-26 23:50:32 +090090 private LinkEventTypeProto getProtoType(LinkEvent event) {
91 LinkEventTypeProto generatedEventType = null;
92 LinkEventTypeProto[] kafkaEvents = LinkEventTypeProto.values();
93 for (LinkEventTypeProto linkEventType : kafkaEvents) {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070094 if (linkEventType.name().equals(event.type().name())) {
95 generatedEventType = linkEventType;
96 }
97 }
98
99 return generatedEventType;
100 }
101}