blob: 657682f598d5eff165edf1ef0e651b3ba3c871eb [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 Harte37e4e22014-05-13 19:12:02 -070017import net.onrc.onos.core.topology.web.TopologyWebRoutable;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080018
Jonathan Harte37e4e22014-05-13 19:12:02 -070019public class TopologyModule implements IFloodlightModule, ITopologyService {
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080020
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;
Ray Milkey269ffb92014-04-03 14:43:30 -070024 private IDatagridService datagridService;
25 private IControllerRegistryService registryService;
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080026
Jonathan Harte37e4e22014-05-13 19:12:02 -070027 private CopyOnWriteArrayList<ITopologyListener> topologyListeners;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080028
Ray Milkey269ffb92014-04-03 14:43:30 -070029 private IRestApiService restApi;
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080030
Ray Milkey269ffb92014-04-03 14:43:30 -070031 @Override
32 public Collection<Class<? extends IFloodlightService>> getModuleServices() {
33 List<Class<? extends IFloodlightService>> services =
34 new ArrayList<Class<? extends IFloodlightService>>();
Jonathan Harte37e4e22014-05-13 19:12:02 -070035 services.add(ITopologyService.class);
Ray Milkey269ffb92014-04-03 14:43:30 -070036 return services;
37 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080038
Ray Milkey269ffb92014-04-03 14:43:30 -070039 @Override
40 public Map<Class<? extends IFloodlightService>, IFloodlightService>
41 getServiceImpls() {
42 Map<Class<? extends IFloodlightService>, IFloodlightService> impls =
43 new HashMap<Class<? extends IFloodlightService>, IFloodlightService>();
Jonathan Harte37e4e22014-05-13 19:12:02 -070044 impls.put(ITopologyService.class, this);
Ray Milkey269ffb92014-04-03 14:43:30 -070045 return impls;
46 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080047
Ray Milkey269ffb92014-04-03 14:43:30 -070048 @Override
49 public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
50 List<Class<? extends IFloodlightService>> dependencies =
51 new ArrayList<Class<? extends IFloodlightService>>();
52 dependencies.add(IDatagridService.class);
53 dependencies.add(IRestApiService.class);
54 dependencies.add(IControllerRegistryService.class);
55 return dependencies;
56 }
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080057
Ray Milkey269ffb92014-04-03 14:43:30 -070058 @Override
59 public void init(FloodlightModuleContext context)
60 throws FloodlightModuleException {
61 restApi = context.getServiceImpl(IRestApiService.class);
62 datagridService = context.getServiceImpl(IDatagridService.class);
63 registryService = context.getServiceImpl(IControllerRegistryService.class);
Yuta HIGUCHI170229f2014-02-17 15:47:54 -080064
Jonathan Harte37e4e22014-05-13 19:12:02 -070065 topologyListeners = new CopyOnWriteArrayList<>();
66 topologyManager = new TopologyManager(registryService, topologyListeners);
Ray Milkey269ffb92014-04-03 14:43:30 -070067 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080068
Ray Milkey269ffb92014-04-03 14:43:30 -070069 @Override
70 public void startUp(FloodlightModuleContext context) {
Jonathan Harte37e4e22014-05-13 19:12:02 -070071 restApi.addRestletRoutable(new TopologyWebRoutable());
Ray Milkey269ffb92014-04-03 14:43:30 -070072 topologyManager.startup(datagridService);
73 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080074
Ray Milkey269ffb92014-04-03 14:43:30 -070075 @Override
Jonathan Harte37e4e22014-05-13 19:12:02 -070076 public Topology getTopology() {
77 return topologyManager.getTopology();
Ray Milkey269ffb92014-04-03 14:43:30 -070078 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080079
Ray Milkey269ffb92014-04-03 14:43:30 -070080 @Override
Jonathan Harte37e4e22014-05-13 19:12:02 -070081 public TopologyDiscoveryInterface getTopologyDiscoveryInterface() {
Ray Milkey269ffb92014-04-03 14:43:30 -070082 return topologyManager;
83 }
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080084
Ray Milkey269ffb92014-04-03 14:43:30 -070085 @Override
Jonathan Harte37e4e22014-05-13 19:12:02 -070086 public void registerTopologyListener(ITopologyListener listener) {
87 topologyListeners.addIfAbsent(listener);
Ray Milkey269ffb92014-04-03 14:43:30 -070088 }
Yuta HIGUCHIa536e762014-02-17 21:47:28 -080089
Ray Milkey269ffb92014-04-03 14:43:30 -070090 @Override
Jonathan Harte37e4e22014-05-13 19:12:02 -070091 public void deregisterTopologyListener(ITopologyListener listener) {
92 topologyListeners.remove(listener);
Ray Milkey269ffb92014-04-03 14:43:30 -070093 }
Yuta HIGUCHIa536e762014-02-17 21:47:28 -080094
Jonathan Hart4b5bbb52014-02-06 10:09:31 -080095}