ONOS-3539 Insert optional delay for showing highlights
Change-Id: I289d54fc2b401da397fa97e912e98177d108df23
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java b/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java
index 12d3b62..909bbbb 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java
@@ -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 @@
private static final String MIN = "min";
private static final String MAX = "max";
+
/**
* A notion of amount.
*/
@@ -43,6 +46,7 @@
MAXIMALLY(MAX);
private final String s;
+
Amount(String str) {
s = str;
}
@@ -58,7 +62,30 @@
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 LinkHighlight getLink(String id) {
return links.get(id);
}
+
}
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java b/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
index efe69f5..bd07d6c 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
@@ -33,6 +33,7 @@
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 @@
if (!toSubdue.equals(Highlights.Amount.ZERO)) {
payload.put(SUBDUE, toSubdue.toString());
}
+ int delay = highlights.delayMs();
+ if (delay > 0) {
+ payload.put(DELAY, delay);
+ }
return payload;
}