Andrea Campanella
Committed by Gerrit Code Review

Add listner for down paths to path painter App and highlights remove when changing overlay

Change-Id: I1bf94468a61bd1a7211532a5b8e9e6cdfbecbda5
...@@ -30,6 +30,9 @@ import org.onosproject.net.device.DeviceService; ...@@ -30,6 +30,9 @@ import org.onosproject.net.device.DeviceService;
30 import org.onosproject.net.topology.GeoDistanceLinkWeight; 30 import org.onosproject.net.topology.GeoDistanceLinkWeight;
31 import org.onosproject.net.topology.LinkWeight; 31 import org.onosproject.net.topology.LinkWeight;
32 import org.onosproject.net.topology.PathService; 32 import org.onosproject.net.topology.PathService;
33 +import org.onosproject.net.topology.TopologyEvent;
34 +import org.onosproject.net.topology.TopologyListener;
35 +import org.onosproject.net.topology.TopologyService;
33 import org.onosproject.ui.RequestHandler; 36 import org.onosproject.ui.RequestHandler;
34 import org.onosproject.ui.UiConnection; 37 import org.onosproject.ui.UiConnection;
35 import org.onosproject.ui.UiMessageHandler; 38 import org.onosproject.ui.UiMessageHandler;
...@@ -50,6 +53,7 @@ import java.util.Set; ...@@ -50,6 +53,7 @@ import java.util.Set;
50 */ 53 */
51 public class PathPainterTopovMessageHandler extends UiMessageHandler { 54 public class PathPainterTopovMessageHandler extends UiMessageHandler {
52 55
56 + private static final String PAINTER_CLEAR = "ppTopovClear";
53 private static final String PAINTER_SET_SRC = "ppTopovSetSrc"; 57 private static final String PAINTER_SET_SRC = "ppTopovSetSrc";
54 private static final String PAINTER_SET_DST = "ppTopovSetDst"; 58 private static final String PAINTER_SET_DST = "ppTopovSetDst";
55 private static final String PAINTER_SWAP_SRC_DST = "ppTopovSwapSrcDst"; 59 private static final String PAINTER_SWAP_SRC_DST = "ppTopovSwapSrcDst";
...@@ -67,7 +71,10 @@ public class PathPainterTopovMessageHandler extends UiMessageHandler { ...@@ -67,7 +71,10 @@ public class PathPainterTopovMessageHandler extends UiMessageHandler {
67 public static final String SRC = "Src"; 71 public static final String SRC = "Src";
68 private static LinkWeight linkData; 72 private static LinkWeight linkData;
69 73
74 + private final TopologyListener topologyListener = new InternalTopologyListener();
75 +
70 private Set<Link> allPathLinks; 76 private Set<Link> allPathLinks;
77 + private boolean listenersRemoved;
71 78
72 private enum Mode { 79 private enum Mode {
73 SHORTEST, DISJOINT, GEODATA, SRLG, INVALID 80 SHORTEST, DISJOINT, GEODATA, SRLG, INVALID
...@@ -83,6 +90,8 @@ public class PathPainterTopovMessageHandler extends UiMessageHandler { ...@@ -83,6 +90,8 @@ public class PathPainterTopovMessageHandler extends UiMessageHandler {
83 private List<Path> paths; 90 private List<Path> paths;
84 private int pathIndex; 91 private int pathIndex;
85 92
93 + protected TopologyService topologyService;
94 +
86 95
87 // ===============-=-=-=-=-=-======================-=-=-=-=-=-=-================================ 96 // ===============-=-=-=-=-=-======================-=-=-=-=-=-=-================================
88 97
...@@ -91,12 +100,22 @@ public class PathPainterTopovMessageHandler extends UiMessageHandler { ...@@ -91,12 +100,22 @@ public class PathPainterTopovMessageHandler extends UiMessageHandler {
91 public void init(UiConnection connection, ServiceDirectory directory) { 100 public void init(UiConnection connection, ServiceDirectory directory) {
92 super.init(connection, directory); 101 super.init(connection, directory);
93 pathService = directory.get(PathService.class); 102 pathService = directory.get(PathService.class);
103 + topologyService = directory.get(TopologyService.class);
94 linkData = new GeoDistanceLinkWeight(directory.get(DeviceService.class)); 104 linkData = new GeoDistanceLinkWeight(directory.get(DeviceService.class));
105 + addListeners();
106 + }
107 +
108 +
109 + @Override
110 + public void destroy() {
111 + removeListeners();
112 + super.destroy();
95 } 113 }
96 114
97 @Override 115 @Override
98 protected Collection<RequestHandler> createRequestHandlers() { 116 protected Collection<RequestHandler> createRequestHandlers() {
99 return ImmutableSet.of( 117 return ImmutableSet.of(
118 + new ClearHandler(),
100 new SetSrcHandler(), 119 new SetSrcHandler(),
101 new SetDstHandler(), 120 new SetDstHandler(),
102 new SwapSrcDstHandler(), 121 new SwapSrcDstHandler(),
...@@ -109,6 +128,20 @@ public class PathPainterTopovMessageHandler extends UiMessageHandler { ...@@ -109,6 +128,20 @@ public class PathPainterTopovMessageHandler extends UiMessageHandler {
109 // === ------------------------- 128 // === -------------------------
110 // === Handler classes 129 // === Handler classes
111 130
131 + private final class ClearHandler extends RequestHandler {
132 +
133 + public ClearHandler() {
134 + super(PAINTER_CLEAR);
135 + }
136 +
137 + @Override
138 + public void process(long sid, ObjectNode payload) {
139 + src = null;
140 + dst = null;
141 + sendMessage(TopoJson.highlightsMessage(new Highlights()));
142 + }
143 + }
144 +
112 private final class SetSrcHandler extends RequestHandler { 145 private final class SetSrcHandler extends RequestHandler {
113 146
114 public SetSrcHandler() { 147 public SetSrcHandler() {
...@@ -333,4 +366,23 @@ public class PathPainterTopovMessageHandler extends UiMessageHandler { ...@@ -333,4 +366,23 @@ public class PathPainterTopovMessageHandler extends UiMessageHandler {
333 return NodeBadge.text(type); 366 return NodeBadge.text(type);
334 } 367 }
335 368
369 + private synchronized void addListeners() {
370 + listenersRemoved = false;
371 + topologyService.addListener(topologyListener);
372 + }
373 + private synchronized void removeListeners() {
374 + if (!listenersRemoved) {
375 + listenersRemoved = true;
376 + topologyService.removeListener(topologyListener);
377 + }
378 + }
379 +
380 + // Link event listener.
381 + private class InternalTopologyListener implements TopologyListener {
382 + @Override
383 + public void event(TopologyEvent event) {
384 + findAndSendPaths(currentMode);
385 + }
386 + }
387 +
336 } 388 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -37,6 +37,12 @@ public class PathPainterTopovOverlay extends UiTopoOverlay { ...@@ -37,6 +37,12 @@ public class PathPainterTopovOverlay extends UiTopoOverlay {
37 } 37 }
38 38
39 @Override 39 @Override
40 + public void deactivate() {
41 + super.deactivate();
42 + log.debug("PathPainterOverlay Deactivated");
43 + }
44 +
45 + @Override
40 public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) { 46 public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) {
41 pp.addButton(SRC_BUTTON).addButton(DST_BUTTON); 47 pp.addButton(SRC_BUTTON).addButton(DST_BUTTON);
42 } 48 }
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
31 swapMessage = 'ppTopovSwapSrcDst', 31 swapMessage = 'ppTopovSwapSrcDst',
32 modeMessage = 'ppTopovSetMode', 32 modeMessage = 'ppTopovSetMode',
33 nextPathMessage = 'ppTopovNextPath', 33 nextPathMessage = 'ppTopovNextPath',
34 + clearMessage = 'ppTopovClear',
34 prevPathMessage = 'ppTopovPrevPath'; 35 prevPathMessage = 'ppTopovPrevPath';
35 36
36 // internal state 37 // internal state
...@@ -44,6 +45,10 @@ ...@@ -44,6 +45,10 @@
44 // === --------------------------- 45 // === ---------------------------
45 // === Main API functions 46 // === Main API functions
46 47
48 + function clear() {
49 + wss.sendEvent(clearMessage);
50 + flash.flash('Source node: ' + node.id);
51 + }
47 52
48 function setSrc(node) { 53 function setSrc(node) {
49 wss.sendEvent(srcMessage, { 54 wss.sendEvent(srcMessage, {
...@@ -107,7 +112,8 @@ ...@@ -107,7 +112,8 @@
107 setMode: setMode, 112 setMode: setMode,
108 nextPath: nextPath, 113 nextPath: nextPath,
109 prevPath: prevPath, 114 prevPath: prevPath,
110 - swapSrcDst: swapSrcDst 115 + swapSrcDst: swapSrcDst,
116 + clear: clear
111 }; 117 };
112 }]); 118 }]);
113 }()); 119 }());
......
...@@ -19,6 +19,13 @@ ...@@ -19,6 +19,13 @@
19 glyphId: 'topo', 19 glyphId: 'topo',
20 tooltip: 'Path Painter Topo Overlay', 20 tooltip: 'Path Painter Topo Overlay',
21 21
22 + activate: function () {
23 + $log.debug("Path painter topology overlay ACTIVATED");
24 + },
25 + deactivate: function () {
26 + pps.clear();
27 + $log.debug("Path painter topology overlay DEACTIVATED");
28 + },
22 // These glyphs get installed using the overlayId as a prefix. 29 // These glyphs get installed using the overlayId as a prefix.
23 // e.g. 'src' is installed as 'pp-overlay-src' 30 // e.g. 'src' is installed as 'pp-overlay-src'
24 // They can be referenced (from this overlay) as '*src' 31 // They can be referenced (from this overlay) as '*src'
...@@ -123,13 +130,6 @@ ...@@ -123,13 +130,6 @@
123 } 130 }
124 }, 131 },
125 132
126 - activate: function () {
127 - $log.debug("Path painter topology overlay ACTIVATED");
128 - },
129 - deactivate: function () {
130 - $log.debug("Path painter topology overlay DEACTIVATED");
131 - },
132 -
133 // detail panel button definitions 133 // detail panel button definitions
134 buttons: { 134 buttons: {
135 src: { 135 src: {
......