blob: e2f23c02a117ad0ffd9f17ad00ddc09d94e4fa6f [file] [log] [blame]
Shravan Ambatibb6b4452016-05-04 13:25:28 -07001/**
2 * Copyright 2016 Open Networking Laboratory
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6
7 * http://www.apache.org/licenses/LICENSE-2.0
8
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15package org.onosproject.kafkaintegration.listener;
16
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070017import com.google.protobuf.GeneratedMessage;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070018import org.onosproject.event.ListenerService;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070019import org.onosproject.kafkaintegration.api.dto.OnosEvent.Type;
20import org.onosproject.kafkaintegration.converter.ConversionFactory;
21import org.onosproject.kafkaintegration.converter.EventConverter;
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070022import org.onosproject.kafkaintegration.impl.KafkaPublisherManager;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070023import org.onosproject.net.device.DeviceEvent;
24import org.onosproject.net.device.DeviceListener;
25import org.onosproject.net.device.DeviceService;
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070026import org.slf4j.Logger;
27import org.slf4j.LoggerFactory;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070028
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070029import static org.onosproject.kafkaintegration.api.dto.OnosEvent.Type.DEVICE;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070030
31/**
32 * Listens for ONOS Device events.
33 *
34 */
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070035public final class DeviceEventsListener implements OnosEventListener {
36
37 private final Logger log = LoggerFactory.getLogger(getClass());
Shravan Ambatibb6b4452016-05-04 13:25:28 -070038
39 private boolean listenerRunning = false;
40
41 private InnerListener listener = null;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070042 // Exists to defeat instantiation
43 private DeviceEventsListener() {
44 }
45
46 private static class SingletonHolder {
47 private static final DeviceEventsListener INSTANCE =
48 new DeviceEventsListener();
49 }
50
51 /**
52 * Returns a static reference to the Listener Factory.
53 *
54 * @return singleton object
55 */
56 public static DeviceEventsListener getInstance() {
57 return SingletonHolder.INSTANCE;
58 }
59
60 @Override
61 public void startListener(Type e, ListenerService<?, ?> service) {
62 if (!listenerRunning) {
63 listener = new InnerListener();
64 DeviceService deviceService = (DeviceService) service;
65 deviceService.addListener(listener);
66 listenerRunning = true;
67 }
68 }
69
70 private class InnerListener implements DeviceListener {
71
72 @Override
73 public void event(DeviceEvent arg0) {
74
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070075 // Convert the event to protobuf format
Shravan Ambatibb6b4452016-05-04 13:25:28 -070076 ConversionFactory conversionFactory =
77 ConversionFactory.getInstance();
78 EventConverter converter = conversionFactory.getConverter(DEVICE);
79 GeneratedMessage message = converter.convertToProtoMessage(arg0);
80
81 // Call Dispatcher and publish event
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070082 KafkaPublisherManager.getInstance().publish(DEVICE, message);
Shravan Ambatibb6b4452016-05-04 13:25:28 -070083 }
84 }
85
86 @Override
87 public void stopListener(Type e, ListenerService<?, ?> service) {
88 if (listenerRunning) {
89 DeviceService deviceService = (DeviceService) service;
90 deviceService.removeListener(listener);
91 listener = null;
92 listenerRunning = false;
93 }
94 }
95
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070096}