blob: 885eed268420b8864b785b66ed3083dc7969d3c4 [file] [log] [blame]
Simon Hunted804d52016-03-30 09:51:40 -07001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Simon Hunted804d52016-03-30 09:51:40 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.ui.impl.topo.model;
18
Simon Huntcda9c032016-04-11 10:32:54 -070019import org.apache.felix.scr.annotations.Activate;
20import org.apache.felix.scr.annotations.Component;
21import org.apache.felix.scr.annotations.Deactivate;
22import org.apache.felix.scr.annotations.Reference;
23import org.apache.felix.scr.annotations.ReferenceCardinality;
24import org.apache.felix.scr.annotations.Service;
Simon Hunt7092cc42016-04-06 18:40:17 -070025import org.onosproject.cluster.ClusterEvent;
26import org.onosproject.cluster.ClusterEventListener;
27import org.onosproject.cluster.ClusterService;
Simon Huntcda9c032016-04-11 10:32:54 -070028import org.onosproject.event.AbstractListenerManager;
Simon Hunt7092cc42016-04-06 18:40:17 -070029import org.onosproject.incubator.net.PortStatisticsService;
30import org.onosproject.incubator.net.tunnel.TunnelService;
31import org.onosproject.mastership.MastershipEvent;
32import org.onosproject.mastership.MastershipListener;
33import org.onosproject.mastership.MastershipService;
Simon Huntcda9c032016-04-11 10:32:54 -070034import org.onosproject.net.Device;
Simon Hunt7092cc42016-04-06 18:40:17 -070035import org.onosproject.net.device.DeviceEvent;
36import org.onosproject.net.device.DeviceListener;
37import org.onosproject.net.device.DeviceService;
38import org.onosproject.net.flow.FlowRuleEvent;
39import org.onosproject.net.flow.FlowRuleListener;
40import org.onosproject.net.flow.FlowRuleService;
41import org.onosproject.net.host.HostEvent;
42import org.onosproject.net.host.HostListener;
43import org.onosproject.net.host.HostService;
44import org.onosproject.net.intent.IntentEvent;
45import org.onosproject.net.intent.IntentListener;
46import org.onosproject.net.intent.IntentService;
47import org.onosproject.net.link.LinkEvent;
48import org.onosproject.net.link.LinkListener;
49import org.onosproject.net.link.LinkService;
50import org.onosproject.net.region.RegionEvent;
51import org.onosproject.net.region.RegionListener;
52import org.onosproject.net.region.RegionService;
53import org.onosproject.net.statistic.StatisticService;
54import org.onosproject.net.topology.TopologyService;
Simon Huntf679c4e2016-04-01 17:02:24 -070055import org.onosproject.ui.impl.topo.UiTopoSession;
Simon Hunted804d52016-03-30 09:51:40 -070056import org.slf4j.Logger;
57import org.slf4j.LoggerFactory;
58
59/**
Simon Huntcda9c032016-04-11 10:32:54 -070060 * Service that creates and maintains the UI-model of the network topology.
Simon Hunted804d52016-03-30 09:51:40 -070061 */
Simon Huntcda9c032016-04-11 10:32:54 -070062@Component(immediate = true)
63@Service(value = UiSharedTopologyModel.class)
64public final class UiSharedTopologyModel
65 extends AbstractListenerManager<UiModelEvent, UiModelListener> {
Simon Hunted804d52016-03-30 09:51:40 -070066
67 private static final Logger log =
68 LoggerFactory.getLogger(UiSharedTopologyModel.class);
69
Simon Huntcda9c032016-04-11 10:32:54 -070070 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
71 private ClusterService clusterService;
72 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
73 private MastershipService mastershipService;
74 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
75 private RegionService regionService;
76 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
77 private DeviceService deviceService;
78 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
79 private LinkService linkService;
80 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
81 private HostService hostService;
82 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
83 private IntentService intentService;
84 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
85 private FlowRuleService flowService;
Simon Hunt7092cc42016-04-06 18:40:17 -070086
Simon Huntcda9c032016-04-11 10:32:54 -070087 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
88 private StatisticService flowStatsService;
89 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
90 private PortStatisticsService portStatsService;
91 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
92 private TopologyService topologyService;
93 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
94 private TunnelService tunnelService;
Simon Hunted804d52016-03-30 09:51:40 -070095
Simon Huntcda9c032016-04-11 10:32:54 -070096 private final ClusterEventListener clusterListener =
97 new InternalClusterListener();
98 private final MastershipListener mastershipListener =
99 new InternalMastershipListener();
100 private final RegionListener regionListener =
101 new InternalRegionListener();
102 private final DeviceListener deviceListener =
103 new InternalDeviceListener();
104 private final LinkListener linkListener =
105 new InternalLinkListener();
106 private final HostListener hostListener =
107 new InternalHostListener();
108 private final IntentListener intentListener =
109 new InternalIntentListener();
110 private final FlowRuleListener flowRuleListener =
111 new InternalFlowRuleListener();
Simon Hunt7092cc42016-04-06 18:40:17 -0700112
Simon Huntcda9c032016-04-11 10:32:54 -0700113
114 private ModelCache cache;
115
116
117 @Activate
118 protected void activate() {
119 cache = new ModelCache(eventDispatcher);
120
121 eventDispatcher.addSink(UiModelEvent.class, listenerRegistry);
122
123 clusterService.addListener(clusterListener);
124 mastershipService.addListener(mastershipListener);
125 regionService.addListener(regionListener);
126 deviceService.addListener(deviceListener);
127 linkService.addListener(linkListener);
128 hostService.addListener(hostListener);
129 intentService.addListener(intentListener);
130 flowService.addListener(flowRuleListener);
131
132 cache.load();
133
134 log.info("Started");
Simon Hunted804d52016-03-30 09:51:40 -0700135 }
136
Simon Huntcda9c032016-04-11 10:32:54 -0700137 @Deactivate
138 protected void deactivate() {
139 eventDispatcher.removeSink(UiModelEvent.class);
140
141 clusterService.removeListener(clusterListener);
142 mastershipService.removeListener(mastershipListener);
143 regionService.removeListener(regionListener);
144 deviceService.removeListener(deviceListener);
145 linkService.removeListener(linkListener);
146 hostService.removeListener(hostListener);
147 intentService.removeListener(intentListener);
148 flowService.removeListener(flowRuleListener);
149
150 cache.clear();
151 cache = null;
152
153 log.info("Stopped");
154 }
155
156
Simon Huntf679c4e2016-04-01 17:02:24 -0700157 /**
158 * Registers a UI topology session with the topology model.
159 *
160 * @param session the session to register
161 */
162 public void register(UiTopoSession session) {
163 log.info("Registering topology session {}", session);
Simon Huntcda9c032016-04-11 10:32:54 -0700164 addListener(session);
Simon Hunted804d52016-03-30 09:51:40 -0700165 }
166
Simon Huntf679c4e2016-04-01 17:02:24 -0700167 /**
168 * Unregisters a UI topology session from the topology model.
169 *
170 * @param session the session to unregister
171 */
172 public void unregister(UiTopoSession session) {
173 log.info("Unregistering topology session {}", session);
Simon Huntcda9c032016-04-11 10:32:54 -0700174 removeListener(session);
Simon Huntf679c4e2016-04-01 17:02:24 -0700175 }
176
Simon Hunt7092cc42016-04-06 18:40:17 -0700177
Simon Huntcda9c032016-04-11 10:32:54 -0700178 private class InternalClusterListener implements ClusterEventListener {
179 @Override
180 public void event(ClusterEvent event) {
181 // TODO: handle cluster event
Simon Hunt7092cc42016-04-06 18:40:17 -0700182 }
Simon Huntcda9c032016-04-11 10:32:54 -0700183 }
Simon Hunt7092cc42016-04-06 18:40:17 -0700184
Simon Huntcda9c032016-04-11 10:32:54 -0700185 private class InternalMastershipListener implements MastershipListener {
186 @Override
187 public void event(MastershipEvent event) {
188 // TODO: handle mastership event
Simon Hunt7092cc42016-04-06 18:40:17 -0700189 }
Simon Huntcda9c032016-04-11 10:32:54 -0700190 }
Simon Hunt7092cc42016-04-06 18:40:17 -0700191
Simon Huntcda9c032016-04-11 10:32:54 -0700192 private class InternalRegionListener implements RegionListener {
193 @Override
194 public void event(RegionEvent event) {
195 // TODO: handle region event
Simon Hunt7092cc42016-04-06 18:40:17 -0700196 }
Simon Huntcda9c032016-04-11 10:32:54 -0700197 }
Simon Hunt7092cc42016-04-06 18:40:17 -0700198
Simon Huntcda9c032016-04-11 10:32:54 -0700199 private class InternalDeviceListener implements DeviceListener {
200 @Override
201 public void event(DeviceEvent event) {
Simon Hunt7092cc42016-04-06 18:40:17 -0700202
Simon Huntcda9c032016-04-11 10:32:54 -0700203 Device device = event.subject();
Simon Hunt7092cc42016-04-06 18:40:17 -0700204
Simon Huntcda9c032016-04-11 10:32:54 -0700205 switch (event.type()) {
Simon Hunt7092cc42016-04-06 18:40:17 -0700206
Simon Huntcda9c032016-04-11 10:32:54 -0700207 case DEVICE_ADDED:
208 case DEVICE_UPDATED:
209 case DEVICE_AVAILABILITY_CHANGED:
210 case DEVICE_SUSPENDED:
211 cache.addOrUpdateDevice(device);
212 break;
Simon Hunt7092cc42016-04-06 18:40:17 -0700213
Simon Huntcda9c032016-04-11 10:32:54 -0700214 case DEVICE_REMOVED:
215 cache.removeDevice(device);
216 break;
Simon Hunt7092cc42016-04-06 18:40:17 -0700217
Simon Huntcda9c032016-04-11 10:32:54 -0700218 default:
219 break;
Simon Hunt7092cc42016-04-06 18:40:17 -0700220 }
221 }
222 }
223
Simon Huntcda9c032016-04-11 10:32:54 -0700224 private class InternalLinkListener implements LinkListener {
225 @Override
226 public void event(LinkEvent event) {
227 // TODO: handle link event
228 }
Simon Hunted804d52016-03-30 09:51:40 -0700229 }
230
Simon Huntcda9c032016-04-11 10:32:54 -0700231 private class InternalHostListener implements HostListener {
232 @Override
233 public void event(HostEvent event) {
234 // TODO: handle host event
235 }
Simon Hunted804d52016-03-30 09:51:40 -0700236 }
Simon Huntcda9c032016-04-11 10:32:54 -0700237
238 private class InternalIntentListener implements IntentListener {
239 @Override
240 public void event(IntentEvent event) {
241 // TODO: handle intent event
242 }
243 }
244
245 private class InternalFlowRuleListener implements FlowRuleListener {
246 @Override
247 public void event(FlowRuleEvent event) {
248 // TODO: handle flowrule event
249 }
250 }
251
Simon Hunted804d52016-03-30 09:51:40 -0700252}