Andrea Campanella
Committed by Gerrit Code Review

ONOS-3539 Insert optional delay for showing highlights

Change-Id: I289d54fc2b401da397fa97e912e98177d108df23
...@@ -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_;
......