blob: 80f0d0ba69e02dd0f21e64e1adf141bfd4769735 [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
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080024 private NetworkGraphImpl networkGraph;
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);
56 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<>();
67 networkGraph = new NetworkGraphImpl(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 Radoslavov721a2e02014-02-14 23:40:14 -080074 networkGraph.startup(datagridService);
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080075 }
76
77 @Override
78 public NetworkGraph getNetworkGraph() {
79 return networkGraph;
80 }
81
82 @Override
Jonathan Hart22eb9882014-02-11 15:52:59 -080083 public NetworkGraphDiscoveryInterface getNetworkGraphDiscoveryInterface() {
84 return networkGraph;
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}