aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/web
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/web')
-rw-r--r--framework/src/onos/web/api/src/test/java/org/onosproject/rest/ApplicationsResourceTest.java8
-rw-r--r--framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java57
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js1
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoForce.js30
4 files changed, 73 insertions, 23 deletions
diff --git a/framework/src/onos/web/api/src/test/java/org/onosproject/rest/ApplicationsResourceTest.java b/framework/src/onos/web/api/src/test/java/org/onosproject/rest/ApplicationsResourceTest.java
index 6fee43ed..3e72f18d 100644
--- a/framework/src/onos/web/api/src/test/java/org/onosproject/rest/ApplicationsResourceTest.java
+++ b/framework/src/onos/web/api/src/test/java/org/onosproject/rest/ApplicationsResourceTest.java
@@ -85,19 +85,19 @@ public class ApplicationsResourceTest extends ResourceTest {
private Application app1 =
new DefaultApplication(id1, VER,
"app1", "origin1", ApplicationRole.ADMIN, ImmutableSet.of(), Optional.of(FURL),
- ImmutableList.of("My Feature"));
+ ImmutableList.of("My Feature"), ImmutableList.of());
private Application app2 =
new DefaultApplication(id2, VER,
"app2", "origin2", ApplicationRole.ADMIN, ImmutableSet.of(), Optional.of(FURL),
- ImmutableList.of("My Feature"));
+ ImmutableList.of("My Feature"), ImmutableList.of());
private Application app3 =
new DefaultApplication(id3, VER,
"app3", "origin3", ApplicationRole.ADMIN, ImmutableSet.of(), Optional.of(FURL),
- ImmutableList.of("My Feature"));
+ ImmutableList.of("My Feature"), ImmutableList.of());
private Application app4 =
new DefaultApplication(id4, VER,
"app4", "origin4", ApplicationRole.ADMIN, ImmutableSet.of(), Optional.of(FURL),
- ImmutableList.of("My Feature"));
+ ImmutableList.of("My Feature"), ImmutableList.of());
/**
* Hamcrest matcher to check that an application representation in JSON matches
diff --git a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
index 840e89f3..8da81016 100644
--- a/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
+++ b/framework/src/onos/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
@@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.onlab.osgi.ServiceDirectory;
import org.onlab.packet.IpAddress;
+import org.onlab.util.DefaultHashMap;
import org.onosproject.cluster.ClusterEvent;
import org.onosproject.cluster.ClusterService;
import org.onosproject.cluster.ControllerNode;
@@ -80,17 +81,9 @@ import java.util.concurrent.ConcurrentHashMap;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_ADDED;
-import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_REMOVED;
import static org.onosproject.cluster.ControllerNode.State.ACTIVE;
import static org.onosproject.net.DefaultEdgeLink.createEdgeLink;
import static org.onosproject.net.PortNumber.portNumber;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_ADDED;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_REMOVED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
-import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED;
-import static org.onosproject.net.link.LinkEvent.Type.LINK_REMOVED;
import static org.onosproject.ui.topo.TopoConstants.CoreButtons;
import static org.onosproject.ui.topo.TopoConstants.Properties;
import static org.onosproject.ui.topo.TopoUtils.compactLinkString;
@@ -100,6 +93,33 @@ import static org.onosproject.ui.topo.TopoUtils.compactLinkString;
*/
public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler {
+ // default to an "add" event...
+ private static final DefaultHashMap<ClusterEvent.Type, String> CLUSTER_EVENT =
+ new DefaultHashMap<>("addInstance");
+
+ // default to an "update" event...
+ private static final DefaultHashMap<DeviceEvent.Type, String> DEVICE_EVENT =
+ new DefaultHashMap<>("updateDevice");
+ private static final DefaultHashMap<LinkEvent.Type, String> LINK_EVENT =
+ new DefaultHashMap<>("updateLink");
+ private static final DefaultHashMap<HostEvent.Type, String> HOST_EVENT =
+ new DefaultHashMap<>("updateHost");
+
+ // but call out specific events that we care to differentiate...
+ static {
+ CLUSTER_EVENT.put(ClusterEvent.Type.INSTANCE_REMOVED, "removeInstance");
+
+ DEVICE_EVENT.put(DeviceEvent.Type.DEVICE_ADDED, "addDevice");
+ DEVICE_EVENT.put(DeviceEvent.Type.DEVICE_REMOVED, "removeDevice");
+
+ LINK_EVENT.put(LinkEvent.Type.LINK_ADDED, "addLink");
+ LINK_EVENT.put(LinkEvent.Type.LINK_REMOVED, "removeLink");
+
+ HOST_EVENT.put(HostEvent.Type.HOST_ADDED, "addHost");
+ HOST_EVENT.put(HostEvent.Type.HOST_REMOVED, "removeHost");
+ HOST_EVENT.put(HostEvent.Type.HOST_MOVED, "moveHost");
+ }
+
protected static final Logger log =
LoggerFactory.getLogger(TopologyViewMessageHandlerBase.class);
@@ -204,7 +224,7 @@ public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler {
}
// Produces a cluster instance message to the client.
- protected ObjectNode instanceMessage(ClusterEvent event, String messageType) {
+ protected ObjectNode instanceMessage(ClusterEvent event, String msgType) {
ControllerNode node = event.subject();
int switchCount = mastershipService.getDevicesOf(node.id()).size();
ObjectNode payload = objectNode()
@@ -222,10 +242,7 @@ public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler {
payload.set("labels", labels);
addMetaUi(node.id().toString(), payload);
- String type = messageType != null ? messageType :
- ((event.type() == INSTANCE_ADDED) ? "addInstance" :
- ((event.type() == INSTANCE_REMOVED ? "removeInstance" :
- "addInstance")));
+ String type = msgType != null ? msgType : CLUSTER_EVENT.get(event.type());
return JsonUtils.envelope(type, 0, payload);
}
@@ -251,8 +268,7 @@ public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler {
addGeoLocation(device, payload);
addMetaUi(device.id().toString(), payload);
- String type = (event.type() == DEVICE_ADDED) ? "addDevice" :
- ((event.type() == DEVICE_REMOVED) ? "removeDevice" : "updateDevice");
+ String type = DEVICE_EVENT.get(event.type());
return JsonUtils.envelope(type, 0, payload);
}
@@ -268,8 +284,7 @@ public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler {
.put("srcPort", link.src().port().toString())
.put("dst", link.dst().deviceId().toString())
.put("dstPort", link.dst().port().toString());
- String type = (event.type() == LINK_ADDED) ? "addLink" :
- ((event.type() == LINK_REMOVED) ? "removeLink" : "updateLink");
+ String type = LINK_EVENT.get(event.type());
return JsonUtils.envelope(type, 0, payload);
}
@@ -277,20 +292,24 @@ public abstract class TopologyViewMessageHandlerBase extends UiMessageHandler {
protected ObjectNode hostMessage(HostEvent event) {
Host host = event.subject();
String hostType = host.annotations().value(AnnotationKeys.TYPE);
+ HostLocation prevLoc = event.prevLocation();
+
ObjectNode payload = objectNode()
.put("id", host.id().toString())
.put("type", isNullOrEmpty(hostType) ? "endstation" : hostType)
.put("ingress", compactLinkString(edgeLink(host, true)))
.put("egress", compactLinkString(edgeLink(host, false)));
payload.set("cp", hostConnect(host.location()));
+ if (prevLoc != null) {
+ payload.set("prevCp", hostConnect(event.prevLocation()));
+ }
payload.set("labels", labels(ip(host.ipAddresses()),
host.mac().toString()));
payload.set("props", props(host.annotations()));
addGeoLocation(host, payload);
addMetaUi(host.id().toString(), payload);
- String type = (event.type() == HOST_ADDED) ? "addHost" :
- ((event.type() == HOST_REMOVED) ? "removeHost" : "updateHost");
+ String type = HOST_EVENT.get(event.type());
return JsonUtils.envelope(type, 0, payload);
}
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js
index 2957629a..9b07f878 100644
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js
+++ b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js
@@ -55,6 +55,7 @@
removeDevice: tfs,
addHost: tfs,
updateHost: tfs,
+ moveHost: tfs,
removeHost: tfs,
addLink: tfs,
updateLink: tfs,
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoForce.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoForce.js
index 844d7dc9..175ee796 100644
--- a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoForce.js
+++ b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoForce.js
@@ -187,6 +187,35 @@
}
}
+ function moveHost(data) {
+ var id = data.id,
+ d = lu[id],
+ lnk;
+ if (d) {
+ // first remove the old host link
+ removeLinkElement(d.linkData);
+
+ // merge new data
+ angular.extend(d, data);
+ if (tms.positionNode(d, true)) {
+ sendUpdateMeta(d);
+ }
+
+ // now create a new host link
+ lnk = tms.createHostLink(data);
+ if (lnk) {
+ d.linkData = lnk;
+ network.links.push(lnk);
+ lu[d.ingress] = lnk;
+ lu[d.egress] = lnk;
+ }
+
+ updateNodes();
+ updateLinks();
+ fResume();
+ }
+ }
+
function removeHost(data) {
var id = data.id,
d = lu[id];
@@ -1142,6 +1171,7 @@
removeDevice: removeDevice,
addHost: addHost,
updateHost: updateHost,
+ moveHost: moveHost,
removeHost: removeHost,
addLink: addLink,
updateLink: updateLink,