Started fleshing out the UI topo model classes.
If reviewing this, please refer to http://tinyurl.com/onos-ui-topo-model Change-Id: I4738392bec1a89c37dff15eff6fe04d66fcabd95
Showing
10 changed files
with
289 additions
and
21 deletions
| ... | @@ -16,8 +16,20 @@ | ... | @@ -16,8 +16,20 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.ui.model.topo; | 17 | package org.onosproject.ui.model.topo; |
| 18 | 18 | ||
| 19 | +import java.util.ArrayList; | ||
| 20 | +import java.util.List; | ||
| 21 | + | ||
| 19 | /** | 22 | /** |
| 20 | * Encapsulates the notion of the ONOS cluster. | 23 | * Encapsulates the notion of the ONOS cluster. |
| 21 | */ | 24 | */ |
| 22 | -public class UiCluster extends UiElement { | 25 | +class UiCluster extends UiElement { |
| 26 | + | ||
| 27 | + private final List<UiClusterMember> members = new ArrayList<>(); | ||
| 28 | + | ||
| 29 | + /** | ||
| 30 | + * Removes all cluster members. | ||
| 31 | + */ | ||
| 32 | + void clear() { | ||
| 33 | + members.clear(); | ||
| 34 | + } | ||
| 23 | } | 35 | } | ... | ... |
| ... | @@ -16,8 +16,17 @@ | ... | @@ -16,8 +16,17 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.ui.model.topo; | 17 | package org.onosproject.ui.model.topo; |
| 18 | 18 | ||
| 19 | +import org.onosproject.net.Device; | ||
| 20 | + | ||
| 19 | /** | 21 | /** |
| 20 | * Represents a device. | 22 | * Represents a device. |
| 21 | */ | 23 | */ |
| 22 | public class UiDevice extends UiNode { | 24 | public class UiDevice extends UiNode { |
| 25 | + | ||
| 26 | + private Device device; | ||
| 27 | + | ||
| 28 | + @Override | ||
| 29 | + protected void destroy() { | ||
| 30 | + device = null; | ||
| 31 | + } | ||
| 23 | } | 32 | } | ... | ... |
| ... | @@ -20,4 +20,12 @@ package org.onosproject.ui.model.topo; | ... | @@ -20,4 +20,12 @@ package org.onosproject.ui.model.topo; |
| 20 | * Abstract base class of all elements in the UI topology model. | 20 | * Abstract base class of all elements in the UI topology model. |
| 21 | */ | 21 | */ |
| 22 | public class UiElement { | 22 | public class UiElement { |
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * Removes all external references, and prepares the instance for | ||
| 26 | + * garbage collection. This default implementation does nothing. | ||
| 27 | + */ | ||
| 28 | + protected void destroy() { | ||
| 29 | + // does nothing | ||
| 30 | + } | ||
| 23 | } | 31 | } | ... | ... |
| ... | @@ -16,8 +16,17 @@ | ... | @@ -16,8 +16,17 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.ui.model.topo; | 17 | package org.onosproject.ui.model.topo; |
| 18 | 18 | ||
| 19 | +import org.onosproject.net.Host; | ||
| 20 | + | ||
| 19 | /** | 21 | /** |
| 20 | * Represents an end-station host. | 22 | * Represents an end-station host. |
| 21 | */ | 23 | */ |
| 22 | public class UiHost extends UiNode { | 24 | public class UiHost extends UiNode { |
| 25 | + | ||
| 26 | + private Host host; | ||
| 27 | + | ||
| 28 | + @Override | ||
| 29 | + protected void destroy() { | ||
| 30 | + host = null; | ||
| 31 | + } | ||
| 23 | } | 32 | } | ... | ... |
| ... | @@ -16,8 +16,42 @@ | ... | @@ -16,8 +16,42 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.ui.model.topo; | 17 | package org.onosproject.ui.model.topo; |
| 18 | 18 | ||
| 19 | +import org.onosproject.net.Device; | ||
| 20 | +import org.onosproject.net.EdgeLink; | ||
| 21 | +import org.onosproject.net.Link; | ||
| 22 | + | ||
| 23 | +import java.util.Set; | ||
| 24 | + | ||
| 19 | /** | 25 | /** |
| 20 | * Represents a bi-directional link backed by two uni-directional links. | 26 | * Represents a bi-directional link backed by two uni-directional links. |
| 21 | */ | 27 | */ |
| 22 | public class UiLink extends UiElement { | 28 | public class UiLink extends UiElement { |
| 29 | + | ||
| 30 | + // devices at either end of this link | ||
| 31 | + private Device deviceA; | ||
| 32 | + private Device deviceB; | ||
| 33 | + | ||
| 34 | + // two unidirectional links underlying this link... | ||
| 35 | + private Link linkAtoB; | ||
| 36 | + private Link linkBtoA; | ||
| 37 | + | ||
| 38 | + // ==OR== : private (synthetic) host link | ||
| 39 | + private EdgeLink edgeLink; | ||
| 40 | + | ||
| 41 | + // ==OR== : set of underlying UI links that this link aggregates | ||
| 42 | + private Set<UiLink> children; | ||
| 43 | + | ||
| 44 | + | ||
| 45 | + @Override | ||
| 46 | + protected void destroy() { | ||
| 47 | + deviceA = null; | ||
| 48 | + deviceB = null; | ||
| 49 | + linkAtoB = null; | ||
| 50 | + linkBtoA = null; | ||
| 51 | + edgeLink = null; | ||
| 52 | + if (children != null) { | ||
| 53 | + children.clear(); | ||
| 54 | + children = null; | ||
| 55 | + } | ||
| 56 | + } | ||
| 23 | } | 57 | } | ... | ... |
| ... | @@ -19,5 +19,5 @@ package org.onosproject.ui.model.topo; | ... | @@ -19,5 +19,5 @@ package org.onosproject.ui.model.topo; |
| 19 | /** | 19 | /** |
| 20 | * Represents a node drawn on the topology view (region, device, host). | 20 | * Represents a node drawn on the topology view (region, device, host). |
| 21 | */ | 21 | */ |
| 22 | -public abstract class UiNode extends UiElement { | 22 | +abstract class UiNode extends UiElement { |
| 23 | } | 23 | } | ... | ... |
| ... | @@ -16,8 +16,34 @@ | ... | @@ -16,8 +16,34 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.ui.model.topo; | 17 | package org.onosproject.ui.model.topo; |
| 18 | 18 | ||
| 19 | +import org.onosproject.net.region.Region; | ||
| 20 | + | ||
| 21 | +import java.util.Set; | ||
| 22 | +import java.util.TreeSet; | ||
| 23 | + | ||
| 19 | /** | 24 | /** |
| 20 | * Represents a region. | 25 | * Represents a region. |
| 21 | */ | 26 | */ |
| 22 | public class UiRegion extends UiNode { | 27 | public class UiRegion extends UiNode { |
| 28 | + | ||
| 29 | + private final Set<UiDevice> uiDevices = new TreeSet<>(); | ||
| 30 | + private final Set<UiHost> uiHosts = new TreeSet<>(); | ||
| 31 | + private final Set<UiLink> uiLinks = new TreeSet<>(); | ||
| 32 | + | ||
| 33 | + private Region region; | ||
| 34 | + | ||
| 35 | + | ||
| 36 | + @Override | ||
| 37 | + protected void destroy() { | ||
| 38 | + uiDevices.forEach(UiDevice::destroy); | ||
| 39 | + uiHosts.forEach(UiHost::destroy); | ||
| 40 | + uiLinks.forEach(UiLink::destroy); | ||
| 41 | + | ||
| 42 | + uiDevices.clear(); | ||
| 43 | + uiHosts.clear(); | ||
| 44 | + uiLinks.clear(); | ||
| 45 | + | ||
| 46 | + region = null; | ||
| 47 | + } | ||
| 48 | + | ||
| 23 | } | 49 | } | ... | ... |
| ... | @@ -16,8 +16,29 @@ | ... | @@ -16,8 +16,29 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.ui.model.topo; | 17 | package org.onosproject.ui.model.topo; |
| 18 | 18 | ||
| 19 | +import org.slf4j.Logger; | ||
| 20 | +import org.slf4j.LoggerFactory; | ||
| 21 | + | ||
| 22 | +import java.util.Set; | ||
| 23 | +import java.util.TreeSet; | ||
| 24 | + | ||
| 19 | /** | 25 | /** |
| 20 | * Represents the overall network topology. | 26 | * Represents the overall network topology. |
| 21 | */ | 27 | */ |
| 22 | public class UiTopology extends UiElement { | 28 | public class UiTopology extends UiElement { |
| 29 | + | ||
| 30 | + private static final Logger log = LoggerFactory.getLogger(UiTopology.class); | ||
| 31 | + | ||
| 32 | + private final UiCluster uiCluster = new UiCluster(); | ||
| 33 | + private final Set<UiRegion> uiRegions = new TreeSet<>(); | ||
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * Clears the topology state; that is, drops all regions, devices, hosts, | ||
| 37 | + * links, and cluster members. | ||
| 38 | + */ | ||
| 39 | + public void clear() { | ||
| 40 | + log.debug("clearing topology model"); | ||
| 41 | + uiRegions.clear(); | ||
| 42 | + uiCluster.clear(); | ||
| 43 | + } | ||
| 23 | } | 44 | } | ... | ... |
| ... | @@ -16,9 +16,19 @@ | ... | @@ -16,9 +16,19 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.ui.impl.topo.model; | 17 | package org.onosproject.ui.impl.topo.model; |
| 18 | 18 | ||
| 19 | +import org.onosproject.cluster.ControllerNode; | ||
| 20 | +import org.onosproject.cluster.RoleInfo; | ||
| 19 | import org.onosproject.event.EventDispatcher; | 21 | import org.onosproject.event.EventDispatcher; |
| 20 | import org.onosproject.net.Device; | 22 | import org.onosproject.net.Device; |
| 23 | +import org.onosproject.net.DeviceId; | ||
| 24 | +import org.onosproject.net.Host; | ||
| 25 | +import org.onosproject.net.Link; | ||
| 26 | +import org.onosproject.net.region.Region; | ||
| 21 | import org.onosproject.ui.model.topo.UiDevice; | 27 | import org.onosproject.ui.model.topo.UiDevice; |
| 28 | +import org.onosproject.ui.model.topo.UiTopology; | ||
| 29 | + | ||
| 30 | +import static org.onosproject.ui.impl.topo.model.UiModelEvent.Type.DEVICE_ADDED; | ||
| 31 | +import static org.onosproject.ui.impl.topo.model.UiModelEvent.Type.DEVICE_REMOVED; | ||
| 22 | 32 | ||
| 23 | /** | 33 | /** |
| 24 | * UI Topology Model cache. | 34 | * UI Topology Model cache. |
| ... | @@ -26,6 +36,7 @@ import org.onosproject.ui.model.topo.UiDevice; | ... | @@ -26,6 +36,7 @@ import org.onosproject.ui.model.topo.UiDevice; |
| 26 | class ModelCache { | 36 | class ModelCache { |
| 27 | 37 | ||
| 28 | private final EventDispatcher dispatcher; | 38 | private final EventDispatcher dispatcher; |
| 39 | + private final UiTopology uiTopology = new UiTopology(); | ||
| 29 | 40 | ||
| 30 | ModelCache(EventDispatcher eventDispatcher) { | 41 | ModelCache(EventDispatcher eventDispatcher) { |
| 31 | this.dispatcher = eventDispatcher; | 42 | this.dispatcher = eventDispatcher; |
| ... | @@ -35,7 +46,7 @@ class ModelCache { | ... | @@ -35,7 +46,7 @@ class ModelCache { |
| 35 | * Clear our model. | 46 | * Clear our model. |
| 36 | */ | 47 | */ |
| 37 | void clear() { | 48 | void clear() { |
| 38 | - // TODO: clear our internal state | 49 | + uiTopology.clear(); |
| 39 | } | 50 | } |
| 40 | 51 | ||
| 41 | /** | 52 | /** |
| ... | @@ -50,26 +61,72 @@ class ModelCache { | ... | @@ -50,26 +61,72 @@ class ModelCache { |
| 50 | } | 61 | } |
| 51 | 62 | ||
| 52 | 63 | ||
| 53 | - // add or update device | ||
| 54 | void addOrUpdateDevice(Device device) { | 64 | void addOrUpdateDevice(Device device) { |
| 55 | - // fetch UiDevice | 65 | + // TODO: find or create device assoc. with parameter |
| 66 | + // FIXME | ||
| 56 | UiDevice uiDevice = new UiDevice(); | 67 | UiDevice uiDevice = new UiDevice(); |
| 57 | 68 | ||
| 58 | - dispatcher.post( | 69 | + // TODO: post the (correct) event |
| 59 | - new UiModelEvent(UiModelEvent.Type.DEVICE_ADDED, uiDevice) | 70 | + dispatcher.post(new UiModelEvent(DEVICE_ADDED, uiDevice)); |
| 60 | - ); | ||
| 61 | - | ||
| 62 | } | 71 | } |
| 63 | 72 | ||
| 64 | void removeDevice(Device device) { | 73 | void removeDevice(Device device) { |
| 74 | + // TODO: get UiDevice associated with the given parameter; remove from model | ||
| 75 | + // FIXME | ||
| 65 | UiDevice uiDevice = new UiDevice(); | 76 | UiDevice uiDevice = new UiDevice(); |
| 66 | 77 | ||
| 67 | - dispatcher.post( | 78 | + // TODO: post the (correct) event |
| 68 | - new UiModelEvent(UiModelEvent.Type.DEVICE_REMOVED, uiDevice) | 79 | + dispatcher.post(new UiModelEvent(DEVICE_REMOVED, uiDevice)); |
| 69 | - ); | 80 | + |
| 81 | + } | ||
| 82 | + | ||
| 83 | + void addOrUpdateClusterMember(ControllerNode cnode) { | ||
| 84 | + // TODO: find or create cluster member assoc. with parameter | ||
| 85 | + // TODO: post event | ||
| 86 | + } | ||
| 70 | 87 | ||
| 88 | + void removeClusterMember(ControllerNode cnode) { | ||
| 89 | + // TODO: find cluster member assoc. with parameter; remove from model | ||
| 90 | + // TODO: post event | ||
| 71 | } | 91 | } |
| 72 | 92 | ||
| 73 | - // TODO remaining model objects | ||
| 74 | 93 | ||
| 94 | + void updateMasterships(DeviceId deviceId, RoleInfo roleInfo) { | ||
| 95 | + // TODO: store the updated mastership information | ||
| 96 | + // TODO: post event | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + void addOrUpdateRegion(Region region) { | ||
| 100 | + // TODO: find or create region assoc. with parameter | ||
| 101 | + // TODO: post event | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + void removeRegion(Region region) { | ||
| 105 | + // TODO: find region assoc. with parameter; remove from model | ||
| 106 | + // TODO: post event | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + void addOrUpdateLink(Link link) { | ||
| 110 | + // TODO: find ui-link assoc. with parameter; create or update. | ||
| 111 | + // TODO: post event | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + void removeLink(Link link) { | ||
| 115 | + // TODO: find ui-link assoc. with parameter; update or remove. | ||
| 116 | + // TODO: post event | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + void addOrUpdateHost(Host host) { | ||
| 120 | + // TODO: find or create host assoc. with parameter | ||
| 121 | + // TODO: post event | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + void moveHost(Host host, Host prevHost) { | ||
| 125 | + // TODO: process host-move | ||
| 126 | + // TODO: post event | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + void removeHost(Host host) { | ||
| 130 | + // TODO: find host assoc. with parameter; remove from model | ||
| 131 | + } | ||
| 75 | } | 132 | } | ... | ... |
| ... | @@ -25,6 +25,8 @@ import org.apache.felix.scr.annotations.Service; | ... | @@ -25,6 +25,8 @@ import org.apache.felix.scr.annotations.Service; |
| 25 | import org.onosproject.cluster.ClusterEvent; | 25 | import org.onosproject.cluster.ClusterEvent; |
| 26 | import org.onosproject.cluster.ClusterEventListener; | 26 | import org.onosproject.cluster.ClusterEventListener; |
| 27 | import org.onosproject.cluster.ClusterService; | 27 | import org.onosproject.cluster.ClusterService; |
| 28 | +import org.onosproject.cluster.ControllerNode; | ||
| 29 | +import org.onosproject.cluster.RoleInfo; | ||
| 28 | import org.onosproject.event.AbstractListenerManager; | 30 | import org.onosproject.event.AbstractListenerManager; |
| 29 | import org.onosproject.incubator.net.PortStatisticsService; | 31 | import org.onosproject.incubator.net.PortStatisticsService; |
| 30 | import org.onosproject.incubator.net.tunnel.TunnelService; | 32 | import org.onosproject.incubator.net.tunnel.TunnelService; |
| ... | @@ -32,6 +34,9 @@ import org.onosproject.mastership.MastershipEvent; | ... | @@ -32,6 +34,9 @@ import org.onosproject.mastership.MastershipEvent; |
| 32 | import org.onosproject.mastership.MastershipListener; | 34 | import org.onosproject.mastership.MastershipListener; |
| 33 | import org.onosproject.mastership.MastershipService; | 35 | import org.onosproject.mastership.MastershipService; |
| 34 | import org.onosproject.net.Device; | 36 | import org.onosproject.net.Device; |
| 37 | +import org.onosproject.net.DeviceId; | ||
| 38 | +import org.onosproject.net.Host; | ||
| 39 | +import org.onosproject.net.Link; | ||
| 35 | import org.onosproject.net.device.DeviceEvent; | 40 | import org.onosproject.net.device.DeviceEvent; |
| 36 | import org.onosproject.net.device.DeviceListener; | 41 | import org.onosproject.net.device.DeviceListener; |
| 37 | import org.onosproject.net.device.DeviceService; | 42 | import org.onosproject.net.device.DeviceService; |
| ... | @@ -47,6 +52,7 @@ import org.onosproject.net.intent.IntentService; | ... | @@ -47,6 +52,7 @@ import org.onosproject.net.intent.IntentService; |
| 47 | import org.onosproject.net.link.LinkEvent; | 52 | import org.onosproject.net.link.LinkEvent; |
| 48 | import org.onosproject.net.link.LinkListener; | 53 | import org.onosproject.net.link.LinkListener; |
| 49 | import org.onosproject.net.link.LinkService; | 54 | import org.onosproject.net.link.LinkService; |
| 55 | +import org.onosproject.net.region.Region; | ||
| 50 | import org.onosproject.net.region.RegionEvent; | 56 | import org.onosproject.net.region.RegionEvent; |
| 51 | import org.onosproject.net.region.RegionListener; | 57 | import org.onosproject.net.region.RegionListener; |
| 52 | import org.onosproject.net.region.RegionService; | 58 | import org.onosproject.net.region.RegionService; |
| ... | @@ -178,28 +184,71 @@ public final class UiSharedTopologyModel | ... | @@ -178,28 +184,71 @@ public final class UiSharedTopologyModel |
| 178 | private class InternalClusterListener implements ClusterEventListener { | 184 | private class InternalClusterListener implements ClusterEventListener { |
| 179 | @Override | 185 | @Override |
| 180 | public void event(ClusterEvent event) { | 186 | public void event(ClusterEvent event) { |
| 181 | - // TODO: handle cluster event | 187 | + ControllerNode cnode = event.subject(); |
| 188 | + | ||
| 189 | + switch (event.type()) { | ||
| 190 | + | ||
| 191 | + case INSTANCE_ADDED: | ||
| 192 | + case INSTANCE_ACTIVATED: | ||
| 193 | + case INSTANCE_READY: | ||
| 194 | + case INSTANCE_DEACTIVATED: | ||
| 195 | + cache.addOrUpdateClusterMember(cnode); | ||
| 196 | + break; | ||
| 197 | + | ||
| 198 | + case INSTANCE_REMOVED: | ||
| 199 | + cache.removeClusterMember(cnode); | ||
| 200 | + break; | ||
| 201 | + | ||
| 202 | + default: | ||
| 203 | + break; | ||
| 204 | + } | ||
| 182 | } | 205 | } |
| 183 | } | 206 | } |
| 184 | 207 | ||
| 185 | private class InternalMastershipListener implements MastershipListener { | 208 | private class InternalMastershipListener implements MastershipListener { |
| 186 | @Override | 209 | @Override |
| 187 | public void event(MastershipEvent event) { | 210 | public void event(MastershipEvent event) { |
| 188 | - // TODO: handle mastership event | 211 | + DeviceId deviceId = event.subject(); |
| 212 | + RoleInfo roleInfo = event.roleInfo(); | ||
| 213 | + | ||
| 214 | + switch (event.type()) { | ||
| 215 | + case MASTER_CHANGED: | ||
| 216 | + case BACKUPS_CHANGED: | ||
| 217 | + cache.updateMasterships(deviceId, roleInfo); | ||
| 218 | + break; | ||
| 219 | + | ||
| 220 | + default: | ||
| 221 | + break; | ||
| 222 | + } | ||
| 189 | } | 223 | } |
| 190 | } | 224 | } |
| 191 | 225 | ||
| 192 | private class InternalRegionListener implements RegionListener { | 226 | private class InternalRegionListener implements RegionListener { |
| 193 | @Override | 227 | @Override |
| 194 | public void event(RegionEvent event) { | 228 | public void event(RegionEvent event) { |
| 195 | - // TODO: handle region event | 229 | + Region region = event.subject(); |
| 230 | + | ||
| 231 | + switch (event.type()) { | ||
| 232 | + | ||
| 233 | + case REGION_ADDED: | ||
| 234 | + case REGION_UPDATED: | ||
| 235 | + case REGION_MEMBERSHIP_CHANGED: | ||
| 236 | + cache.addOrUpdateRegion(region); | ||
| 237 | + break; | ||
| 238 | + | ||
| 239 | + case REGION_REMOVED: | ||
| 240 | + cache.removeRegion(region); | ||
| 241 | + break; | ||
| 242 | + | ||
| 243 | + default: | ||
| 244 | + break; | ||
| 245 | + } | ||
| 196 | } | 246 | } |
| 197 | } | 247 | } |
| 198 | 248 | ||
| 199 | private class InternalDeviceListener implements DeviceListener { | 249 | private class InternalDeviceListener implements DeviceListener { |
| 200 | @Override | 250 | @Override |
| 201 | public void event(DeviceEvent event) { | 251 | public void event(DeviceEvent event) { |
| 202 | - | ||
| 203 | Device device = event.subject(); | 252 | Device device = event.subject(); |
| 204 | 253 | ||
| 205 | switch (event.type()) { | 254 | switch (event.type()) { |
| ... | @@ -224,28 +273,71 @@ public final class UiSharedTopologyModel | ... | @@ -224,28 +273,71 @@ public final class UiSharedTopologyModel |
| 224 | private class InternalLinkListener implements LinkListener { | 273 | private class InternalLinkListener implements LinkListener { |
| 225 | @Override | 274 | @Override |
| 226 | public void event(LinkEvent event) { | 275 | public void event(LinkEvent event) { |
| 227 | - // TODO: handle link event | 276 | + Link link = event.subject(); |
| 277 | + | ||
| 278 | + switch (event.type()) { | ||
| 279 | + | ||
| 280 | + case LINK_ADDED: | ||
| 281 | + case LINK_UPDATED: | ||
| 282 | + cache.addOrUpdateLink(link); | ||
| 283 | + break; | ||
| 284 | + | ||
| 285 | + case LINK_REMOVED: | ||
| 286 | + cache.removeLink(link); | ||
| 287 | + break; | ||
| 288 | + | ||
| 289 | + default: | ||
| 290 | + break; | ||
| 291 | + } | ||
| 228 | } | 292 | } |
| 229 | } | 293 | } |
| 230 | 294 | ||
| 231 | private class InternalHostListener implements HostListener { | 295 | private class InternalHostListener implements HostListener { |
| 232 | @Override | 296 | @Override |
| 233 | public void event(HostEvent event) { | 297 | public void event(HostEvent event) { |
| 234 | - // TODO: handle host event | 298 | + Host host = event.subject(); |
| 299 | + Host prevHost = event.prevSubject(); | ||
| 300 | + | ||
| 301 | + switch (event.type()) { | ||
| 302 | + | ||
| 303 | + case HOST_ADDED: | ||
| 304 | + case HOST_UPDATED: | ||
| 305 | + cache.addOrUpdateHost(host); | ||
| 306 | + break; | ||
| 307 | + | ||
| 308 | + case HOST_MOVED: | ||
| 309 | + cache.moveHost(host, prevHost); | ||
| 310 | + break; | ||
| 311 | + | ||
| 312 | + case HOST_REMOVED: | ||
| 313 | + cache.removeHost(host); | ||
| 314 | + break; | ||
| 315 | + | ||
| 316 | + default: | ||
| 317 | + break; | ||
| 318 | + } | ||
| 235 | } | 319 | } |
| 236 | } | 320 | } |
| 237 | 321 | ||
| 322 | + // ======================================================================= | ||
| 323 | + // NOTE: Neither intents nor flows are modeled by the UiTopology. | ||
| 324 | + // Rather, they are serviced directly from this class. | ||
| 325 | + // Additionally, since we are only retrieving counts (in the current | ||
| 326 | + // implementation), we'll fetch them on demand from the service. | ||
| 327 | + // Thus, the following internal listeners are stubs only (for now). | ||
| 328 | + // ======================================================================= | ||
| 329 | + | ||
| 238 | private class InternalIntentListener implements IntentListener { | 330 | private class InternalIntentListener implements IntentListener { |
| 239 | @Override | 331 | @Override |
| 240 | public void event(IntentEvent event) { | 332 | public void event(IntentEvent event) { |
| 241 | - // TODO: handle intent event | 333 | + // do nothing (for now) |
| 242 | } | 334 | } |
| 243 | } | 335 | } |
| 244 | 336 | ||
| 245 | private class InternalFlowRuleListener implements FlowRuleListener { | 337 | private class InternalFlowRuleListener implements FlowRuleListener { |
| 246 | @Override | 338 | @Override |
| 247 | public void event(FlowRuleEvent event) { | 339 | public void event(FlowRuleEvent event) { |
| 248 | - // TODO: handle flowrule event | 340 | + // do nothing (for now) |
| 249 | } | 341 | } |
| 250 | } | 342 | } |
| 251 | 343 | ... | ... |
-
Please register or login to post a comment