ONOS-6071 adding Mods for protection links

Change-Id: I116f6af0044debac635e9a8ddeae12ab43bb1fe6
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TrafficLink.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TrafficLink.java
index 0089292..16d3db7 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TrafficLink.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/util/TrafficLink.java
@@ -22,11 +22,13 @@
 import org.onosproject.ui.topo.BiLink;
 import org.onosproject.ui.topo.LinkHighlight;
 import org.onosproject.ui.topo.LinkHighlight.Flavor;
+import org.onosproject.ui.topo.Mod;
 import org.onosproject.ui.topo.TopoUtils;
 
-import static org.onosproject.ui.topo.LinkHighlight.Flavor.NO_HIGHLIGHT;
-import static org.onosproject.ui.topo.LinkHighlight.Flavor.PRIMARY_HIGHLIGHT;
-import static org.onosproject.ui.topo.LinkHighlight.Flavor.SECONDARY_HIGHLIGHT;
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.onosproject.ui.topo.LinkHighlight.Flavor.*;
 
 /**
  * Representation of a link and its inverse, and associated traffic data.
@@ -45,6 +47,7 @@
     private boolean hasTraffic = false;
     private boolean isOptical = false;
     private boolean antMarch = false;
+    private Set<Mod> mods = new HashSet<>();
 
     /**
      * Constructs a traffic link for the given key and initial link.
@@ -90,6 +93,19 @@
     }
 
     /**
+     * Tags this traffic link with the mods to be used in visual rendering.
+     *
+     * @param mods the mods to tag on this link
+     * @return self, for chaining
+     */
+    public TrafficLink tagMods(Set<Mod> mods) {
+        if (mods != null) {
+            this.mods.addAll(mods);
+        }
+        return this;
+    }
+
+    /**
      * Adds load statistics, marks the traffic link as having traffic.
      *
      * @param load load to add
@@ -103,7 +119,7 @@
      * load {@link Load#rate rate} is greater than the given threshold
      * (expressed in bytes per second).
      *
-     * @param load load to add
+     * @param load      load to add
      * @param threshold threshold to register traffic
      */
     public void addLoad(Load load, double threshold) {
@@ -143,14 +159,23 @@
     }
 
     private LinkHighlight highlightForStats(StatsType type) {
-        return new LinkHighlight(linkId(), SECONDARY_HIGHLIGHT)
+        LinkHighlight hlite = new LinkHighlight(linkId(), SECONDARY_HIGHLIGHT)
                 .setLabel(generateLabel(type));
+        if (!mods.isEmpty()) {
+            mods.forEach(hlite::addMod);
+        }
+        return hlite;
     }
 
     private LinkHighlight highlightForFlowCount(StatsType type) {
         Flavor flavor = flows > 0 ? PRIMARY_HIGHLIGHT : SECONDARY_HIGHLIGHT;
-        return new LinkHighlight(linkId(), flavor)
+        LinkHighlight hlite = new LinkHighlight(linkId(), flavor)
                 .setLabel(generateLabel(type));
+        if (!mods.isEmpty()) {
+            mods.forEach(hlite::addMod);
+        }
+        return hlite;
+
     }
 
     private LinkHighlight highlightForTagging(StatsType type) {
@@ -162,6 +187,9 @@
         if (antMarch) {
             hlite.addMod(LinkHighlight.MOD_ANIMATED);
         }
+        if (!mods.isEmpty()) {
+            mods.forEach(hlite::addMod);
+        }
         return hlite;
     }