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