blob: 77981d6d0ba61a5148b5407f751ebd832838be9e [file] [log] [blame]
Jonathan Hart472062d2014-04-03 10:56:48 -07001package net.onrc.onos.core.topology;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -08002
3import java.util.ArrayList;
4import java.util.Collection;
5import java.util.HashMap;
6import java.util.List;
7import java.util.Map;
Yuta HIGUCHIa536e762014-02-17 21:47:28 -08008import java.util.concurrent.CopyOnWriteArrayList;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -08009
10import net.floodlightcontroller.core.module.FloodlightModuleContext;
11import net.floodlightcontroller.core.module.FloodlightModuleException;
12import net.floodlightcontroller.core.module.IFloodlightModule;
13import net.floodlightcontroller.core.module.IFloodlightService;
Jonathan Hart47016712014-02-07 12:41:35 -080014import net.floodlightcontroller.restserver.IRestApiService;
Jonathan Hart6df90172014-04-03 10:13:11 -070015import net.onrc.onos.core.datagrid.IDatagridService;
Jonathan Hartdeda0ba2014-04-03 11:14:12 -070016import net.onrc.onos.core.registry.IControllerRegistryService;
Jonathan Hart472062d2014-04-03 10:56:48 -070017import net.onrc.onos.core.topology.web.NetworkGraphWebRoutable;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080018
19public class NetworkGraphModule implements IFloodlightModule, INetworkGraphService {
20
Ray Milkey269ffb92014-04-03 14:43:30 -070021 // This is initialized as a module for now
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080022
Ray Milkey269ffb92014-04-03 14:43:30 -070023 private TopologyManager topologyManager;
24 //private NetworkGraphDatastore southboundNetworkGraph;
25 private IDatagridService datagridService;
26 private IControllerRegistryService registryService;
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080027
Ray Milkey269ffb92014-04-03 14:43:30 -070028 private CopyOnWriteArrayList<INetworkGraphListener> networkGraphListeners;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080029
Ray Milkey269ffb92014-04-03 14:43:30 -070030 private IRestApiService restApi;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080031
Ray Milkey269ffb92014-04-03 14:43:30 -070032 @Override
33 public Collection<Class<? extends IFloodlightService>> getModuleServices() {
34 List<Class<? extends IFloodlightService>> services =
35 new ArrayList<Class<? extends IFloodlightService>>();
36 services.add(INetworkGraphService.class);
37 return services;
38 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080039
Ray Milkey269ffb92014-04-03 14:43:30 -070040 @Override
41 public Map<Class<? extends IFloodlightService>, IFloodlightService>
42 getServiceImpls() {
43 Map<Class<? extends IFloodlightService>, IFloodlightService> impls =
44 new HashMap<Class<? extends IFloodlightService>, IFloodlightService>();
45 impls.put(INetworkGraphService.class, this);
46 return impls;
47 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080048
Ray Milkey269ffb92014-04-03 14:43:30 -070049 @Override
50 public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
51 List<Class<? extends IFloodlightService>> dependencies =
52 new ArrayList<Class<? extends IFloodlightService>>();
53 dependencies.add(IDatagridService.class);
54 dependencies.add(IRestApiService.class);
55 dependencies.add(IControllerRegistryService.class);
56 return dependencies;
57 }
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080058
Ray Milkey269ffb92014-04-03 14:43:30 -070059 @Override
60 public void init(FloodlightModuleContext context)
61 throws FloodlightModuleException {
62 restApi = context.getServiceImpl(IRestApiService.class);
63 datagridService = context.getServiceImpl(IDatagridService.class);
64 registryService = context.getServiceImpl(IControllerRegistryService.class);
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080065
Ray Milkey269ffb92014-04-03 14:43:30 -070066 networkGraphListeners = new CopyOnWriteArrayList<>();
67 topologyManager = new TopologyManager(registryService, networkGraphListeners);
68 //southboundNetworkGraph = new NetworkGraphDatastore(networkGraph);
69 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080070
Ray Milkey269ffb92014-04-03 14:43:30 -070071 @Override
72 public void startUp(FloodlightModuleContext context) {
73 restApi.addRestletRoutable(new NetworkGraphWebRoutable());
74 topologyManager.startup(datagridService);
75 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080076
Ray Milkey269ffb92014-04-03 14:43:30 -070077 @Override
78 public NetworkGraph getNetworkGraph() {
79 return topologyManager.getNetworkGraph();
80 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080081
Ray Milkey269ffb92014-04-03 14:43:30 -070082 @Override
83 public NetworkGraphDiscoveryInterface getNetworkGraphDiscoveryInterface() {
84 return topologyManager;
85 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080086
Ray Milkey269ffb92014-04-03 14:43:30 -070087 @Override
88 public void registerNetworkGraphListener(INetworkGraphListener listener) {
89 networkGraphListeners.addIfAbsent(listener);
90 }
Yuta HIGUCHIa536e762014-02-17 21:47:28 -080091
Ray Milkey269ffb92014-04-03 14:43:30 -070092 @Override
93 public void deregisterNetworkGraphListener(INetworkGraphListener listener) {
94 networkGraphListeners.remove(listener);
95 }
Yuta HIGUCHIa536e762014-02-17 21:47:28 -080096
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080097}