blob: 39ab078a015f6ae17b0187bc121c3545474036d1 [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.link.LinkEvent;
24import org.onosproject.net.link.LinkListener;
25import org.onosproject.net.link.LinkService;
26
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070027import static org.onosproject.kafkaintegration.api.dto.OnosEvent.Type.LINK;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070028
29/**
30 * Listens for ONOS Link Events.
31 *
32 */
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070033public final class LinkEventsListener implements OnosEventListener {
Shravan Ambatibb6b4452016-05-04 13:25:28 -070034
35 private boolean listenerRunning = false;
36
37 private InnerListener listener = null;
Shravan Ambatibb6b4452016-05-04 13:25:28 -070038 // Exists to defeat instantiation
39 private LinkEventsListener() {
40 }
41
42 private static class SingletonHolder {
43 private static final LinkEventsListener INSTANCE =
44 new LinkEventsListener();
45 }
46
47 /**
48 * Returns a static reference to the Listener Factory.
49 *
50 * @return singleton object
51 */
52 public static LinkEventsListener getInstance() {
53 return SingletonHolder.INSTANCE;
54 }
55
56 @Override
57 public void startListener(Type e, ListenerService<?, ?> service) {
58 if (!listenerRunning) {
59 listener = new InnerListener();
60 LinkService linkService = (LinkService) service;
61 linkService.addListener(listener);
62 listenerRunning = true;
63 }
64 }
65
66 private class InnerListener implements LinkListener {
67
68 @Override
69 public void event(LinkEvent arg0) {
70
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070071 // Convert the event to protobuf format
Shravan Ambatibb6b4452016-05-04 13:25:28 -070072 ConversionFactory conversionFactory =
73 ConversionFactory.getInstance();
74 EventConverter converter = conversionFactory.getConverter(LINK);
75 GeneratedMessage message = converter.convertToProtoMessage(arg0);
76
77 // Call Dispatcher and publish event
Sanjana Agarwalcb4a3db2016-07-14 11:42:48 -070078 KafkaPublisherManager.getInstance().publish(LINK, message);
Shravan Ambatibb6b4452016-05-04 13:25:28 -070079 }
80 }
81
82 @Override
83 public void stopListener(Type e, ListenerService<?, ?> service) {
84 if (listenerRunning) {
85 LinkService linkService = (LinkService) service;
86 linkService.removeListener(listener);
87 listenerRunning = false;
88 }
89 }
90}