blob: b5d8cc443515cf856edb27492e1a8ac59773f6c4 [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
tom4c6606f2014-09-07 11:11:21 -070037 private final SimpleLinkStore store = new SimpleLinkStore();
38
tom5f38b3a2014-08-27 23:50:54 -070039 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
tom96dfcab2014-08-28 09:26:03 -070040 private EventDeliveryService eventDispatcher;
tomdb0d03f2014-08-27 16:34:15 -070041
42 @Activate
43 public void activate() {
tom96dfcab2014-08-28 09:26:03 -070044 eventDispatcher.addSink(LinkEvent.class, listenerRegistry);
tomdb0d03f2014-08-27 16:34:15 -070045 log.info("Started");
46 }
47
48 @Deactivate
49 public void deactivate() {
tom5f38b3a2014-08-27 23:50:54 -070050 eventDispatcher.removeSink(LinkEvent.class);
tomdb0d03f2014-08-27 16:34:15 -070051 log.info("Stopped");
52 }
53
54 @Override
tom5f38b3a2014-08-27 23:50:54 -070055 protected LinkProviderService createProviderService(LinkProvider provider) {
56 return new InternalLinkProviderService(provider);
tomdb0d03f2014-08-27 16:34:15 -070057 }
58
59 // Personalized link provider service issued to the supplied provider.
60 private class InternalLinkProviderService extends AbstractProviderService<LinkProvider>
61 implements LinkProviderService {
62
63 public InternalLinkProviderService(LinkProvider provider) {
64 super(provider);
65 }
66
67 @Override
68 public void linkDetected(LinkDescription linkDescription) {
69 log.info("Link {} detected", linkDescription);
70 }
71
72 @Override
73 public void linkVanished(LinkDescription linkDescription) {
74 log.info("Link {} vanished", linkDescription);
75 }
76 }
77}