GUI -- Major rework to link processing so that we consolidate links A->B and B->A into a single backing object.
- added blue glow to ONOS instance when showing switch affinity.

Change-Id: Ia2a52d9d0571bc8c5eed964c85862f5798c7c5db
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_10_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_10_onos.json
new file mode 100644
index 0000000..5775e43
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_10_onos.json
@@ -0,0 +1,15 @@
+{
+  "event": "addLink",
+  "payload": {
+    "id": "of:0000ffffffff0008/10-of:0000ffffffff0003/20",
+    "type": "direct",
+    "linkWidth": 2,
+    "src": "of:0000ffffffff0008",
+    "srcPort": "10",
+    "dst": "of:0000ffffffff0003",
+    "dstPort": "20",
+    "props" : {
+      "BW": "90 Gb"
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_11_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_11_onos.json
new file mode 100644
index 0000000..f0d0b4d
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_11_onos.json
@@ -0,0 +1,17 @@
+{
+  "event": "addHost",
+  "payload": {
+    "id": "0E:2A:69:30:13:88/-1",
+    "ingress": "0E:2A:69:30:13:88/-1/0-of:0000ffffffff0003/1",
+    "egress": "of:0000ffffffff0003/1-0E:2A:69:30:13:88/-1/0",
+    "cp": {
+      "device": "of:0000ffffffff0003",
+      "port": 1
+    },
+    "labels": [
+      "Host-A",
+      "0E:2A:69:30:13:88"
+    ],
+    "props": {}
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_12_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_12_onos.json
new file mode 100644
index 0000000..d977343
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_12_onos.json
@@ -0,0 +1,17 @@
+{
+  "event": "addHost",
+  "payload": {
+    "id": "0E:2A:69:30:13:89/-1",
+    "ingress": "0E:2A:69:30:13:89/-1/0-of:0000ffffffff0007/1",
+    "egress": "of:0000ffffffff0007/1-0E:2A:69:30:13:89/-1/0",
+    "cp": {
+      "device": "of:0000ffffffff0007",
+      "port": 1
+    },
+    "labels": [
+      "Host-B",
+      "0E:2A:69:30:13:89"
+    ],
+    "props": {}
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_13_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_13_onos.json
new file mode 100644
index 0000000..8f643ba
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_13_onos.json
@@ -0,0 +1,17 @@
+{
+  "event": "addHost",
+  "payload": {
+    "id": "0E:2A:69:30:13:8A/-1",
+    "ingress": "0E:2A:69:30:13:8A/-1/0-of:0000ffffffff0008/1",
+    "egress": "of:0000ffffffff0008/1-0E:2A:69:30:13:8A/-1/0",
+    "cp": {
+      "device": "of:0000ffffffff0008",
+      "port": 1
+    },
+    "labels": [
+      "Host-C",
+      "0E:2A:69:30:13:8A"
+    ],
+    "props": {}
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_14_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_14_onos.json
new file mode 100644
index 0000000..d761019
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_14_onos.json
@@ -0,0 +1,17 @@
+{
+  "event": "updateLink",
+  "payload": {
+    "id": "of:0000ffffffff0007/10-of:0000ffffffff0008/20",
+    "src": "of:0000ffffffff0007",
+    "srcPort": "10",
+    "dst": "of:0000ffffffff0008",
+    "dstPort": "20",
+
+    "type": "direct",
+    "linkWidth": 2,
+    "online": true,
+    "props" : {
+      "BW": "90 Gb"
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_15_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_15_onos.json
new file mode 100644
index 0000000..dbdfb3a
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_15_onos.json
@@ -0,0 +1,17 @@
+{
+  "event": "updateLink",
+  "payload": {
+    "id": "of:0000ffffffff0007/20-of:0000ffffffff0003/10",
+    "src": "of:0000ffffffff0007",
+    "srcPort": "20",
+    "dst": "of:0000ffffffff0003",
+    "dstPort": "10",
+
+    "type": "direct",
+    "linkWidth": 6,
+    "online": true,
+    "props" : {
+      "BW": "90 Gb"
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_16_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_16_onos.json
new file mode 100644
index 0000000..b7783c1
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_16_onos.json
@@ -0,0 +1,15 @@
+{
+  "event": "removeLink",
+  "payload": {
+    "id": "of:0000ffffffff0007/20-of:0000ffffffff0003/10",
+    "type": "direct",
+    "linkWidth": 2,
+    "src": "of:0000ffffffff0007",
+    "srcPort": "20",
+    "dst": "of:0000ffffffff0003",
+    "dstPort": "10",
+    "props" : {
+      "BW": "90 Gb"
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_17_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_17_onos.json
new file mode 100644
index 0000000..daf926e
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_17_onos.json
@@ -0,0 +1,15 @@
+{
+  "event": "removeLink",
+  "payload": {
+    "id": "of:0000ffffffff0003/10-of:0000ffffffff0007/20",
+    "type": "direct",
+    "linkWidth": 2,
+    "src": "of:0000ffffffff0003",
+    "srcPort": "10",
+    "dst": "of:0000ffffffff0007",
+    "dstPort": "20",
+    "props" : {
+      "BW": "90 Gb"
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_1_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_1_onos.json
new file mode 100644
index 0000000..d7f69d3
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_1_onos.json
@@ -0,0 +1,11 @@
+{
+  "event": "addInstance",
+  "payload": {
+    "id": "local",
+    "online": true,
+    "labels": [
+      "local",
+      "127.0.0.1"
+    ]
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_2_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_2_onos.json
new file mode 100644
index 0000000..352a835
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_2_onos.json
@@ -0,0 +1,18 @@
+{
+  "event": "addDevice",
+  "payload": {
+    "id": "of:0000ffffffff0003",
+    "type": "switch",
+    "online": true,
+    "master": "local",
+    "labels": [
+      "0000ffffffff0003",
+      "FF:FF:FF:FF:00:03",
+      "sw-3"
+    ],
+    "metaUi": {
+      "x": 282,
+      "y": 503
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_3_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_3_onos.json
new file mode 100644
index 0000000..d52db4e
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_3_onos.json
@@ -0,0 +1,18 @@
+{
+  "event": "addDevice",
+  "payload": {
+    "id": "of:0000ffffffff0007",
+    "type": "switch",
+    "online": true,
+    "master": "local",
+    "labels": [
+      "0000ffffffff0007",
+      "FF:FF:FF:FF:00:07",
+      "sw-7"
+    ],
+    "metaUi": {
+      "x": 530,
+      "y": 330
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_4_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_4_onos.json
new file mode 100644
index 0000000..9f2c260
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_4_onos.json
@@ -0,0 +1,18 @@
+{
+  "event": "addDevice",
+  "payload": {
+    "id": "of:0000ffffffff0008",
+    "type": "switch",
+    "online": true,
+    "master": "local",
+    "labels": [
+      "0000ffffffff0008",
+      "FF:FF:FF:FF:00:08",
+      "sw-8"
+    ],
+    "metaUi": {
+      "x": 734,
+      "y": 477
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_5_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_5_onos.json
new file mode 100644
index 0000000..771c332
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_5_onos.json
@@ -0,0 +1,15 @@
+{
+  "event": "addLink",
+  "payload": {
+    "id": "of:0000ffffffff0007/10-of:0000ffffffff0008/20",
+    "type": "direct",
+    "linkWidth": 2,
+    "src": "of:0000ffffffff0007",
+    "srcPort": "10",
+    "dst": "of:0000ffffffff0008",
+    "dstPort": "20",
+    "props" : {
+      "BW": "90 Gb"
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_6_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_6_onos.json
new file mode 100644
index 0000000..6eea869
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_6_onos.json
@@ -0,0 +1,15 @@
+{
+  "event": "addLink",
+  "payload": {
+    "id": "of:0000ffffffff0008/20-of:0000ffffffff0007/10",
+    "type": "direct",
+    "linkWidth": 2,
+    "src": "of:0000ffffffff0008",
+    "srcPort": "20",
+    "dst": "of:0000ffffffff0007",
+    "dstPort": "10",
+    "props" : {
+      "BW": "90 Gb"
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_7_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_7_onos.json
new file mode 100644
index 0000000..cff94a5
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_7_onos.json
@@ -0,0 +1,15 @@
+{
+  "event": "addLink",
+  "payload": {
+    "id": "of:0000ffffffff0003/10-of:0000ffffffff0007/20",
+    "type": "direct",
+    "linkWidth": 2,
+    "src": "of:0000ffffffff0003",
+    "srcPort": "10",
+    "dst": "of:0000ffffffff0007",
+    "dstPort": "20",
+    "props" : {
+      "BW": "90 Gb"
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_8_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_8_onos.json
new file mode 100644
index 0000000..0a5a314
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_8_onos.json
@@ -0,0 +1,15 @@
+{
+  "event": "addLink",
+  "payload": {
+    "id": "of:0000ffffffff0007/20-of:0000ffffffff0003/10",
+    "type": "direct",
+    "linkWidth": 2,
+    "src": "of:0000ffffffff0007",
+    "srcPort": "20",
+    "dst": "of:0000ffffffff0003",
+    "dstPort": "10",
+    "props" : {
+      "BW": "90 Gb"
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_9_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_9_onos.json
new file mode 100644
index 0000000..0b6b67b
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/ev_9_onos.json
@@ -0,0 +1,15 @@
+{
+  "event": "addLink",
+  "payload": {
+    "id": "of:0000ffffffff0003/20-of:0000ffffffff0008/10",
+    "type": "direct",
+    "linkWidth": 2,
+    "src": "of:0000ffffffff0003",
+    "srcPort": "20",
+    "dst": "of:0000ffffffff0008",
+    "dstPort": "10",
+    "props" : {
+      "BW": "90 Gb"
+    }
+  }
+}
diff --git a/web/gui/src/main/webapp/json/ev/links/scenario.json b/web/gui/src/main/webapp/json/ev/links/scenario.json
new file mode 100644
index 0000000..b1988ca
--- /dev/null
+++ b/web/gui/src/main/webapp/json/ev/links/scenario.json
@@ -0,0 +1,16 @@
+{
+  "comments": [
+    "Stepping through link events"
+  ],
+  "title": "Process Link Events Scenario",
+  "params": {
+    "lastAuto": 13
+  },
+  "description": [
+    "Develop link event handling.",
+    "",
+    "Press 'S' to load initial events.",
+    "",
+    "Press spacebar to complete the scenario..."
+  ]
+}