blob: 1ea06389992bf926e666f945ff50aaf9b415aa33 [file] [log] [blame]
tomcfde0622014-09-09 11:02:42 -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;
6import org.apache.felix.scr.annotations.Reference;
7import org.apache.felix.scr.annotations.ReferenceCardinality;
8import org.apache.felix.scr.annotations.Service;
9import org.onlab.graph.Graph;
10import org.onlab.onos.event.AbstractListenerRegistry;
11import org.onlab.onos.event.Event;
12import org.onlab.onos.event.EventDeliveryService;
13import org.onlab.onos.net.ConnectPoint;
14import org.onlab.onos.net.DeviceId;
15import org.onlab.onos.net.Path;
16import org.onlab.onos.net.provider.AbstractProviderRegistry;
17import org.onlab.onos.net.provider.AbstractProviderService;
18import org.onlab.onos.net.topology.LinkWeight;
19import org.onlab.onos.net.topology.TopoEdge;
20import org.onlab.onos.net.topology.TopoVertex;
21import org.onlab.onos.net.topology.Topology;
22import org.onlab.onos.net.topology.TopologyCluster;
23import org.onlab.onos.net.topology.TopologyDescription;
24import org.onlab.onos.net.topology.TopologyEvent;
25import org.onlab.onos.net.topology.TopologyListener;
26import org.onlab.onos.net.topology.TopologyProvider;
27import org.onlab.onos.net.topology.TopologyProviderRegistry;
28import org.onlab.onos.net.topology.TopologyProviderService;
29import org.onlab.onos.net.topology.TopologyService;
30import org.slf4j.Logger;
31
32import java.util.List;
33import java.util.Set;
34
35import static com.google.common.base.Preconditions.checkNotNull;
36import static org.slf4j.LoggerFactory.getLogger;
37
38/**
39 * Provides basic implementation of the topology SB & NB APIs.
40 */
41@Component(immediate = true)
42@Service
43public class SimpleTopologyManager
44 extends AbstractProviderRegistry<TopologyProvider, TopologyProviderService>
45 implements TopologyService, TopologyProviderRegistry {
46
47 public static final String TOPOLOGY_NULL = "Topology cannot be null";
48 private static final String DEVICE_ID_NULL = "Device ID cannot be null";
49 public static final String CONNECTION_POINT_NULL = "Connection point cannot be null";
50
51 private final Logger log = getLogger(getClass());
52
53 private final AbstractListenerRegistry<TopologyEvent, TopologyListener>
54 listenerRegistry = new AbstractListenerRegistry<>();
55
56 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
57 private EventDeliveryService eventDispatcher;
58
59
60 @Activate
61 public void activate() {
62 eventDispatcher.addSink(TopologyEvent.class, listenerRegistry);
63 log.info("Started");
64 }
65
66 @Deactivate
67 public void deactivate() {
68 eventDispatcher.removeSink(TopologyEvent.class);
69 log.info("Stopped");
70 }
71
72 @Override
73 protected TopologyProviderService createProviderService(TopologyProvider provider) {
74 return new InternalTopologyProviderService(provider);
75 }
76
77 @Override
78 public Topology currentTopology() {
79 return null;
80 }
81
82 @Override
83 public Set<TopologyCluster> getClusters(Topology topology) {
84 checkNotNull(topology, TOPOLOGY_NULL);
85 return null;
86 }
87
88 @Override
89 public Graph<TopoVertex, TopoEdge> getGraph(Topology topology) {
90 checkNotNull(topology, TOPOLOGY_NULL);
91 return null;
92 }
93
94 @Override
95 public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst) {
96 checkNotNull(topology, TOPOLOGY_NULL);
97 checkNotNull(src, DEVICE_ID_NULL);
98 checkNotNull(dst, DEVICE_ID_NULL);
99 return null;
100 }
101
102 @Override
103 public Set<Path> getPaths(Topology topology, DeviceId src, DeviceId dst, LinkWeight weight) {
104 checkNotNull(topology, TOPOLOGY_NULL);
105 checkNotNull(src, DEVICE_ID_NULL);
106 checkNotNull(dst, DEVICE_ID_NULL);
107 checkNotNull(weight, "Link weight cannot be null");
108 return null;
109 }
110
111 @Override
112 public boolean isInfrastructure(Topology topology, ConnectPoint connectPoint) {
113 checkNotNull(topology, TOPOLOGY_NULL);
114 checkNotNull(connectPoint, CONNECTION_POINT_NULL);
115 return false;
116 }
117
118 @Override
119 public boolean isInBroadcastTree(Topology topology, ConnectPoint connectPoint) {
120 checkNotNull(topology, TOPOLOGY_NULL);
121 checkNotNull(connectPoint, CONNECTION_POINT_NULL);
122 return false;
123 }
124
125 @Override
126 public void addListener(TopologyListener listener) {
127 listenerRegistry.addListener(listener);
128 }
129
130 @Override
131 public void removeListener(TopologyListener listener) {
132 listenerRegistry.removeListener(listener);
133 }
134
135 // Personalized host provider service issued to the supplied provider.
136 private class InternalTopologyProviderService
137 extends AbstractProviderService<TopologyProvider>
138 implements TopologyProviderService {
139
140 InternalTopologyProviderService(TopologyProvider provider) {
141 super(provider);
142 }
143
144 @Override
145 public void topologyChanged(TopologyDescription topoDescription,
146 List<Event> reasons) {
147 checkNotNull(topoDescription, "Topology description cannot be null");
148 log.info("Topology changed due to: {}",
149 reasons == null ? "initial compute" : reasons);
150 }
151 }
152
153}