diff --git a/network.metrics/src/metrics/embedding/ActiveSubstrateSwitchMetric.java b/network.metrics/src/metrics/embedding/ActiveSubstrateSwitchMetric.java
index 72c161f2..6d2db908 100644
--- a/network.metrics/src/metrics/embedding/ActiveSubstrateSwitchMetric.java
+++ b/network.metrics/src/metrics/embedding/ActiveSubstrateSwitchMetric.java
@@ -28,7 +28,7 @@ public ActiveSubstrateSwitchMetric(final SubstrateNetwork sNet) {
for (final Node n : facade.getAllSwitchesOfNetwork(sNet.getName())) {
final SubstrateSwitch sw = (SubstrateSwitch) n;
- if (!sw.getGuestSwitches().isEmpty() || !sw.getGuestLinks().isEmpty()) {
+ if (!sw.getGuestSwitches().isEmpty()) {
value++;
}
}
diff --git a/network.model/model/Model.ecore b/network.model/model/Model.ecore
index 07f1053b..7413ce96 100644
--- a/network.model/model/Model.ecore
+++ b/network.model/model/Model.ecore
@@ -137,12 +137,6 @@
-
-
-
-
-
@@ -173,7 +167,18 @@
-
+
+
+
+
+
+
+
+
+
+
+
@@ -213,7 +218,7 @@
-
+
@@ -230,7 +235,7 @@
-
+
@@ -335,8 +340,8 @@
-
+
diff --git a/network.model/model/Model.emf b/network.model/model/Model.emf
index 9d31e331..02b64507 100644
--- a/network.model/model/Model.emf
+++ b/network.model/model/Model.emf
@@ -74,10 +74,7 @@ abstract class Network extends Element {
}
@GenModel(documentation="Abstract class that represents a substrate element.")
-abstract class SubstrateElement extends Element {
- // Keep in mind: The host element must not be a switch!
- @GenModel(documentation="Virtual guest links.")
- ref VirtualLink [*]#host guestLinks;
+abstract class SubstrateElement extends Element {
}
@GenModel(documentation="Abstract class that represents a substrate node.")
@@ -95,8 +92,14 @@ abstract class SubstrateNode extends Node, SubstrateElement {
ref SubstratePath [*]#target incomingPaths;
}
+@GenModel(documentation="Abstract class that can host a virtual link.")
+abstract class SubstrateHostLink extends SubstrateElement {
+ @GenModel(documentation="Virtual guest links.")
+ ref VirtualLink [*]#host guestLinks;
+}
+
@GenModel(documentation="Class that represents a substrate server.")
-class SubstrateServer extends Server, SubstrateNode {
+class SubstrateServer extends Server, SubstrateNode, SubstrateHostLink {
@GenModel(documentation="Virtual guest servers.")
ref VirtualServer [*]#host guestServers;
@@ -120,7 +123,7 @@ class SubstrateSwitch extends Switch, SubstrateNode {
}
@GenModel(documentation="Class that represents a substrate link.")
-class SubstrateLink extends Link, SubstrateElement {
+class SubstrateLink extends Link, SubstrateElement, SubstrateHostLink {
@GenModel(documentation="Residual bandwidth amount of this link.")
attr EInt [1] residualBandwidth;
@@ -129,7 +132,7 @@ class SubstrateLink extends Link, SubstrateElement {
}
@GenModel(documentation="Class that represents a substrate path.")
-class SubstratePath extends SubstrateElement {
+class SubstratePath extends SubstrateElement, SubstrateHostLink {
@GenModel(documentation="Network this path belongs to.")
ref SubstrateNetwork [1]#paths network;
@@ -188,9 +191,8 @@ class VirtualSwitch extends Switch, VirtualNode {
@GenModel(documentation="Class that represents a virtual link.")
class VirtualLink extends Link, VirtualElement {
- // Keep in mind: The host element must not be a switch!
@GenModel(documentation="Substrate host element.")
- ref SubstrateElement [1]#guestLinks host;
+ ref SubstrateHostLink [1]#guestLinks host;
}
@GenModel(documentation="Represents a virtual network.")
diff --git a/network.model/src/facade/ModelFacade.java b/network.model/src/facade/ModelFacade.java
index a4420312..13bd21e8 100644
--- a/network.model/src/facade/ModelFacade.java
+++ b/network.model/src/facade/ModelFacade.java
@@ -25,7 +25,7 @@
import model.Node;
import model.Root;
import model.Server;
-import model.SubstrateElement;
+import model.SubstrateHostLink;
import model.SubstrateLink;
import model.SubstrateNetwork;
import model.SubstrateNode;
@@ -1269,7 +1269,7 @@ public void unembedVirtualNetwork(final VirtualNetwork vNet) {
for (final Link l : vNet.getLinks()) {
final VirtualLink vl = (VirtualLink) l;
- final SubstrateElement host = vl.getHost();
+ final SubstrateHostLink host = vl.getHost();
if (host == null) {
continue;
}