Committed by
Gerrit Code Review
ONOS-3539 Insert optional delay for showing highlights
Change-Id: I289d54fc2b401da397fa97e912e98177d108df23
Showing
3 changed files
with
51 additions
and
5 deletions
| ... | @@ -16,6 +16,8 @@ | ... | @@ -16,6 +16,8 @@ |
| 16 | 16 | ||
| 17 | package org.onosproject.ui.topo; | 17 | package org.onosproject.ui.topo; |
| 18 | 18 | ||
| 19 | +import com.google.common.base.Preconditions; | ||
| 20 | + | ||
| 19 | import java.util.Collection; | 21 | import java.util.Collection; |
| 20 | import java.util.Collections; | 22 | import java.util.Collections; |
| 21 | import java.util.HashMap; | 23 | import java.util.HashMap; |
| ... | @@ -34,6 +36,7 @@ public class Highlights { | ... | @@ -34,6 +36,7 @@ public class Highlights { |
| 34 | private static final String MIN = "min"; | 36 | private static final String MIN = "min"; |
| 35 | private static final String MAX = "max"; | 37 | private static final String MAX = "max"; |
| 36 | 38 | ||
| 39 | + | ||
| 37 | /** | 40 | /** |
| 38 | * A notion of amount. | 41 | * A notion of amount. |
| 39 | */ | 42 | */ |
| ... | @@ -43,6 +46,7 @@ public class Highlights { | ... | @@ -43,6 +46,7 @@ public class Highlights { |
| 43 | MAXIMALLY(MAX); | 46 | MAXIMALLY(MAX); |
| 44 | 47 | ||
| 45 | private final String s; | 48 | private final String s; |
| 49 | + | ||
| 46 | Amount(String str) { | 50 | Amount(String str) { |
| 47 | s = str; | 51 | s = str; |
| 48 | } | 52 | } |
| ... | @@ -58,7 +62,30 @@ public class Highlights { | ... | @@ -58,7 +62,30 @@ public class Highlights { |
| 58 | private final Map<String, LinkHighlight> links = new HashMap<>(); | 62 | private final Map<String, LinkHighlight> links = new HashMap<>(); |
| 59 | 63 | ||
| 60 | private Amount subdueLevel = Amount.ZERO; | 64 | private Amount subdueLevel = Amount.ZERO; |
| 65 | + private int delayMs = 0; | ||
| 61 | 66 | ||
| 67 | + //TODO: Think of a better solution for topology events race conditions | ||
| 68 | + /** | ||
| 69 | + * Sets the number of milliseconds to delay processing of highlights | ||
| 70 | + * events on the client side. | ||
| 71 | + * | ||
| 72 | + * @param ms milliseconds to delay | ||
| 73 | + * @return self, for chaining | ||
| 74 | + */ | ||
| 75 | + public Highlights delay(int ms) { | ||
| 76 | + Preconditions.checkArgument(ms >= 0, "Delay cannot be lower than 0"); | ||
| 77 | + delayMs = ms; | ||
| 78 | + return this; | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + /** | ||
| 82 | + * Return the delay for the highlight event. | ||
| 83 | + * | ||
| 84 | + * @return delay in milliseconds | ||
| 85 | + */ | ||
| 86 | + public int delayMs() { | ||
| 87 | + return delayMs; | ||
| 88 | + } | ||
| 62 | 89 | ||
| 63 | /** | 90 | /** |
| 64 | * Adds highlighting information for a device. | 91 | * Adds highlighting information for a device. |
| ... | @@ -186,4 +213,5 @@ public class Highlights { | ... | @@ -186,4 +213,5 @@ public class Highlights { |
| 186 | public LinkHighlight getLink(String id) { | 213 | public LinkHighlight getLink(String id) { |
| 187 | return links.get(id); | 214 | return links.get(id); |
| 188 | } | 215 | } |
| 216 | + | ||
| 189 | } | 217 | } | ... | ... |
| ... | @@ -33,6 +33,7 @@ public final class TopoJson { | ... | @@ -33,6 +33,7 @@ public final class TopoJson { |
| 33 | static final String HOSTS = "hosts"; | 33 | static final String HOSTS = "hosts"; |
| 34 | static final String LINKS = "links"; | 34 | static final String LINKS = "links"; |
| 35 | static final String SUBDUE = "subdue"; | 35 | static final String SUBDUE = "subdue"; |
| 36 | + static final String DELAY = "delay"; | ||
| 36 | 37 | ||
| 37 | static final String ID = "id"; | 38 | static final String ID = "id"; |
| 38 | static final String LABEL = "label"; | 39 | static final String LABEL = "label"; |
| ... | @@ -99,6 +100,10 @@ public final class TopoJson { | ... | @@ -99,6 +100,10 @@ public final class TopoJson { |
| 99 | if (!toSubdue.equals(Highlights.Amount.ZERO)) { | 100 | if (!toSubdue.equals(Highlights.Amount.ZERO)) { |
| 100 | payload.put(SUBDUE, toSubdue.toString()); | 101 | payload.put(SUBDUE, toSubdue.toString()); |
| 101 | } | 102 | } |
| 103 | + int delay = highlights.delayMs(); | ||
| 104 | + if (delay > 0) { | ||
| 105 | + payload.put(DELAY, delay); | ||
| 106 | + } | ||
| 102 | return payload; | 107 | return payload; |
| 103 | } | 108 | } |
| 104 | 109 | ... | ... |
| ... | @@ -30,7 +30,7 @@ | ... | @@ -30,7 +30,7 @@ |
| 30 | var tos = 'TopoOverlayService: '; | 30 | var tos = 'TopoOverlayService: '; |
| 31 | 31 | ||
| 32 | // injected refs | 32 | // injected refs |
| 33 | - var $log, fs, gs, wss, ns, tss, tps, api; | 33 | + var $log, $timeout, fs, gs, wss, ns, tss, tps, api; |
| 34 | 34 | ||
| 35 | // internal state | 35 | // internal state |
| 36 | var overlays = {}, | 36 | var overlays = {}, |
| ... | @@ -280,7 +280,20 @@ | ... | @@ -280,7 +280,20 @@ |
| 280 | tss = _tss_; | 280 | tss = _tss_; |
| 281 | } | 281 | } |
| 282 | 282 | ||
| 283 | + //process highlight event with optional delay | ||
| 283 | function showHighlights(data) { | 284 | function showHighlights(data) { |
| 285 | + function doHighlight() { | ||
| 286 | + _showHighlights(data); | ||
| 287 | + } | ||
| 288 | + | ||
| 289 | + if (data.delay) { | ||
| 290 | + $timeout(doHighlight, data.delay); | ||
| 291 | + } else { | ||
| 292 | + doHighlight(); | ||
| 293 | + } | ||
| 294 | + } | ||
| 295 | + | ||
| 296 | + function _showHighlights(data) { | ||
| 284 | var less; | 297 | var less; |
| 285 | 298 | ||
| 286 | /* | 299 | /* |
| ... | @@ -341,7 +354,6 @@ | ... | @@ -341,7 +354,6 @@ |
| 341 | var ldata = api.findLinkById(link.id), | 354 | var ldata = api.findLinkById(link.id), |
| 342 | lab = link.label, | 355 | lab = link.label, |
| 343 | units, portcls, magnitude; | 356 | units, portcls, magnitude; |
| 344 | - | ||
| 345 | if (ldata && !ldata.el.empty()) { | 357 | if (ldata && !ldata.el.empty()) { |
| 346 | if (!link.subdue) { | 358 | if (!link.subdue) { |
| 347 | api.unsupLink(ldata.key, less); | 359 | api.unsupLink(ldata.key, less); |
| ... | @@ -375,11 +387,12 @@ | ... | @@ -375,11 +387,12 @@ |
| 375 | 387 | ||
| 376 | angular.module('ovTopo') | 388 | angular.module('ovTopo') |
| 377 | .factory('TopoOverlayService', | 389 | .factory('TopoOverlayService', |
| 378 | - ['$log', 'FnService', 'GlyphService', 'WebSocketService', 'NavService', | 390 | + ['$log', '$timeout', 'FnService', 'GlyphService', 'WebSocketService', |
| 379 | - 'TopoPanelService', | 391 | + 'NavService', 'TopoPanelService', |
| 380 | 392 | ||
| 381 | - function (_$log_, _fs_, _gs_, _wss_, _ns_, _tps_) { | 393 | + function (_$log_, _$timeout_, _fs_, _gs_, _wss_, _ns_, _tps_) { |
| 382 | $log = _$log_; | 394 | $log = _$log_; |
| 395 | + $timeout = _$timeout_; | ||
| 383 | fs = _fs_; | 396 | fs = _fs_; |
| 384 | gs = _gs_; | 397 | gs = _gs_; |
| 385 | wss = _wss_; | 398 | wss = _wss_; | ... | ... |
-
Please register or login to post a comment