blob: 7a6ef26d2fe18e5f91d451ac5bfd6d1b488bef16 [file] [log] [blame]
Jonathan Hart4b5bbb52014-02-06 10:09:31 -08001package net.onrc.onos.ofcontroller.networkgraph;
2
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;
Pavlin Radoslavov721a2e02014-02-14 23:40:14 -080015import net.onrc.onos.datagrid.IDatagridService;
Jonathan Hart47016712014-02-07 12:41:35 -080016import net.onrc.onos.ofcontroller.networkgraph.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
22 // private RCNetworkGraphPublisher eventListener;
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080023
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080024 private TopologyManager topologyManager;
Jonathan Hart22eb9882014-02-11 15:52:59 -080025 //private NetworkGraphDatastore southboundNetworkGraph;
Pavlin Radoslavov721a2e02014-02-14 23:40:14 -080026 private IDatagridService datagridService;
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080027 private IControllerRegistryService registryService;
28
Yuta HIGUCHIa536e762014-02-17 21:47:28 -080029 private CopyOnWriteArrayList<INetworkGraphListener> networkGraphListeners;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080030
Jonathan Hart47016712014-02-07 12:41:35 -080031 private IRestApiService restApi;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080032
33 @Override
34 public Collection<Class<? extends IFloodlightService>> getModuleServices() {
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080035 List<Class<? extends IFloodlightService>> services =
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080036 new ArrayList<Class<? extends IFloodlightService>>();
37 services.add(INetworkGraphService.class);
38 return services;
39 }
40
41 @Override
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080042 public Map<Class<? extends IFloodlightService>, IFloodlightService>
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080043 getServiceImpls() {
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080044 Map<Class<? extends IFloodlightService>, IFloodlightService> impls =
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080045 new HashMap<Class<? extends IFloodlightService>, IFloodlightService>();
46 impls.put(INetworkGraphService.class, this);
47 return impls;
48 }
49
50 @Override
51 public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080052 List<Class<? extends IFloodlightService>> dependencies =
Jonathan Hart47016712014-02-07 12:41:35 -080053 new ArrayList<Class<? extends IFloodlightService>>();
Pavlin Radoslavov721a2e02014-02-14 23:40:14 -080054 dependencies.add(IDatagridService.class);
Jonathan Hart47016712014-02-07 12:41:35 -080055 dependencies.add(IRestApiService.class);
Yuta HIGUCHIbc0ab3b2014-02-18 21:24:05 -080056 dependencies.add(IControllerRegistryService.class);
Jonathan Hart47016712014-02-07 12:41:35 -080057 return dependencies;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080058 }
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080059
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080060 @Override
61 public void init(FloodlightModuleContext context)
62 throws FloodlightModuleException {
Jonathan Hart47016712014-02-07 12:41:35 -080063 restApi = context.getServiceImpl(IRestApiService.class);
Pavlin Radoslavov721a2e02014-02-14 23:40:14 -080064 datagridService = context.getServiceImpl(IDatagridService.class);
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080065 registryService = context.getServiceImpl(IControllerRegistryService.class);
66
Yuta HIGUCHIa536e762014-02-17 21:47:28 -080067 networkGraphListeners = new CopyOnWriteArrayList<>();
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080068 topologyManager = new TopologyManager(registryService, networkGraphListeners);
Jonathan Hart22eb9882014-02-11 15:52:59 -080069 //southboundNetworkGraph = new NetworkGraphDatastore(networkGraph);
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080070 }
71
72 @Override
73 public void startUp(FloodlightModuleContext context) {
Jonathan Hart47016712014-02-07 12:41:35 -080074 restApi.addRestletRoutable(new NetworkGraphWebRoutable());
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080075 topologyManager.startup(datagridService);
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080076 }
77
78 @Override
79 public NetworkGraph getNetworkGraph() {
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080080 return topologyManager.getNetworkGraph();
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080081 }
82
83 @Override
Jonathan Hart22eb9882014-02-11 15:52:59 -080084 public NetworkGraphDiscoveryInterface getNetworkGraphDiscoveryInterface() {
Pavlin Radoslavov6d224ee2014-02-18 16:43:15 -080085 return topologyManager;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080086 }
87
Yuta HIGUCHIa536e762014-02-17 21:47:28 -080088 @Override
89 public void registerNetworkGraphListener(INetworkGraphListener listener) {
90 networkGraphListeners.addIfAbsent(listener);
91 }
92
93 @Override
94 public void deregisterNetworkGraphListener(INetworkGraphListener listener) {
95 networkGraphListeners.remove(listener);
96 }
97
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080098}