Andrea Campanella
Committed by Gerrit Code Review

ONOS-3539 Insert optional delay for showing highlights

Change-Id: I289d54fc2b401da397fa97e912e98177d108df23
......@@ -16,6 +16,8 @@
package org.onosproject.ui.topo;
import com.google.common.base.Preconditions;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
......@@ -34,6 +36,7 @@ public class Highlights {
private static final String MIN = "min";
private static final String MAX = "max";
/**
* A notion of amount.
*/
......@@ -43,6 +46,7 @@ public class Highlights {
MAXIMALLY(MAX);
private final String s;
Amount(String str) {
s = str;
}
......@@ -58,7 +62,30 @@ public class Highlights {
private final Map<String, LinkHighlight> links = new HashMap<>();
private Amount subdueLevel = Amount.ZERO;
private int delayMs = 0;
//TODO: Think of a better solution for topology events race conditions
/**
* Sets the number of milliseconds to delay processing of highlights
* events on the client side.
*
* @param ms milliseconds to delay
* @return self, for chaining
*/
public Highlights delay(int ms) {
Preconditions.checkArgument(ms >= 0, "Delay cannot be lower than 0");
delayMs = ms;
return this;
}
/**
* Return the delay for the highlight event.
*
* @return delay in milliseconds
*/
public int delayMs() {
return delayMs;
}
/**
* Adds highlighting information for a device.
......@@ -186,4 +213,5 @@ public class Highlights {
public LinkHighlight getLink(String id) {
return links.get(id);
}
}
......
......@@ -33,6 +33,7 @@ public final class TopoJson {
static final String HOSTS = "hosts";
static final String LINKS = "links";
static final String SUBDUE = "subdue";
static final String DELAY = "delay";
static final String ID = "id";
static final String LABEL = "label";
......@@ -99,6 +100,10 @@ public final class TopoJson {
if (!toSubdue.equals(Highlights.Amount.ZERO)) {
payload.put(SUBDUE, toSubdue.toString());
}
int delay = highlights.delayMs();
if (delay > 0) {
payload.put(DELAY, delay);
}
return payload;
}
......
......@@ -30,7 +30,7 @@
var tos = 'TopoOverlayService: ';
// injected refs
var $log, fs, gs, wss, ns, tss, tps, api;
var $log, $timeout, fs, gs, wss, ns, tss, tps, api;
// internal state
var overlays = {},
......@@ -280,7 +280,20 @@
tss = _tss_;
}
//process highlight event with optional delay
function showHighlights(data) {
function doHighlight() {
_showHighlights(data);
}
if (data.delay) {
$timeout(doHighlight, data.delay);
} else {
doHighlight();
}
}
function _showHighlights(data) {
var less;
/*
......@@ -341,7 +354,6 @@
var ldata = api.findLinkById(link.id),
lab = link.label,
units, portcls, magnitude;
if (ldata && !ldata.el.empty()) {
if (!link.subdue) {
api.unsupLink(ldata.key, less);
......@@ -375,11 +387,12 @@
angular.module('ovTopo')
.factory('TopoOverlayService',
['$log', 'FnService', 'GlyphService', 'WebSocketService', 'NavService',
'TopoPanelService',
['$log', '$timeout', 'FnService', 'GlyphService', 'WebSocketService',
'NavService', 'TopoPanelService',
function (_$log_, _fs_, _gs_, _wss_, _ns_, _tps_) {
function (_$log_, _$timeout_, _fs_, _gs_, _wss_, _ns_, _tps_) {
$log = _$log_;
$timeout = _$timeout_;
fs = _fs_;
gs = _gs_;
wss = _wss_;
......