blob: 8efa5267a6a1763ad7e027cafe9d500dea2486d9 [file] [log] [blame]
tomdb0d03f2014-08-27 16:34:15 -07001package org.onlab.onos.net.trivial.impl;
2
3import org.apache.felix.scr.annotations.Activate;
4import org.apache.felix.scr.annotations.Component;
5import org.apache.felix.scr.annotations.Deactivate;
tom5f38b3a2014-08-27 23:50:54 -07006import org.apache.felix.scr.annotations.Reference;
7import org.apache.felix.scr.annotations.ReferenceCardinality;
tomdb0d03f2014-08-27 16:34:15 -07008import org.apache.felix.scr.annotations.Service;
tom96dfcab2014-08-28 09:26:03 -07009import org.onlab.onos.event.AbstractListenerRegistry;
10import org.onlab.onos.event.EventDeliveryService;
tomdb0d03f2014-08-27 16:34:15 -070011import org.onlab.onos.net.link.LinkDescription;
tom5f38b3a2014-08-27 23:50:54 -070012import org.onlab.onos.net.link.LinkEvent;
13import org.onlab.onos.net.link.LinkListener;
tomdb0d03f2014-08-27 16:34:15 -070014import org.onlab.onos.net.link.LinkProvider;
tom96dfcab2014-08-28 09:26:03 -070015import org.onlab.onos.net.link.LinkProviderRegistry;
tomdb0d03f2014-08-27 16:34:15 -070016import org.onlab.onos.net.link.LinkProviderService;
tom96dfcab2014-08-28 09:26:03 -070017import org.onlab.onos.net.provider.AbstractProviderRegistry;
tomdb0d03f2014-08-27 16:34:15 -070018import org.onlab.onos.net.provider.AbstractProviderService;
19import org.slf4j.Logger;
tom5f38b3a2014-08-27 23:50:54 -070020
21import static org.slf4j.LoggerFactory.getLogger;
tomdb0d03f2014-08-27 16:34:15 -070022
23/**
24 * Provides basic implementation of the link SB & NB APIs.
25 */
26@Component(immediate = true)
27@Service
tom5f38b3a2014-08-27 23:50:54 -070028public class SimpleLinkManager
tom96dfcab2014-08-28 09:26:03 -070029 extends AbstractProviderRegistry<LinkProvider, LinkProviderService>
30 implements LinkProviderRegistry {
tomdb0d03f2014-08-27 16:34:15 -070031
tom5f38b3a2014-08-27 23:50:54 -070032 private final Logger log = getLogger(getClass());
tomdb0d03f2014-08-27 16:34:15 -070033
tom96dfcab2014-08-28 09:26:03 -070034 private final AbstractListenerRegistry<LinkEvent, LinkListener>
35 listenerRegistry = new AbstractListenerRegistry<>();
tom5f38b3a2014-08-27 23:50:54 -070036
37 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
tom96dfcab2014-08-28 09:26:03 -070038 private EventDeliveryService eventDispatcher;
tomdb0d03f2014-08-27 16:34:15 -070039
40 @Activate
41 public void activate() {
tom96dfcab2014-08-28 09:26:03 -070042 eventDispatcher.addSink(LinkEvent.class, listenerRegistry);
tomdb0d03f2014-08-27 16:34:15 -070043 log.info("Started");
44 }
45
46 @Deactivate
47 public void deactivate() {
tom5f38b3a2014-08-27 23:50:54 -070048 eventDispatcher.removeSink(LinkEvent.class);
tomdb0d03f2014-08-27 16:34:15 -070049 log.info("Stopped");
50 }
51
52 @Override
tom5f38b3a2014-08-27 23:50:54 -070053 protected LinkProviderService createProviderService(LinkProvider provider) {
54 return new InternalLinkProviderService(provider);
tomdb0d03f2014-08-27 16:34:15 -070055 }
56
57 // Personalized link provider service issued to the supplied provider.
58 private class InternalLinkProviderService extends AbstractProviderService<LinkProvider>
59 implements LinkProviderService {
60
61 public InternalLinkProviderService(LinkProvider provider) {
62 super(provider);
63 }
64
65 @Override
66 public void linkDetected(LinkDescription linkDescription) {
67 log.info("Link {} detected", linkDescription);
68 }
69
70 @Override
71 public void linkVanished(LinkDescription linkDescription) {
72 log.info("Link {} vanished", linkDescription);
73 }
74 }
75}