From e0bfc4cdf4c8d533930598796e7aa3c803cb1f35 Mon Sep 17 00:00:00 2001
From: Stefan Herrnleben <s.herrnleben@syslex.de>
Date: Tue, 25 Jul 2017 18:36:53 +0200
Subject: [PATCH] add interface Identifier to TypedEntity to enable auto
 generated UID

---
 tools.descartes.dni.core/model/DNIMM3.xcore   |   7 +-
 .../descartes/dni/dnimm3/DNIPackage.java      | 164 +++++++++++++++++-
 .../descartes/dni/dnimm3/ITypedEntity.java    |   2 +-
 .../dni/dnimm3/impl/DNIPackageImpl.java       |   1 +
 .../dnimm3/impl/EndPerformanceTypeImpl.java   | 151 ++++++++++++++++
 .../impl/IntermediatePerformanceTypeImpl.java | 151 ++++++++++++++++
 .../dnimm3/impl/LinkPerformanceTypeImpl.java  | 151 ++++++++++++++++
 .../dni/dnimm3/impl/LinkTypeImpl.java         | 151 ++++++++++++++++
 .../NetworkInterfacePerformanceTypeImpl.java  | 151 ++++++++++++++++
 .../dnimm3/impl/NetworkInterfaceTypeImpl.java | 151 ++++++++++++++++
 .../dni/dnimm3/impl/NodeTypeImpl.java         | 151 ++++++++++++++++
 .../impl/SdnNodePerformanceTypeImpl.java      | 151 ++++++++++++++++
 .../EndPerformanceTypeItemProvider.java       |  48 +++++
 ...termediatePerformanceTypeItemProvider.java |  48 +++++
 .../LinkPerformanceTypeItemProvider.java      |  48 +++++
 .../dnimm3/provider/LinkTypeItemProvider.java |  48 +++++
 ...kInterfacePerformanceTypeItemProvider.java |  48 +++++
 .../NetworkInterfaceTypeItemProvider.java     |  48 +++++
 .../dnimm3/provider/NodeTypeItemProvider.java |  48 +++++
 .../SdnNodePerformanceTypeItemProvider.java   |  48 +++++
 .../descartes/dni/dnimm3/util/DNISwitch.java  |   9 +
 21 files changed, 1769 insertions(+), 6 deletions(-)

diff --git a/tools.descartes.dni.core/model/DNIMM3.xcore b/tools.descartes.dni.core/model/DNIMM3.xcore
index b138be7a..b5d9a878 100644
--- a/tools.descartes.dni.core/model/DNIMM3.xcore
+++ b/tools.descartes.dni.core/model/DNIMM3.xcore
@@ -2,9 +2,8 @@
 @Ecore(invocationDelegates="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot",
 	settingDelegates="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot",
 	validationDelegates="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot")
-@GenModel(modelDirectory="/tools.descartes.dni.core/src",
-	editDirectory="/tools.descartes.dni.core/src", editorDirectory="/tools.descartes.dni.core/src",
-	fileExtensions="dni", prefix="DNI")
+@GenModel(modelDirectory="/tools.descartes.dni.core/src", editDirectory="/tools.descartes.dni.core/src",
+	editorDirectory="/tools.descartes.dni.core/src", fileExtensions="dni", prefix="DNI")
 package tools.descartes.dni.dnimm3
 
 import org.eclipse.emf.ecore.util.EcoreUtil
@@ -433,7 +432,7 @@ class EntityTypes {
 	contains ITypedEntity[] types
 }
 
-interface ITypedEntity extends NamedElement {
+interface ITypedEntity extends NamedElement, Identifier {
 }
 
 class NodeType extends ITypedEntity {
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/DNIPackage.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/DNIPackage.java
index 227bc10d..56bfef33 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/DNIPackage.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/DNIPackage.java
@@ -3896,6 +3896,24 @@ public interface DNIPackage extends EPackage {
 	 */
 	int ITYPED_ENTITY__DESCRIPTION = NAMED_ELEMENT__DESCRIPTION;
 
+	/**
+	 * The feature id for the '<em><b>Uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ITYPED_ENTITY__UID = NAMED_ELEMENT_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Uid generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ITYPED_ENTITY__UID_GENERATED = NAMED_ELEMENT_FEATURE_COUNT + 1;
+
 	/**
 	 * The number of structural features of the '<em>ITyped Entity</em>' class.
 	 * <!-- begin-user-doc -->
@@ -3903,7 +3921,7 @@ public interface DNIPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int ITYPED_ENTITY_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 0;
+	int ITYPED_ENTITY_FEATURE_COUNT = NAMED_ELEMENT_FEATURE_COUNT + 2;
 
 	/**
 	 * The number of operations of the '<em>ITyped Entity</em>' class.
@@ -3942,6 +3960,24 @@ public interface DNIPackage extends EPackage {
 	 */
 	int NODE_TYPE__DESCRIPTION = ITYPED_ENTITY__DESCRIPTION;
 
+	/**
+	 * The feature id for the '<em><b>Uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_TYPE__UID = ITYPED_ENTITY__UID;
+
+	/**
+	 * The feature id for the '<em><b>Uid generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NODE_TYPE__UID_GENERATED = ITYPED_ENTITY__UID_GENERATED;
+
 	/**
 	 * The feature id for the '<em><b>Entities</b></em>' reference list.
 	 * <!-- begin-user-doc -->
@@ -3997,6 +4033,24 @@ public interface DNIPackage extends EPackage {
 	 */
 	int END_PERFORMANCE_TYPE__DESCRIPTION = ITYPED_ENTITY__DESCRIPTION;
 
+	/**
+	 * The feature id for the '<em><b>Uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int END_PERFORMANCE_TYPE__UID = ITYPED_ENTITY__UID;
+
+	/**
+	 * The feature id for the '<em><b>Uid generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int END_PERFORMANCE_TYPE__UID_GENERATED = ITYPED_ENTITY__UID_GENERATED;
+
 	/**
 	 * The feature id for the '<em><b>Entities</b></em>' reference list.
 	 * <!-- begin-user-doc -->
@@ -4052,6 +4106,24 @@ public interface DNIPackage extends EPackage {
 	 */
 	int INTERMEDIATE_PERFORMANCE_TYPE__DESCRIPTION = ITYPED_ENTITY__DESCRIPTION;
 
+	/**
+	 * The feature id for the '<em><b>Uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTERMEDIATE_PERFORMANCE_TYPE__UID = ITYPED_ENTITY__UID;
+
+	/**
+	 * The feature id for the '<em><b>Uid generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int INTERMEDIATE_PERFORMANCE_TYPE__UID_GENERATED = ITYPED_ENTITY__UID_GENERATED;
+
 	/**
 	 * The feature id for the '<em><b>Entities</b></em>' reference list.
 	 * <!-- begin-user-doc -->
@@ -4107,6 +4179,24 @@ public interface DNIPackage extends EPackage {
 	 */
 	int SDN_NODE_PERFORMANCE_TYPE__DESCRIPTION = ITYPED_ENTITY__DESCRIPTION;
 
+	/**
+	 * The feature id for the '<em><b>Uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SDN_NODE_PERFORMANCE_TYPE__UID = ITYPED_ENTITY__UID;
+
+	/**
+	 * The feature id for the '<em><b>Uid generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SDN_NODE_PERFORMANCE_TYPE__UID_GENERATED = ITYPED_ENTITY__UID_GENERATED;
+
 	/**
 	 * The feature id for the '<em><b>Entities</b></em>' reference list.
 	 * <!-- begin-user-doc -->
@@ -4162,6 +4252,24 @@ public interface DNIPackage extends EPackage {
 	 */
 	int NETWORK_INTERFACE_TYPE__DESCRIPTION = ITYPED_ENTITY__DESCRIPTION;
 
+	/**
+	 * The feature id for the '<em><b>Uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NETWORK_INTERFACE_TYPE__UID = ITYPED_ENTITY__UID;
+
+	/**
+	 * The feature id for the '<em><b>Uid generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NETWORK_INTERFACE_TYPE__UID_GENERATED = ITYPED_ENTITY__UID_GENERATED;
+
 	/**
 	 * The feature id for the '<em><b>Entities</b></em>' reference list.
 	 * <!-- begin-user-doc -->
@@ -4217,6 +4325,24 @@ public interface DNIPackage extends EPackage {
 	 */
 	int NETWORK_INTERFACE_PERFORMANCE_TYPE__DESCRIPTION = ITYPED_ENTITY__DESCRIPTION;
 
+	/**
+	 * The feature id for the '<em><b>Uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NETWORK_INTERFACE_PERFORMANCE_TYPE__UID = ITYPED_ENTITY__UID;
+
+	/**
+	 * The feature id for the '<em><b>Uid generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NETWORK_INTERFACE_PERFORMANCE_TYPE__UID_GENERATED = ITYPED_ENTITY__UID_GENERATED;
+
 	/**
 	 * The feature id for the '<em><b>Entities</b></em>' reference list.
 	 * <!-- begin-user-doc -->
@@ -4272,6 +4398,24 @@ public interface DNIPackage extends EPackage {
 	 */
 	int LINK_TYPE__DESCRIPTION = ITYPED_ENTITY__DESCRIPTION;
 
+	/**
+	 * The feature id for the '<em><b>Uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LINK_TYPE__UID = ITYPED_ENTITY__UID;
+
+	/**
+	 * The feature id for the '<em><b>Uid generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LINK_TYPE__UID_GENERATED = ITYPED_ENTITY__UID_GENERATED;
+
 	/**
 	 * The feature id for the '<em><b>Entities</b></em>' reference list.
 	 * <!-- begin-user-doc -->
@@ -4327,6 +4471,24 @@ public interface DNIPackage extends EPackage {
 	 */
 	int LINK_PERFORMANCE_TYPE__DESCRIPTION = ITYPED_ENTITY__DESCRIPTION;
 
+	/**
+	 * The feature id for the '<em><b>Uid</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LINK_PERFORMANCE_TYPE__UID = ITYPED_ENTITY__UID;
+
+	/**
+	 * The feature id for the '<em><b>Uid generated</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LINK_PERFORMANCE_TYPE__UID_GENERATED = ITYPED_ENTITY__UID_GENERATED;
+
 	/**
 	 * The feature id for the '<em><b>Entities</b></em>' reference list.
 	 * <!-- begin-user-doc -->
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/ITypedEntity.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/ITypedEntity.java
index aaee1fc7..4e943ff4 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/ITypedEntity.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/ITypedEntity.java
@@ -13,5 +13,5 @@ package tools.descartes.dni.dnimm3;
  * @model interface="true" abstract="true"
  * @generated
  */
-public interface ITypedEntity extends NamedElement {
+public interface ITypedEntity extends NamedElement, Identifier {
 } // ITypedEntity
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/DNIPackageImpl.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/DNIPackageImpl.java
index 760c16f3..50aa37a8 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/DNIPackageImpl.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/DNIPackageImpl.java
@@ -3075,6 +3075,7 @@ public class DNIPackageImpl extends EPackageImpl implements DNIPackage {
 		discreteFunctionEClass.getESuperTypes().add(this.getFunction());
 		exponentialFunctionEClass.getESuperTypes().add(this.getFunction());
 		iTypedEntityEClass.getESuperTypes().add(this.getNamedElement());
+		iTypedEntityEClass.getESuperTypes().add(this.getIdentifier());
 		nodeTypeEClass.getESuperTypes().add(this.getITypedEntity());
 		endPerformanceTypeEClass.getESuperTypes().add(this.getITypedEntity());
 		intermediatePerformanceTypeEClass.getESuperTypes().add(this.getITypedEntity());
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/EndPerformanceTypeImpl.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/EndPerformanceTypeImpl.java
index 9ac95d4e..388baf6f 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/EndPerformanceTypeImpl.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/EndPerformanceTypeImpl.java
@@ -16,11 +16,13 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import tools.descartes.dni.dnimm3.DNIPackage;
 import tools.descartes.dni.dnimm3.EndPerformance;
 import tools.descartes.dni.dnimm3.EndPerformanceType;
+import tools.descartes.dni.dnimm3.Identifier;
 
 /**
  * <!-- begin-user-doc -->
@@ -32,6 +34,8 @@ import tools.descartes.dni.dnimm3.EndPerformanceType;
  * <ul>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.EndPerformanceTypeImpl#getName <em>Name</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.EndPerformanceTypeImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.EndPerformanceTypeImpl#getUid <em>Uid</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.EndPerformanceTypeImpl#getUid_generated <em>Uid generated</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.EndPerformanceTypeImpl#getEntities <em>Entities</em>}</li>
  * </ul>
  *
@@ -78,6 +82,45 @@ public class EndPerformanceTypeImpl extends MinimalEObjectImpl.Container impleme
 	 */
 	protected String description = DESCRIPTION_EDEFAULT;
 
+	/**
+	 * The default value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uid = UID_EDEFAULT;
+
+	/**
+	 * This is true if the Uid attribute has been set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean uidESet;
+
+	/**
+	 * The default value of the '{@link #getUid_generated() <em>Uid generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid_generated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_GENERATED_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getEntities() <em>Entities</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -149,6 +192,64 @@ public class EndPerformanceTypeImpl extends MinimalEObjectImpl.Container impleme
 			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.END_PERFORMANCE_TYPE__DESCRIPTION, oldDescription, description));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid() {
+		return uid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUid(String newUid) {
+		String oldUid = uid;
+		uid = newUid;
+		boolean oldUidESet = uidESet;
+		uidESet = true;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.END_PERFORMANCE_TYPE__UID, oldUid, uid, !oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void unsetUid() {
+		String oldUid = uid;
+		boolean oldUidESet = uidESet;
+		uid = UID_EDEFAULT;
+		uidESet = false;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.UNSET, DNIPackage.END_PERFORMANCE_TYPE__UID, oldUid, UID_EDEFAULT, oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetUid() {
+		return uidESet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid_generated() {
+		if (((this.getUid() == null) || this.getUid().isEmpty())) {
+			this.setUid(EcoreUtil.generateUUID().toString());
+		}
+		return this.getUid();
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -202,6 +303,10 @@ public class EndPerformanceTypeImpl extends MinimalEObjectImpl.Container impleme
 				return getName();
 			case DNIPackage.END_PERFORMANCE_TYPE__DESCRIPTION:
 				return getDescription();
+			case DNIPackage.END_PERFORMANCE_TYPE__UID:
+				return getUid();
+			case DNIPackage.END_PERFORMANCE_TYPE__UID_GENERATED:
+				return getUid_generated();
 			case DNIPackage.END_PERFORMANCE_TYPE__ENTITIES:
 				return getEntities();
 		}
@@ -223,6 +328,9 @@ public class EndPerformanceTypeImpl extends MinimalEObjectImpl.Container impleme
 			case DNIPackage.END_PERFORMANCE_TYPE__DESCRIPTION:
 				setDescription((String)newValue);
 				return;
+			case DNIPackage.END_PERFORMANCE_TYPE__UID:
+				setUid((String)newValue);
+				return;
 			case DNIPackage.END_PERFORMANCE_TYPE__ENTITIES:
 				getEntities().clear();
 				getEntities().addAll((Collection<? extends EndPerformance>)newValue);
@@ -245,6 +353,9 @@ public class EndPerformanceTypeImpl extends MinimalEObjectImpl.Container impleme
 			case DNIPackage.END_PERFORMANCE_TYPE__DESCRIPTION:
 				setDescription(DESCRIPTION_EDEFAULT);
 				return;
+			case DNIPackage.END_PERFORMANCE_TYPE__UID:
+				unsetUid();
+				return;
 			case DNIPackage.END_PERFORMANCE_TYPE__ENTITIES:
 				getEntities().clear();
 				return;
@@ -264,12 +375,50 @@ public class EndPerformanceTypeImpl extends MinimalEObjectImpl.Container impleme
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case DNIPackage.END_PERFORMANCE_TYPE__DESCRIPTION:
 				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+			case DNIPackage.END_PERFORMANCE_TYPE__UID:
+				return isSetUid();
+			case DNIPackage.END_PERFORMANCE_TYPE__UID_GENERATED:
+				return UID_GENERATED_EDEFAULT == null ? getUid_generated() != null : !UID_GENERATED_EDEFAULT.equals(getUid_generated());
 			case DNIPackage.END_PERFORMANCE_TYPE__ENTITIES:
 				return entities != null && !entities.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (derivedFeatureID) {
+				case DNIPackage.END_PERFORMANCE_TYPE__UID: return DNIPackage.IDENTIFIER__UID;
+				case DNIPackage.END_PERFORMANCE_TYPE__UID_GENERATED: return DNIPackage.IDENTIFIER__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (baseFeatureID) {
+				case DNIPackage.IDENTIFIER__UID: return DNIPackage.END_PERFORMANCE_TYPE__UID;
+				case DNIPackage.IDENTIFIER__UID_GENERATED: return DNIPackage.END_PERFORMANCE_TYPE__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -284,6 +433,8 @@ public class EndPerformanceTypeImpl extends MinimalEObjectImpl.Container impleme
 		result.append(name);
 		result.append(", description: ");
 		result.append(description);
+		result.append(", uid: ");
+		if (uidESet) result.append(uid); else result.append("<unset>");
 		result.append(')');
 		return result.toString();
 	}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/IntermediatePerformanceTypeImpl.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/IntermediatePerformanceTypeImpl.java
index ca0ab1b0..3da4144c 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/IntermediatePerformanceTypeImpl.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/IntermediatePerformanceTypeImpl.java
@@ -16,9 +16,11 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import tools.descartes.dni.dnimm3.DNIPackage;
+import tools.descartes.dni.dnimm3.Identifier;
 import tools.descartes.dni.dnimm3.IntermediatePerformance;
 import tools.descartes.dni.dnimm3.IntermediatePerformanceType;
 
@@ -32,6 +34,8 @@ import tools.descartes.dni.dnimm3.IntermediatePerformanceType;
  * <ul>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.IntermediatePerformanceTypeImpl#getName <em>Name</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.IntermediatePerformanceTypeImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.IntermediatePerformanceTypeImpl#getUid <em>Uid</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.IntermediatePerformanceTypeImpl#getUid_generated <em>Uid generated</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.IntermediatePerformanceTypeImpl#getEntities <em>Entities</em>}</li>
  * </ul>
  *
@@ -78,6 +82,45 @@ public class IntermediatePerformanceTypeImpl extends MinimalEObjectImpl.Containe
 	 */
 	protected String description = DESCRIPTION_EDEFAULT;
 
+	/**
+	 * The default value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uid = UID_EDEFAULT;
+
+	/**
+	 * This is true if the Uid attribute has been set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean uidESet;
+
+	/**
+	 * The default value of the '{@link #getUid_generated() <em>Uid generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid_generated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_GENERATED_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getEntities() <em>Entities</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -149,6 +192,64 @@ public class IntermediatePerformanceTypeImpl extends MinimalEObjectImpl.Containe
 			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__DESCRIPTION, oldDescription, description));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid() {
+		return uid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUid(String newUid) {
+		String oldUid = uid;
+		uid = newUid;
+		boolean oldUidESet = uidESet;
+		uidESet = true;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID, oldUid, uid, !oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void unsetUid() {
+		String oldUid = uid;
+		boolean oldUidESet = uidESet;
+		uid = UID_EDEFAULT;
+		uidESet = false;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.UNSET, DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID, oldUid, UID_EDEFAULT, oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetUid() {
+		return uidESet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid_generated() {
+		if (((this.getUid() == null) || this.getUid().isEmpty())) {
+			this.setUid(EcoreUtil.generateUUID().toString());
+		}
+		return this.getUid();
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -202,6 +303,10 @@ public class IntermediatePerformanceTypeImpl extends MinimalEObjectImpl.Containe
 				return getName();
 			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__DESCRIPTION:
 				return getDescription();
+			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID:
+				return getUid();
+			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID_GENERATED:
+				return getUid_generated();
 			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__ENTITIES:
 				return getEntities();
 		}
@@ -223,6 +328,9 @@ public class IntermediatePerformanceTypeImpl extends MinimalEObjectImpl.Containe
 			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__DESCRIPTION:
 				setDescription((String)newValue);
 				return;
+			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID:
+				setUid((String)newValue);
+				return;
 			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__ENTITIES:
 				getEntities().clear();
 				getEntities().addAll((Collection<? extends IntermediatePerformance>)newValue);
@@ -245,6 +353,9 @@ public class IntermediatePerformanceTypeImpl extends MinimalEObjectImpl.Containe
 			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__DESCRIPTION:
 				setDescription(DESCRIPTION_EDEFAULT);
 				return;
+			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID:
+				unsetUid();
+				return;
 			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__ENTITIES:
 				getEntities().clear();
 				return;
@@ -264,12 +375,50 @@ public class IntermediatePerformanceTypeImpl extends MinimalEObjectImpl.Containe
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__DESCRIPTION:
 				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID:
+				return isSetUid();
+			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID_GENERATED:
+				return UID_GENERATED_EDEFAULT == null ? getUid_generated() != null : !UID_GENERATED_EDEFAULT.equals(getUid_generated());
 			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__ENTITIES:
 				return entities != null && !entities.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (derivedFeatureID) {
+				case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID: return DNIPackage.IDENTIFIER__UID;
+				case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID_GENERATED: return DNIPackage.IDENTIFIER__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (baseFeatureID) {
+				case DNIPackage.IDENTIFIER__UID: return DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID;
+				case DNIPackage.IDENTIFIER__UID_GENERATED: return DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -284,6 +433,8 @@ public class IntermediatePerformanceTypeImpl extends MinimalEObjectImpl.Containe
 		result.append(name);
 		result.append(", description: ");
 		result.append(description);
+		result.append(", uid: ");
+		if (uidESet) result.append(uid); else result.append("<unset>");
 		result.append(')');
 		return result.toString();
 	}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/LinkPerformanceTypeImpl.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/LinkPerformanceTypeImpl.java
index c3ab6aea..eb9f8753 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/LinkPerformanceTypeImpl.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/LinkPerformanceTypeImpl.java
@@ -16,9 +16,11 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import tools.descartes.dni.dnimm3.DNIPackage;
+import tools.descartes.dni.dnimm3.Identifier;
 import tools.descartes.dni.dnimm3.LinkPerformanceType;
 import tools.descartes.dni.dnimm3.PerformanceLink;
 
@@ -32,6 +34,8 @@ import tools.descartes.dni.dnimm3.PerformanceLink;
  * <ul>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.LinkPerformanceTypeImpl#getName <em>Name</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.LinkPerformanceTypeImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.LinkPerformanceTypeImpl#getUid <em>Uid</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.LinkPerformanceTypeImpl#getUid_generated <em>Uid generated</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.LinkPerformanceTypeImpl#getEntities <em>Entities</em>}</li>
  * </ul>
  *
@@ -78,6 +82,45 @@ public class LinkPerformanceTypeImpl extends MinimalEObjectImpl.Container implem
 	 */
 	protected String description = DESCRIPTION_EDEFAULT;
 
+	/**
+	 * The default value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uid = UID_EDEFAULT;
+
+	/**
+	 * This is true if the Uid attribute has been set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean uidESet;
+
+	/**
+	 * The default value of the '{@link #getUid_generated() <em>Uid generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid_generated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_GENERATED_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getEntities() <em>Entities</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -149,6 +192,64 @@ public class LinkPerformanceTypeImpl extends MinimalEObjectImpl.Container implem
 			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.LINK_PERFORMANCE_TYPE__DESCRIPTION, oldDescription, description));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid() {
+		return uid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUid(String newUid) {
+		String oldUid = uid;
+		uid = newUid;
+		boolean oldUidESet = uidESet;
+		uidESet = true;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.LINK_PERFORMANCE_TYPE__UID, oldUid, uid, !oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void unsetUid() {
+		String oldUid = uid;
+		boolean oldUidESet = uidESet;
+		uid = UID_EDEFAULT;
+		uidESet = false;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.UNSET, DNIPackage.LINK_PERFORMANCE_TYPE__UID, oldUid, UID_EDEFAULT, oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetUid() {
+		return uidESet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid_generated() {
+		if (((this.getUid() == null) || this.getUid().isEmpty())) {
+			this.setUid(EcoreUtil.generateUUID().toString());
+		}
+		return this.getUid();
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -202,6 +303,10 @@ public class LinkPerformanceTypeImpl extends MinimalEObjectImpl.Container implem
 				return getName();
 			case DNIPackage.LINK_PERFORMANCE_TYPE__DESCRIPTION:
 				return getDescription();
+			case DNIPackage.LINK_PERFORMANCE_TYPE__UID:
+				return getUid();
+			case DNIPackage.LINK_PERFORMANCE_TYPE__UID_GENERATED:
+				return getUid_generated();
 			case DNIPackage.LINK_PERFORMANCE_TYPE__ENTITIES:
 				return getEntities();
 		}
@@ -223,6 +328,9 @@ public class LinkPerformanceTypeImpl extends MinimalEObjectImpl.Container implem
 			case DNIPackage.LINK_PERFORMANCE_TYPE__DESCRIPTION:
 				setDescription((String)newValue);
 				return;
+			case DNIPackage.LINK_PERFORMANCE_TYPE__UID:
+				setUid((String)newValue);
+				return;
 			case DNIPackage.LINK_PERFORMANCE_TYPE__ENTITIES:
 				getEntities().clear();
 				getEntities().addAll((Collection<? extends PerformanceLink>)newValue);
@@ -245,6 +353,9 @@ public class LinkPerformanceTypeImpl extends MinimalEObjectImpl.Container implem
 			case DNIPackage.LINK_PERFORMANCE_TYPE__DESCRIPTION:
 				setDescription(DESCRIPTION_EDEFAULT);
 				return;
+			case DNIPackage.LINK_PERFORMANCE_TYPE__UID:
+				unsetUid();
+				return;
 			case DNIPackage.LINK_PERFORMANCE_TYPE__ENTITIES:
 				getEntities().clear();
 				return;
@@ -264,12 +375,50 @@ public class LinkPerformanceTypeImpl extends MinimalEObjectImpl.Container implem
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case DNIPackage.LINK_PERFORMANCE_TYPE__DESCRIPTION:
 				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+			case DNIPackage.LINK_PERFORMANCE_TYPE__UID:
+				return isSetUid();
+			case DNIPackage.LINK_PERFORMANCE_TYPE__UID_GENERATED:
+				return UID_GENERATED_EDEFAULT == null ? getUid_generated() != null : !UID_GENERATED_EDEFAULT.equals(getUid_generated());
 			case DNIPackage.LINK_PERFORMANCE_TYPE__ENTITIES:
 				return entities != null && !entities.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (derivedFeatureID) {
+				case DNIPackage.LINK_PERFORMANCE_TYPE__UID: return DNIPackage.IDENTIFIER__UID;
+				case DNIPackage.LINK_PERFORMANCE_TYPE__UID_GENERATED: return DNIPackage.IDENTIFIER__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (baseFeatureID) {
+				case DNIPackage.IDENTIFIER__UID: return DNIPackage.LINK_PERFORMANCE_TYPE__UID;
+				case DNIPackage.IDENTIFIER__UID_GENERATED: return DNIPackage.LINK_PERFORMANCE_TYPE__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -284,6 +433,8 @@ public class LinkPerformanceTypeImpl extends MinimalEObjectImpl.Container implem
 		result.append(name);
 		result.append(", description: ");
 		result.append(description);
+		result.append(", uid: ");
+		if (uidESet) result.append(uid); else result.append("<unset>");
 		result.append(')');
 		return result.toString();
 	}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/LinkTypeImpl.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/LinkTypeImpl.java
index 02daa55c..5ca4c2bf 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/LinkTypeImpl.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/LinkTypeImpl.java
@@ -16,9 +16,11 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import tools.descartes.dni.dnimm3.DNIPackage;
+import tools.descartes.dni.dnimm3.Identifier;
 import tools.descartes.dni.dnimm3.Link;
 import tools.descartes.dni.dnimm3.LinkType;
 
@@ -32,6 +34,8 @@ import tools.descartes.dni.dnimm3.LinkType;
  * <ul>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.LinkTypeImpl#getName <em>Name</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.LinkTypeImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.LinkTypeImpl#getUid <em>Uid</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.LinkTypeImpl#getUid_generated <em>Uid generated</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.LinkTypeImpl#getEntities <em>Entities</em>}</li>
  * </ul>
  *
@@ -78,6 +82,45 @@ public class LinkTypeImpl extends MinimalEObjectImpl.Container implements LinkTy
 	 */
 	protected String description = DESCRIPTION_EDEFAULT;
 
+	/**
+	 * The default value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uid = UID_EDEFAULT;
+
+	/**
+	 * This is true if the Uid attribute has been set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean uidESet;
+
+	/**
+	 * The default value of the '{@link #getUid_generated() <em>Uid generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid_generated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_GENERATED_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getEntities() <em>Entities</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -149,6 +192,64 @@ public class LinkTypeImpl extends MinimalEObjectImpl.Container implements LinkTy
 			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.LINK_TYPE__DESCRIPTION, oldDescription, description));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid() {
+		return uid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUid(String newUid) {
+		String oldUid = uid;
+		uid = newUid;
+		boolean oldUidESet = uidESet;
+		uidESet = true;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.LINK_TYPE__UID, oldUid, uid, !oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void unsetUid() {
+		String oldUid = uid;
+		boolean oldUidESet = uidESet;
+		uid = UID_EDEFAULT;
+		uidESet = false;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.UNSET, DNIPackage.LINK_TYPE__UID, oldUid, UID_EDEFAULT, oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetUid() {
+		return uidESet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid_generated() {
+		if (((this.getUid() == null) || this.getUid().isEmpty())) {
+			this.setUid(EcoreUtil.generateUUID().toString());
+		}
+		return this.getUid();
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -202,6 +303,10 @@ public class LinkTypeImpl extends MinimalEObjectImpl.Container implements LinkTy
 				return getName();
 			case DNIPackage.LINK_TYPE__DESCRIPTION:
 				return getDescription();
+			case DNIPackage.LINK_TYPE__UID:
+				return getUid();
+			case DNIPackage.LINK_TYPE__UID_GENERATED:
+				return getUid_generated();
 			case DNIPackage.LINK_TYPE__ENTITIES:
 				return getEntities();
 		}
@@ -223,6 +328,9 @@ public class LinkTypeImpl extends MinimalEObjectImpl.Container implements LinkTy
 			case DNIPackage.LINK_TYPE__DESCRIPTION:
 				setDescription((String)newValue);
 				return;
+			case DNIPackage.LINK_TYPE__UID:
+				setUid((String)newValue);
+				return;
 			case DNIPackage.LINK_TYPE__ENTITIES:
 				getEntities().clear();
 				getEntities().addAll((Collection<? extends Link>)newValue);
@@ -245,6 +353,9 @@ public class LinkTypeImpl extends MinimalEObjectImpl.Container implements LinkTy
 			case DNIPackage.LINK_TYPE__DESCRIPTION:
 				setDescription(DESCRIPTION_EDEFAULT);
 				return;
+			case DNIPackage.LINK_TYPE__UID:
+				unsetUid();
+				return;
 			case DNIPackage.LINK_TYPE__ENTITIES:
 				getEntities().clear();
 				return;
@@ -264,12 +375,50 @@ public class LinkTypeImpl extends MinimalEObjectImpl.Container implements LinkTy
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case DNIPackage.LINK_TYPE__DESCRIPTION:
 				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+			case DNIPackage.LINK_TYPE__UID:
+				return isSetUid();
+			case DNIPackage.LINK_TYPE__UID_GENERATED:
+				return UID_GENERATED_EDEFAULT == null ? getUid_generated() != null : !UID_GENERATED_EDEFAULT.equals(getUid_generated());
 			case DNIPackage.LINK_TYPE__ENTITIES:
 				return entities != null && !entities.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (derivedFeatureID) {
+				case DNIPackage.LINK_TYPE__UID: return DNIPackage.IDENTIFIER__UID;
+				case DNIPackage.LINK_TYPE__UID_GENERATED: return DNIPackage.IDENTIFIER__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (baseFeatureID) {
+				case DNIPackage.IDENTIFIER__UID: return DNIPackage.LINK_TYPE__UID;
+				case DNIPackage.IDENTIFIER__UID_GENERATED: return DNIPackage.LINK_TYPE__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -284,6 +433,8 @@ public class LinkTypeImpl extends MinimalEObjectImpl.Container implements LinkTy
 		result.append(name);
 		result.append(", description: ");
 		result.append(description);
+		result.append(", uid: ");
+		if (uidESet) result.append(uid); else result.append("<unset>");
 		result.append(')');
 		return result.toString();
 	}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NetworkInterfacePerformanceTypeImpl.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NetworkInterfacePerformanceTypeImpl.java
index ca9d3ac3..b7270732 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NetworkInterfacePerformanceTypeImpl.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NetworkInterfacePerformanceTypeImpl.java
@@ -16,9 +16,11 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import tools.descartes.dni.dnimm3.DNIPackage;
+import tools.descartes.dni.dnimm3.Identifier;
 import tools.descartes.dni.dnimm3.NetworkInterfacePerformanceType;
 import tools.descartes.dni.dnimm3.PerformanceNetworkInterface;
 
@@ -32,6 +34,8 @@ import tools.descartes.dni.dnimm3.PerformanceNetworkInterface;
  * <ul>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.NetworkInterfacePerformanceTypeImpl#getName <em>Name</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.NetworkInterfacePerformanceTypeImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.NetworkInterfacePerformanceTypeImpl#getUid <em>Uid</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.NetworkInterfacePerformanceTypeImpl#getUid_generated <em>Uid generated</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.NetworkInterfacePerformanceTypeImpl#getEntities <em>Entities</em>}</li>
  * </ul>
  *
@@ -78,6 +82,45 @@ public class NetworkInterfacePerformanceTypeImpl extends MinimalEObjectImpl.Cont
 	 */
 	protected String description = DESCRIPTION_EDEFAULT;
 
+	/**
+	 * The default value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uid = UID_EDEFAULT;
+
+	/**
+	 * This is true if the Uid attribute has been set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean uidESet;
+
+	/**
+	 * The default value of the '{@link #getUid_generated() <em>Uid generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid_generated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_GENERATED_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getEntities() <em>Entities</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -149,6 +192,64 @@ public class NetworkInterfacePerformanceTypeImpl extends MinimalEObjectImpl.Cont
 			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__DESCRIPTION, oldDescription, description));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid() {
+		return uid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUid(String newUid) {
+		String oldUid = uid;
+		uid = newUid;
+		boolean oldUidESet = uidESet;
+		uidESet = true;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID, oldUid, uid, !oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void unsetUid() {
+		String oldUid = uid;
+		boolean oldUidESet = uidESet;
+		uid = UID_EDEFAULT;
+		uidESet = false;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.UNSET, DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID, oldUid, UID_EDEFAULT, oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetUid() {
+		return uidESet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid_generated() {
+		if (((this.getUid() == null) || this.getUid().isEmpty())) {
+			this.setUid(EcoreUtil.generateUUID().toString());
+		}
+		return this.getUid();
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -202,6 +303,10 @@ public class NetworkInterfacePerformanceTypeImpl extends MinimalEObjectImpl.Cont
 				return getName();
 			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__DESCRIPTION:
 				return getDescription();
+			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID:
+				return getUid();
+			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID_GENERATED:
+				return getUid_generated();
 			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__ENTITIES:
 				return getEntities();
 		}
@@ -223,6 +328,9 @@ public class NetworkInterfacePerformanceTypeImpl extends MinimalEObjectImpl.Cont
 			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__DESCRIPTION:
 				setDescription((String)newValue);
 				return;
+			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID:
+				setUid((String)newValue);
+				return;
 			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__ENTITIES:
 				getEntities().clear();
 				getEntities().addAll((Collection<? extends PerformanceNetworkInterface>)newValue);
@@ -245,6 +353,9 @@ public class NetworkInterfacePerformanceTypeImpl extends MinimalEObjectImpl.Cont
 			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__DESCRIPTION:
 				setDescription(DESCRIPTION_EDEFAULT);
 				return;
+			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID:
+				unsetUid();
+				return;
 			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__ENTITIES:
 				getEntities().clear();
 				return;
@@ -264,12 +375,50 @@ public class NetworkInterfacePerformanceTypeImpl extends MinimalEObjectImpl.Cont
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__DESCRIPTION:
 				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID:
+				return isSetUid();
+			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID_GENERATED:
+				return UID_GENERATED_EDEFAULT == null ? getUid_generated() != null : !UID_GENERATED_EDEFAULT.equals(getUid_generated());
 			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__ENTITIES:
 				return entities != null && !entities.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (derivedFeatureID) {
+				case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID: return DNIPackage.IDENTIFIER__UID;
+				case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID_GENERATED: return DNIPackage.IDENTIFIER__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (baseFeatureID) {
+				case DNIPackage.IDENTIFIER__UID: return DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID;
+				case DNIPackage.IDENTIFIER__UID_GENERATED: return DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -284,6 +433,8 @@ public class NetworkInterfacePerformanceTypeImpl extends MinimalEObjectImpl.Cont
 		result.append(name);
 		result.append(", description: ");
 		result.append(description);
+		result.append(", uid: ");
+		if (uidESet) result.append(uid); else result.append("<unset>");
 		result.append(')');
 		return result.toString();
 	}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NetworkInterfaceTypeImpl.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NetworkInterfaceTypeImpl.java
index 71491b55..32c2033d 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NetworkInterfaceTypeImpl.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NetworkInterfaceTypeImpl.java
@@ -16,9 +16,11 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import tools.descartes.dni.dnimm3.DNIPackage;
+import tools.descartes.dni.dnimm3.Identifier;
 import tools.descartes.dni.dnimm3.NetworkInterface;
 import tools.descartes.dni.dnimm3.NetworkInterfaceType;
 
@@ -32,6 +34,8 @@ import tools.descartes.dni.dnimm3.NetworkInterfaceType;
  * <ul>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.NetworkInterfaceTypeImpl#getName <em>Name</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.NetworkInterfaceTypeImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.NetworkInterfaceTypeImpl#getUid <em>Uid</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.NetworkInterfaceTypeImpl#getUid_generated <em>Uid generated</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.NetworkInterfaceTypeImpl#getEntities <em>Entities</em>}</li>
  * </ul>
  *
@@ -78,6 +82,45 @@ public class NetworkInterfaceTypeImpl extends MinimalEObjectImpl.Container imple
 	 */
 	protected String description = DESCRIPTION_EDEFAULT;
 
+	/**
+	 * The default value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uid = UID_EDEFAULT;
+
+	/**
+	 * This is true if the Uid attribute has been set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean uidESet;
+
+	/**
+	 * The default value of the '{@link #getUid_generated() <em>Uid generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid_generated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_GENERATED_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getEntities() <em>Entities</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -149,6 +192,64 @@ public class NetworkInterfaceTypeImpl extends MinimalEObjectImpl.Container imple
 			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.NETWORK_INTERFACE_TYPE__DESCRIPTION, oldDescription, description));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid() {
+		return uid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUid(String newUid) {
+		String oldUid = uid;
+		uid = newUid;
+		boolean oldUidESet = uidESet;
+		uidESet = true;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.NETWORK_INTERFACE_TYPE__UID, oldUid, uid, !oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void unsetUid() {
+		String oldUid = uid;
+		boolean oldUidESet = uidESet;
+		uid = UID_EDEFAULT;
+		uidESet = false;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.UNSET, DNIPackage.NETWORK_INTERFACE_TYPE__UID, oldUid, UID_EDEFAULT, oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetUid() {
+		return uidESet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid_generated() {
+		if (((this.getUid() == null) || this.getUid().isEmpty())) {
+			this.setUid(EcoreUtil.generateUUID().toString());
+		}
+		return this.getUid();
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -202,6 +303,10 @@ public class NetworkInterfaceTypeImpl extends MinimalEObjectImpl.Container imple
 				return getName();
 			case DNIPackage.NETWORK_INTERFACE_TYPE__DESCRIPTION:
 				return getDescription();
+			case DNIPackage.NETWORK_INTERFACE_TYPE__UID:
+				return getUid();
+			case DNIPackage.NETWORK_INTERFACE_TYPE__UID_GENERATED:
+				return getUid_generated();
 			case DNIPackage.NETWORK_INTERFACE_TYPE__ENTITIES:
 				return getEntities();
 		}
@@ -223,6 +328,9 @@ public class NetworkInterfaceTypeImpl extends MinimalEObjectImpl.Container imple
 			case DNIPackage.NETWORK_INTERFACE_TYPE__DESCRIPTION:
 				setDescription((String)newValue);
 				return;
+			case DNIPackage.NETWORK_INTERFACE_TYPE__UID:
+				setUid((String)newValue);
+				return;
 			case DNIPackage.NETWORK_INTERFACE_TYPE__ENTITIES:
 				getEntities().clear();
 				getEntities().addAll((Collection<? extends NetworkInterface>)newValue);
@@ -245,6 +353,9 @@ public class NetworkInterfaceTypeImpl extends MinimalEObjectImpl.Container imple
 			case DNIPackage.NETWORK_INTERFACE_TYPE__DESCRIPTION:
 				setDescription(DESCRIPTION_EDEFAULT);
 				return;
+			case DNIPackage.NETWORK_INTERFACE_TYPE__UID:
+				unsetUid();
+				return;
 			case DNIPackage.NETWORK_INTERFACE_TYPE__ENTITIES:
 				getEntities().clear();
 				return;
@@ -264,12 +375,50 @@ public class NetworkInterfaceTypeImpl extends MinimalEObjectImpl.Container imple
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case DNIPackage.NETWORK_INTERFACE_TYPE__DESCRIPTION:
 				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+			case DNIPackage.NETWORK_INTERFACE_TYPE__UID:
+				return isSetUid();
+			case DNIPackage.NETWORK_INTERFACE_TYPE__UID_GENERATED:
+				return UID_GENERATED_EDEFAULT == null ? getUid_generated() != null : !UID_GENERATED_EDEFAULT.equals(getUid_generated());
 			case DNIPackage.NETWORK_INTERFACE_TYPE__ENTITIES:
 				return entities != null && !entities.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (derivedFeatureID) {
+				case DNIPackage.NETWORK_INTERFACE_TYPE__UID: return DNIPackage.IDENTIFIER__UID;
+				case DNIPackage.NETWORK_INTERFACE_TYPE__UID_GENERATED: return DNIPackage.IDENTIFIER__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (baseFeatureID) {
+				case DNIPackage.IDENTIFIER__UID: return DNIPackage.NETWORK_INTERFACE_TYPE__UID;
+				case DNIPackage.IDENTIFIER__UID_GENERATED: return DNIPackage.NETWORK_INTERFACE_TYPE__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -284,6 +433,8 @@ public class NetworkInterfaceTypeImpl extends MinimalEObjectImpl.Container imple
 		result.append(name);
 		result.append(", description: ");
 		result.append(description);
+		result.append(", uid: ");
+		if (uidESet) result.append(uid); else result.append("<unset>");
 		result.append(')');
 		return result.toString();
 	}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NodeTypeImpl.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NodeTypeImpl.java
index 0affacd3..0716427f 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NodeTypeImpl.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/NodeTypeImpl.java
@@ -16,9 +16,11 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import tools.descartes.dni.dnimm3.DNIPackage;
+import tools.descartes.dni.dnimm3.Identifier;
 import tools.descartes.dni.dnimm3.Node;
 import tools.descartes.dni.dnimm3.NodeType;
 
@@ -32,6 +34,8 @@ import tools.descartes.dni.dnimm3.NodeType;
  * <ul>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.NodeTypeImpl#getName <em>Name</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.NodeTypeImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.NodeTypeImpl#getUid <em>Uid</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.NodeTypeImpl#getUid_generated <em>Uid generated</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.NodeTypeImpl#getEntities <em>Entities</em>}</li>
  * </ul>
  *
@@ -78,6 +82,45 @@ public class NodeTypeImpl extends MinimalEObjectImpl.Container implements NodeTy
 	 */
 	protected String description = DESCRIPTION_EDEFAULT;
 
+	/**
+	 * The default value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uid = UID_EDEFAULT;
+
+	/**
+	 * This is true if the Uid attribute has been set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean uidESet;
+
+	/**
+	 * The default value of the '{@link #getUid_generated() <em>Uid generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid_generated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_GENERATED_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getEntities() <em>Entities</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -149,6 +192,64 @@ public class NodeTypeImpl extends MinimalEObjectImpl.Container implements NodeTy
 			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.NODE_TYPE__DESCRIPTION, oldDescription, description));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid() {
+		return uid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUid(String newUid) {
+		String oldUid = uid;
+		uid = newUid;
+		boolean oldUidESet = uidESet;
+		uidESet = true;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.NODE_TYPE__UID, oldUid, uid, !oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void unsetUid() {
+		String oldUid = uid;
+		boolean oldUidESet = uidESet;
+		uid = UID_EDEFAULT;
+		uidESet = false;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.UNSET, DNIPackage.NODE_TYPE__UID, oldUid, UID_EDEFAULT, oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetUid() {
+		return uidESet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid_generated() {
+		if (((this.getUid() == null) || this.getUid().isEmpty())) {
+			this.setUid(EcoreUtil.generateUUID().toString());
+		}
+		return this.getUid();
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -202,6 +303,10 @@ public class NodeTypeImpl extends MinimalEObjectImpl.Container implements NodeTy
 				return getName();
 			case DNIPackage.NODE_TYPE__DESCRIPTION:
 				return getDescription();
+			case DNIPackage.NODE_TYPE__UID:
+				return getUid();
+			case DNIPackage.NODE_TYPE__UID_GENERATED:
+				return getUid_generated();
 			case DNIPackage.NODE_TYPE__ENTITIES:
 				return getEntities();
 		}
@@ -223,6 +328,9 @@ public class NodeTypeImpl extends MinimalEObjectImpl.Container implements NodeTy
 			case DNIPackage.NODE_TYPE__DESCRIPTION:
 				setDescription((String)newValue);
 				return;
+			case DNIPackage.NODE_TYPE__UID:
+				setUid((String)newValue);
+				return;
 			case DNIPackage.NODE_TYPE__ENTITIES:
 				getEntities().clear();
 				getEntities().addAll((Collection<? extends Node>)newValue);
@@ -245,6 +353,9 @@ public class NodeTypeImpl extends MinimalEObjectImpl.Container implements NodeTy
 			case DNIPackage.NODE_TYPE__DESCRIPTION:
 				setDescription(DESCRIPTION_EDEFAULT);
 				return;
+			case DNIPackage.NODE_TYPE__UID:
+				unsetUid();
+				return;
 			case DNIPackage.NODE_TYPE__ENTITIES:
 				getEntities().clear();
 				return;
@@ -264,12 +375,50 @@ public class NodeTypeImpl extends MinimalEObjectImpl.Container implements NodeTy
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case DNIPackage.NODE_TYPE__DESCRIPTION:
 				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+			case DNIPackage.NODE_TYPE__UID:
+				return isSetUid();
+			case DNIPackage.NODE_TYPE__UID_GENERATED:
+				return UID_GENERATED_EDEFAULT == null ? getUid_generated() != null : !UID_GENERATED_EDEFAULT.equals(getUid_generated());
 			case DNIPackage.NODE_TYPE__ENTITIES:
 				return entities != null && !entities.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (derivedFeatureID) {
+				case DNIPackage.NODE_TYPE__UID: return DNIPackage.IDENTIFIER__UID;
+				case DNIPackage.NODE_TYPE__UID_GENERATED: return DNIPackage.IDENTIFIER__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (baseFeatureID) {
+				case DNIPackage.IDENTIFIER__UID: return DNIPackage.NODE_TYPE__UID;
+				case DNIPackage.IDENTIFIER__UID_GENERATED: return DNIPackage.NODE_TYPE__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -284,6 +433,8 @@ public class NodeTypeImpl extends MinimalEObjectImpl.Container implements NodeTy
 		result.append(name);
 		result.append(", description: ");
 		result.append(description);
+		result.append(", uid: ");
+		if (uidESet) result.append(uid); else result.append("<unset>");
 		result.append(')');
 		return result.toString();
 	}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/SdnNodePerformanceTypeImpl.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/SdnNodePerformanceTypeImpl.java
index c072b0b7..e72966a2 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/SdnNodePerformanceTypeImpl.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/impl/SdnNodePerformanceTypeImpl.java
@@ -16,9 +16,11 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
 import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.util.InternalEList;
 
 import tools.descartes.dni.dnimm3.DNIPackage;
+import tools.descartes.dni.dnimm3.Identifier;
 import tools.descartes.dni.dnimm3.PerformanceSdnNode;
 import tools.descartes.dni.dnimm3.SdnNodePerformanceType;
 
@@ -32,6 +34,8 @@ import tools.descartes.dni.dnimm3.SdnNodePerformanceType;
  * <ul>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.SdnNodePerformanceTypeImpl#getName <em>Name</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.SdnNodePerformanceTypeImpl#getDescription <em>Description</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.SdnNodePerformanceTypeImpl#getUid <em>Uid</em>}</li>
+ *   <li>{@link tools.descartes.dni.dnimm3.impl.SdnNodePerformanceTypeImpl#getUid_generated <em>Uid generated</em>}</li>
  *   <li>{@link tools.descartes.dni.dnimm3.impl.SdnNodePerformanceTypeImpl#getEntities <em>Entities</em>}</li>
  * </ul>
  *
@@ -78,6 +82,45 @@ public class SdnNodePerformanceTypeImpl extends MinimalEObjectImpl.Container imp
 	 */
 	protected String description = DESCRIPTION_EDEFAULT;
 
+	/**
+	 * The default value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUid() <em>Uid</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uid = UID_EDEFAULT;
+
+	/**
+	 * This is true if the Uid attribute has been set.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean uidESet;
+
+	/**
+	 * The default value of the '{@link #getUid_generated() <em>Uid generated</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUid_generated()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String UID_GENERATED_EDEFAULT = null;
+
 	/**
 	 * The cached value of the '{@link #getEntities() <em>Entities</em>}' reference list.
 	 * <!-- begin-user-doc -->
@@ -149,6 +192,64 @@ public class SdnNodePerformanceTypeImpl extends MinimalEObjectImpl.Container imp
 			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.SDN_NODE_PERFORMANCE_TYPE__DESCRIPTION, oldDescription, description));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid() {
+		return uid;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUid(String newUid) {
+		String oldUid = uid;
+		uid = newUid;
+		boolean oldUidESet = uidESet;
+		uidESet = true;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID, oldUid, uid, !oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void unsetUid() {
+		String oldUid = uid;
+		boolean oldUidESet = uidESet;
+		uid = UID_EDEFAULT;
+		uidESet = false;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.UNSET, DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID, oldUid, UID_EDEFAULT, oldUidESet));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isSetUid() {
+		return uidESet;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUid_generated() {
+		if (((this.getUid() == null) || this.getUid().isEmpty())) {
+			this.setUid(EcoreUtil.generateUUID().toString());
+		}
+		return this.getUid();
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -202,6 +303,10 @@ public class SdnNodePerformanceTypeImpl extends MinimalEObjectImpl.Container imp
 				return getName();
 			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__DESCRIPTION:
 				return getDescription();
+			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID:
+				return getUid();
+			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID_GENERATED:
+				return getUid_generated();
 			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__ENTITIES:
 				return getEntities();
 		}
@@ -223,6 +328,9 @@ public class SdnNodePerformanceTypeImpl extends MinimalEObjectImpl.Container imp
 			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__DESCRIPTION:
 				setDescription((String)newValue);
 				return;
+			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID:
+				setUid((String)newValue);
+				return;
 			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__ENTITIES:
 				getEntities().clear();
 				getEntities().addAll((Collection<? extends PerformanceSdnNode>)newValue);
@@ -245,6 +353,9 @@ public class SdnNodePerformanceTypeImpl extends MinimalEObjectImpl.Container imp
 			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__DESCRIPTION:
 				setDescription(DESCRIPTION_EDEFAULT);
 				return;
+			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID:
+				unsetUid();
+				return;
 			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__ENTITIES:
 				getEntities().clear();
 				return;
@@ -264,12 +375,50 @@ public class SdnNodePerformanceTypeImpl extends MinimalEObjectImpl.Container imp
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__DESCRIPTION:
 				return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID:
+				return isSetUid();
+			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID_GENERATED:
+				return UID_GENERATED_EDEFAULT == null ? getUid_generated() != null : !UID_GENERATED_EDEFAULT.equals(getUid_generated());
 			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__ENTITIES:
 				return entities != null && !entities.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (derivedFeatureID) {
+				case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID: return DNIPackage.IDENTIFIER__UID;
+				case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID_GENERATED: return DNIPackage.IDENTIFIER__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
+		if (baseClass == Identifier.class) {
+			switch (baseFeatureID) {
+				case DNIPackage.IDENTIFIER__UID: return DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID;
+				case DNIPackage.IDENTIFIER__UID_GENERATED: return DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID_GENERATED;
+				default: return -1;
+			}
+		}
+		return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -284,6 +433,8 @@ public class SdnNodePerformanceTypeImpl extends MinimalEObjectImpl.Container imp
 		result.append(name);
 		result.append(", description: ");
 		result.append(description);
+		result.append(", uid: ");
+		if (uidESet) result.append(uid); else result.append("<unset>");
 		result.append(')');
 		return result.toString();
 	}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/EndPerformanceTypeItemProvider.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/EndPerformanceTypeItemProvider.java
index 48e2ea69..1cd8017a 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/EndPerformanceTypeItemProvider.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/EndPerformanceTypeItemProvider.java
@@ -62,6 +62,8 @@ public class EndPerformanceTypeItemProvider
 
 			addNamePropertyDescriptor(object);
 			addDescriptionPropertyDescriptor(object);
+			addUidPropertyDescriptor(object);
+			addUid_generatedPropertyDescriptor(object);
 			addEntitiesPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -111,6 +113,50 @@ public class EndPerformanceTypeItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Uid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUidPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Uid generated feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUid_generatedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_generated_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_generated_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID_GENERATED,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This adds a property descriptor for the Entities feature.
 	 * <!-- begin-user-doc -->
@@ -173,6 +219,8 @@ public class EndPerformanceTypeItemProvider
 		switch (notification.getFeatureID(EndPerformanceType.class)) {
 			case DNIPackage.END_PERFORMANCE_TYPE__NAME:
 			case DNIPackage.END_PERFORMANCE_TYPE__DESCRIPTION:
+			case DNIPackage.END_PERFORMANCE_TYPE__UID:
+			case DNIPackage.END_PERFORMANCE_TYPE__UID_GENERATED:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 		}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/IntermediatePerformanceTypeItemProvider.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/IntermediatePerformanceTypeItemProvider.java
index d0ddd039..625c646b 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/IntermediatePerformanceTypeItemProvider.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/IntermediatePerformanceTypeItemProvider.java
@@ -62,6 +62,8 @@ public class IntermediatePerformanceTypeItemProvider
 
 			addNamePropertyDescriptor(object);
 			addDescriptionPropertyDescriptor(object);
+			addUidPropertyDescriptor(object);
+			addUid_generatedPropertyDescriptor(object);
 			addEntitiesPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -111,6 +113,50 @@ public class IntermediatePerformanceTypeItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Uid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUidPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Uid generated feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUid_generatedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_generated_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_generated_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID_GENERATED,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This adds a property descriptor for the Entities feature.
 	 * <!-- begin-user-doc -->
@@ -173,6 +219,8 @@ public class IntermediatePerformanceTypeItemProvider
 		switch (notification.getFeatureID(IntermediatePerformanceType.class)) {
 			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__NAME:
 			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__DESCRIPTION:
+			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID:
+			case DNIPackage.INTERMEDIATE_PERFORMANCE_TYPE__UID_GENERATED:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 		}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/LinkPerformanceTypeItemProvider.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/LinkPerformanceTypeItemProvider.java
index 5afba76f..930305b9 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/LinkPerformanceTypeItemProvider.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/LinkPerformanceTypeItemProvider.java
@@ -62,6 +62,8 @@ public class LinkPerformanceTypeItemProvider
 
 			addNamePropertyDescriptor(object);
 			addDescriptionPropertyDescriptor(object);
+			addUidPropertyDescriptor(object);
+			addUid_generatedPropertyDescriptor(object);
 			addEntitiesPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -111,6 +113,50 @@ public class LinkPerformanceTypeItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Uid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUidPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Uid generated feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUid_generatedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_generated_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_generated_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID_GENERATED,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This adds a property descriptor for the Entities feature.
 	 * <!-- begin-user-doc -->
@@ -173,6 +219,8 @@ public class LinkPerformanceTypeItemProvider
 		switch (notification.getFeatureID(LinkPerformanceType.class)) {
 			case DNIPackage.LINK_PERFORMANCE_TYPE__NAME:
 			case DNIPackage.LINK_PERFORMANCE_TYPE__DESCRIPTION:
+			case DNIPackage.LINK_PERFORMANCE_TYPE__UID:
+			case DNIPackage.LINK_PERFORMANCE_TYPE__UID_GENERATED:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 		}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/LinkTypeItemProvider.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/LinkTypeItemProvider.java
index ed32866f..50dcc475 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/LinkTypeItemProvider.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/LinkTypeItemProvider.java
@@ -62,6 +62,8 @@ public class LinkTypeItemProvider
 
 			addNamePropertyDescriptor(object);
 			addDescriptionPropertyDescriptor(object);
+			addUidPropertyDescriptor(object);
+			addUid_generatedPropertyDescriptor(object);
 			addEntitiesPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -111,6 +113,50 @@ public class LinkTypeItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Uid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUidPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Uid generated feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUid_generatedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_generated_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_generated_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID_GENERATED,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This adds a property descriptor for the Entities feature.
 	 * <!-- begin-user-doc -->
@@ -173,6 +219,8 @@ public class LinkTypeItemProvider
 		switch (notification.getFeatureID(LinkType.class)) {
 			case DNIPackage.LINK_TYPE__NAME:
 			case DNIPackage.LINK_TYPE__DESCRIPTION:
+			case DNIPackage.LINK_TYPE__UID:
+			case DNIPackage.LINK_TYPE__UID_GENERATED:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 		}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NetworkInterfacePerformanceTypeItemProvider.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NetworkInterfacePerformanceTypeItemProvider.java
index 2b5deb95..22cb62ca 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NetworkInterfacePerformanceTypeItemProvider.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NetworkInterfacePerformanceTypeItemProvider.java
@@ -62,6 +62,8 @@ public class NetworkInterfacePerformanceTypeItemProvider
 
 			addNamePropertyDescriptor(object);
 			addDescriptionPropertyDescriptor(object);
+			addUidPropertyDescriptor(object);
+			addUid_generatedPropertyDescriptor(object);
 			addEntitiesPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -111,6 +113,50 @@ public class NetworkInterfacePerformanceTypeItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Uid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUidPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Uid generated feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUid_generatedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_generated_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_generated_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID_GENERATED,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This adds a property descriptor for the Entities feature.
 	 * <!-- begin-user-doc -->
@@ -173,6 +219,8 @@ public class NetworkInterfacePerformanceTypeItemProvider
 		switch (notification.getFeatureID(NetworkInterfacePerformanceType.class)) {
 			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__NAME:
 			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__DESCRIPTION:
+			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID:
+			case DNIPackage.NETWORK_INTERFACE_PERFORMANCE_TYPE__UID_GENERATED:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 		}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NetworkInterfaceTypeItemProvider.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NetworkInterfaceTypeItemProvider.java
index e30aea78..abfd1a85 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NetworkInterfaceTypeItemProvider.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NetworkInterfaceTypeItemProvider.java
@@ -62,6 +62,8 @@ public class NetworkInterfaceTypeItemProvider
 
 			addNamePropertyDescriptor(object);
 			addDescriptionPropertyDescriptor(object);
+			addUidPropertyDescriptor(object);
+			addUid_generatedPropertyDescriptor(object);
 			addEntitiesPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -111,6 +113,50 @@ public class NetworkInterfaceTypeItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Uid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUidPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Uid generated feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUid_generatedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_generated_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_generated_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID_GENERATED,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This adds a property descriptor for the Entities feature.
 	 * <!-- begin-user-doc -->
@@ -173,6 +219,8 @@ public class NetworkInterfaceTypeItemProvider
 		switch (notification.getFeatureID(NetworkInterfaceType.class)) {
 			case DNIPackage.NETWORK_INTERFACE_TYPE__NAME:
 			case DNIPackage.NETWORK_INTERFACE_TYPE__DESCRIPTION:
+			case DNIPackage.NETWORK_INTERFACE_TYPE__UID:
+			case DNIPackage.NETWORK_INTERFACE_TYPE__UID_GENERATED:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 		}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NodeTypeItemProvider.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NodeTypeItemProvider.java
index de0f167b..b377dc1c 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NodeTypeItemProvider.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/NodeTypeItemProvider.java
@@ -62,6 +62,8 @@ public class NodeTypeItemProvider
 
 			addNamePropertyDescriptor(object);
 			addDescriptionPropertyDescriptor(object);
+			addUidPropertyDescriptor(object);
+			addUid_generatedPropertyDescriptor(object);
 			addEntitiesPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -111,6 +113,50 @@ public class NodeTypeItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Uid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUidPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Uid generated feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUid_generatedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_generated_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_generated_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID_GENERATED,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This adds a property descriptor for the Entities feature.
 	 * <!-- begin-user-doc -->
@@ -173,6 +219,8 @@ public class NodeTypeItemProvider
 		switch (notification.getFeatureID(NodeType.class)) {
 			case DNIPackage.NODE_TYPE__NAME:
 			case DNIPackage.NODE_TYPE__DESCRIPTION:
+			case DNIPackage.NODE_TYPE__UID:
+			case DNIPackage.NODE_TYPE__UID_GENERATED:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 		}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/SdnNodePerformanceTypeItemProvider.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/SdnNodePerformanceTypeItemProvider.java
index f8abffca..1fef2edb 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/SdnNodePerformanceTypeItemProvider.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/provider/SdnNodePerformanceTypeItemProvider.java
@@ -62,6 +62,8 @@ public class SdnNodePerformanceTypeItemProvider
 
 			addNamePropertyDescriptor(object);
 			addDescriptionPropertyDescriptor(object);
+			addUidPropertyDescriptor(object);
+			addUid_generatedPropertyDescriptor(object);
 			addEntitiesPropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
@@ -111,6 +113,50 @@ public class SdnNodePerformanceTypeItemProvider
 				 null));
 	}
 
+	/**
+	 * This adds a property descriptor for the Uid feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUidPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Uid generated feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addUid_generatedPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_Identifier_uid_generated_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_Identifier_uid_generated_feature", "_UI_Identifier_type"),
+				 DNIPackage.Literals.IDENTIFIER__UID_GENERATED,
+				 false,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
 	/**
 	 * This adds a property descriptor for the Entities feature.
 	 * <!-- begin-user-doc -->
@@ -173,6 +219,8 @@ public class SdnNodePerformanceTypeItemProvider
 		switch (notification.getFeatureID(SdnNodePerformanceType.class)) {
 			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__NAME:
 			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__DESCRIPTION:
+			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID:
+			case DNIPackage.SDN_NODE_PERFORMANCE_TYPE__UID_GENERATED:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 		}
diff --git a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/util/DNISwitch.java b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/util/DNISwitch.java
index abe9d358..72672c60 100644
--- a/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/util/DNISwitch.java
+++ b/tools.descartes.dni.core/src/tools/descartes/dni/dnimm3/util/DNISwitch.java
@@ -545,6 +545,7 @@ public class DNISwitch<T> extends Switch<T> {
 				ITypedEntity iTypedEntity = (ITypedEntity)theEObject;
 				T result = caseITypedEntity(iTypedEntity);
 				if (result == null) result = caseNamedElement(iTypedEntity);
+				if (result == null) result = caseIdentifier(iTypedEntity);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -553,6 +554,7 @@ public class DNISwitch<T> extends Switch<T> {
 				T result = caseNodeType(nodeType);
 				if (result == null) result = caseITypedEntity(nodeType);
 				if (result == null) result = caseNamedElement(nodeType);
+				if (result == null) result = caseIdentifier(nodeType);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -561,6 +563,7 @@ public class DNISwitch<T> extends Switch<T> {
 				T result = caseEndPerformanceType(endPerformanceType);
 				if (result == null) result = caseITypedEntity(endPerformanceType);
 				if (result == null) result = caseNamedElement(endPerformanceType);
+				if (result == null) result = caseIdentifier(endPerformanceType);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -569,6 +572,7 @@ public class DNISwitch<T> extends Switch<T> {
 				T result = caseIntermediatePerformanceType(intermediatePerformanceType);
 				if (result == null) result = caseITypedEntity(intermediatePerformanceType);
 				if (result == null) result = caseNamedElement(intermediatePerformanceType);
+				if (result == null) result = caseIdentifier(intermediatePerformanceType);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -577,6 +581,7 @@ public class DNISwitch<T> extends Switch<T> {
 				T result = caseSdnNodePerformanceType(sdnNodePerformanceType);
 				if (result == null) result = caseITypedEntity(sdnNodePerformanceType);
 				if (result == null) result = caseNamedElement(sdnNodePerformanceType);
+				if (result == null) result = caseIdentifier(sdnNodePerformanceType);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -585,6 +590,7 @@ public class DNISwitch<T> extends Switch<T> {
 				T result = caseNetworkInterfaceType(networkInterfaceType);
 				if (result == null) result = caseITypedEntity(networkInterfaceType);
 				if (result == null) result = caseNamedElement(networkInterfaceType);
+				if (result == null) result = caseIdentifier(networkInterfaceType);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -593,6 +599,7 @@ public class DNISwitch<T> extends Switch<T> {
 				T result = caseNetworkInterfacePerformanceType(networkInterfacePerformanceType);
 				if (result == null) result = caseITypedEntity(networkInterfacePerformanceType);
 				if (result == null) result = caseNamedElement(networkInterfacePerformanceType);
+				if (result == null) result = caseIdentifier(networkInterfacePerformanceType);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -601,6 +608,7 @@ public class DNISwitch<T> extends Switch<T> {
 				T result = caseLinkType(linkType);
 				if (result == null) result = caseITypedEntity(linkType);
 				if (result == null) result = caseNamedElement(linkType);
+				if (result == null) result = caseIdentifier(linkType);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
@@ -609,6 +617,7 @@ public class DNISwitch<T> extends Switch<T> {
 				T result = caseLinkPerformanceType(linkPerformanceType);
 				if (result == null) result = caseITypedEntity(linkPerformanceType);
 				if (result == null) result = caseNamedElement(linkPerformanceType);
+				if (result == null) result = caseIdentifier(linkPerformanceType);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-- 
GitLab