ONOS-3182 added swap functionality

Change-Id: Idc521a330c5bb3c0e0a47f66a90dfa95855e610f
diff --git a/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java b/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
index c7eba1e..d9b6f76 100644
--- a/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
+++ b/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
@@ -84,6 +84,7 @@
         return ImmutableSet.of(
                 new SetSrcHandler(),
                 new SetDstHandler(),
+                new SwapSrcDstHandler(),
                 new NextPathHandler(),
                 new PrevPathHandler()
         );
@@ -124,6 +125,20 @@
         }
     }
 
+    private final class SwapSrcDstHandler extends RequestHandler {
+        public SwapSrcDstHandler() {
+            super(PAINTER_SWAP_SRC_DST);
+        }
+
+        @Override
+        public void process(long sid, ObjectNode payload) {
+            ElementId temp = src;
+            src = dst;
+            dst = temp;
+            findAndSendPaths();
+        }
+    }
+
     private final class NextPathHandler extends RequestHandler {
         public NextPathHandler() {
             super(PAINTER_NEXT_PATH);
diff --git a/apps/pathpainter/src/main/resources/app/view/ppTopov/ppTopov.js b/apps/pathpainter/src/main/resources/app/view/ppTopov/ppTopov.js
index 523142e..5763932 100644
--- a/apps/pathpainter/src/main/resources/app/view/ppTopov/ppTopov.js
+++ b/apps/pathpainter/src/main/resources/app/view/ppTopov/ppTopov.js
@@ -28,6 +28,7 @@
     // constants
     var srcMessage = 'ppTopovSetSrc',
         dstMessage = 'ppTopovSetDst',
+        swapMessage = 'ppTopovSwapSrcDst',
         modeMessage = 'ppTopovSetMode',
         nextPathMessage = 'ppTopovNextPath',
         prevPathMessage = 'ppTopovPrevPath';
@@ -58,11 +59,16 @@
         flash.flash('Destination node: ' + node.id);
     }
 
-    function nextPath(node) {
+    function swapSrcDst() {
+        wss.sendEvent(swapMessage)
+        flash.flash('Source and destination swap');
+    }
+
+    function nextPath() {
         wss.sendEvent(nextPathMessage);
     }
 
-    function prevPath(node) {
+    function prevPath() {
         wss.sendEvent(prevPathMessage);
     }
 
@@ -97,7 +103,8 @@
                 setDst: setDst,
                 setMode: setMode,
                 nextPath: nextPath,
-                prevPath: prevPath
+                prevPath: prevPath,
+                swapSrcDst: swapSrcDst
             };
         }]);
 }());
diff --git a/apps/pathpainter/src/main/resources/app/view/ppTopov/ppTopovOverlay.js b/apps/pathpainter/src/main/resources/app/view/ppTopov/ppTopovOverlay.js
index 52f4f68..4159287 100644
--- a/apps/pathpainter/src/main/resources/app/view/ppTopov/ppTopovOverlay.js
+++ b/apps/pathpainter/src/main/resources/app/view/ppTopov/ppTopovOverlay.js
@@ -16,8 +16,7 @@
     var overlay = {
         // NOTE: this must match the ID defined in AppUiTopovOverlay
         overlayId: 'pp-overlay',
-        // FIXME: new icon for the overlay
-        glyphId: '*star4',
+        glyphId: 'topo',
         tooltip: 'Path Painter Topo Overlay',
 
         // These glyphs get installed using the overlayId as a prefix.
@@ -68,7 +67,6 @@
         // FIXME: use into [ and ] instead of 1 and 2
         // FIXME: new icons for src/dst
         // TODO: add keys for shortest paths & disjoint paths modes
-        // TODO: add key for src/dst swap; with its own icon
         keyBindings: {
             1: {
                 cb: function () { pps.setSrc(selection); },
@@ -80,6 +78,11 @@
                 tt: 'Set destination node',
                 gid: 'triangleDown'
             },
+            3: {
+                cb: function () { pps.swapSrcDst(); },
+                tt: 'Swap source and destination nodes',
+                gid: 'refresh'
+            },
             leftArrow: {
                 cb: function () { pps.prevPath(); },
                 tt: 'Highlight previous path',
@@ -92,7 +95,7 @@
             },
 
             _keyOrder: [
-                '1', '2', 'leftArrow', 'rightArrow'
+                '1', '2', '3', 'leftArrow', 'rightArrow'
             ]
         },
 
diff --git a/web/gui/src/main/webapp/app/view/topo/topoToolbar.js b/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
index 804e2a3..fbcdaf6 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
@@ -167,7 +167,7 @@
 
         // generate radio button set for overlays; start with 'none'
         var rset = [{
-                gid: 'topo',
+                gid: 'unknown',
                 tooltip: 'No Overlay',
                 cb: function () {
                     tov.tbSelection(null, switchOverlayActions);