blob: 8fa6408e87fcb916f1489d46b9c39ae0a96daea2 [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 Hart472062d2014-04-03 10:56:48 -070016import net.onrc.onos.core.topology.web.NetworkGraphWebRoutable;
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080017import net.onrc.onos.registry.controller.IControllerRegistryService;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080018
19public class NetworkGraphModule implements IFloodlightModule, INetworkGraphService {
20
21 // This is initialized as a module for now
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080022
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080023 private TopologyManager topologyManager;
Jonathan Hart22eb9882014-02-11 15:52:59 -080024 //private NetworkGraphDatastore southboundNetworkGraph;
Pavlin Radoslavov721a2e02014-02-14 23:40:14 -080025 private IDatagridService datagridService;
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080026 private IControllerRegistryService registryService;
27
Yuta HIGUCHIa536e762014-02-17 21:47:28 -080028 private CopyOnWriteArrayList<INetworkGraphListener> networkGraphListeners;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080029
Jonathan Hart47016712014-02-07 12:41:35 -080030 private IRestApiService restApi;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080031
32 @Override
33 public Collection<Class<? extends IFloodlightService>> getModuleServices() {
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080034 List<Class<? extends IFloodlightService>> services =
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080035 new ArrayList<Class<? extends IFloodlightService>>();
36 services.add(INetworkGraphService.class);
37 return services;
38 }
39
40 @Override
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080041 public Map<Class<? extends IFloodlightService>, IFloodlightService>
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080042 getServiceImpls() {
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080043 Map<Class<? extends IFloodlightService>, IFloodlightService> impls =
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080044 new HashMap<Class<? extends IFloodlightService>, IFloodlightService>();
45 impls.put(INetworkGraphService.class, this);
46 return impls;
47 }
48
49 @Override
50 public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080051 List<Class<? extends IFloodlightService>> dependencies =
Jonathan Hart47016712014-02-07 12:41:35 -080052 new ArrayList<Class<? extends IFloodlightService>>();
Pavlin Radoslavov721a2e02014-02-14 23:40:14 -080053 dependencies.add(IDatagridService.class);
Jonathan Hart47016712014-02-07 12:41:35 -080054 dependencies.add(IRestApiService.class);
Yuta HIGUCHIbc0ab3b2014-02-18 21:24:05 -080055 dependencies.add(IControllerRegistryService.class);
Jonathan Hart47016712014-02-07 12:41:35 -080056 return dependencies;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080057 }
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080058
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080059 @Override
60 public void init(FloodlightModuleContext context)
61 throws FloodlightModuleException {
Jonathan Hart47016712014-02-07 12:41:35 -080062 restApi = context.getServiceImpl(IRestApiService.class);
Pavlin Radoslavov721a2e02014-02-14 23:40:14 -080063 datagridService = context.getServiceImpl(IDatagridService.class);
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080064 registryService = context.getServiceImpl(IControllerRegistryService.class);
65
Yuta HIGUCHIa536e762014-02-17 21:47:28 -080066 networkGraphListeners = new CopyOnWriteArrayList<>();
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080067 topologyManager = new TopologyManager(registryService, networkGraphListeners);
Jonathan Hart22eb9882014-02-11 15:52:59 -080068 //southboundNetworkGraph = new NetworkGraphDatastore(networkGraph);
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080069 }
70
71 @Override
72 public void startUp(FloodlightModuleContext context) {
Jonathan Hart47016712014-02-07 12:41:35 -080073 restApi.addRestletRoutable(new NetworkGraphWebRoutable());
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080074 topologyManager.startup(datagridService);
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080075 }
76
77 @Override
78 public NetworkGraph getNetworkGraph() {
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080079 return topologyManager.getNetworkGraph();
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080080 }
81
82 @Override
Jonathan Hart22eb9882014-02-11 15:52:59 -080083 public NetworkGraphDiscoveryInterface getNetworkGraphDiscoveryInterface() {
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080084 return topologyManager;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080085 }
86
Yuta HIGUCHIa536e762014-02-17 21:47:28 -080087 @Override
88 public void registerNetworkGraphListener(INetworkGraphListener listener) {
89 networkGraphListeners.addIfAbsent(listener);
90 }
91
92 @Override
93 public void deregisterNetworkGraphListener(INetworkGraphListener listener) {
94 networkGraphListeners.remove(listener);
95 }
96
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080097}