/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public virtual void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			// DiagramClassViewReferencesDiagramClass
			foreach (global::Tum.PDE.LanguageDSL.DiagramClassViewReferencesDiagramClass link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DiagramClassViewReferencesDiagramClass>(this, global::Tum.PDE.LanguageDSL.DiagramClassViewReferencesDiagramClass.DiagramClassViewDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// DiagramClassViewHasRootDiagramNodes
			foreach (global::Tum.PDE.LanguageDSL.DiagramClassViewHasRootDiagramNodes link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DiagramClassViewHasRootDiagramNodes>(this, global::Tum.PDE.LanguageDSL.DiagramClassViewHasRootDiagramNodes.DiagramClassViewDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewEmbeddingLink(protoLink);
				
				DslEditorModeling::ModelProtoElement protoElementRS = new DslEditorModeling::ModelProtoElement(link.RootDiagramNode);
				protoGroup.AddNewElement(protoElementRS);
				
				// continue with target element
				if( link.RootDiagramNode is DslEditorModeling::IModelMergeElements )
				{
					(link.RootDiagramNode as DslEditorModeling::IModelMergeElements).ModelCreateMergeCopy(protoGroup);
				}
			}
		}
		/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public override void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			base.ModelProcessMergeCopy(protoElement, protoGroup);
		
			// RelationshipShapeClassReferencesReferenceRelationship
			foreach (global::Tum.PDE.LanguageDSL.RelationshipShapeClassReferencesReferenceRelationship link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.RelationshipShapeClassReferencesReferenceRelationship>(this, global::Tum.PDE.LanguageDSL.RelationshipShapeClassReferencesReferenceRelationship.RelationshipShapeClassDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
		}
		/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public override void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			base.ModelProcessMergeCopy(protoElement, protoGroup);
		
			// TreeNodeReferencesDomainElement
			foreach (global::Tum.PDE.LanguageDSL.TreeNodeReferencesDomainElement link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.TreeNodeReferencesDomainElement>(this, global::Tum.PDE.LanguageDSL.TreeNodeReferencesDomainElement.TreeNodeDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// TreeNodeReferencesEmbeddingRSNodes
			foreach (global::Tum.PDE.LanguageDSL.TreeNodeReferencesEmbeddingRSNodes link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.TreeNodeReferencesEmbeddingRSNodes>(this, global::Tum.PDE.LanguageDSL.TreeNodeReferencesEmbeddingRSNodes.TreeNodeDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// TreeNodeReferencesInheritanceNodes
			foreach (global::Tum.PDE.LanguageDSL.TreeNodeReferencesInheritanceNodes link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.TreeNodeReferencesInheritanceNodes>(this, global::Tum.PDE.LanguageDSL.TreeNodeReferencesInheritanceNodes.TreeNodeDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// TreeNodeReferencesReferenceRSNodes
			foreach (global::Tum.PDE.LanguageDSL.TreeNodeReferencesReferenceRSNodes link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.TreeNodeReferencesReferenceRSNodes>(this, global::Tum.PDE.LanguageDSL.TreeNodeReferencesReferenceRSNodes.TreeNodeDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// TreeNodeReferencesShapeClassNodes
			foreach (global::Tum.PDE.LanguageDSL.TreeNodeReferencesShapeClassNodes link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.TreeNodeReferencesShapeClassNodes>(this, global::Tum.PDE.LanguageDSL.TreeNodeReferencesShapeClassNodes.TreeNodeDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
		}
		/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public virtual void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			// DomainTypeReferencesPropertyGridEditor
			foreach (global::Tum.PDE.LanguageDSL.DomainTypeReferencesPropertyGridEditor link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DomainTypeReferencesPropertyGridEditor>(this, global::Tum.PDE.LanguageDSL.DomainTypeReferencesPropertyGridEditor.DomainTypeDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
		}
		/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public override void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			base.ModelProcessMergeCopy(protoElement, protoGroup);
		
			// DomainClassReferencesBaseClass
			foreach (global::Tum.PDE.LanguageDSL.DomainClassReferencesBaseClass link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DomainClassReferencesBaseClass>(this, global::Tum.PDE.LanguageDSL.DomainClassReferencesBaseClass.DerivedClassDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
		}
		/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public override void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			base.ModelProcessMergeCopy(protoElement, protoGroup);
		
			// DomainRoleReferencesOpposite
			foreach (global::Tum.PDE.LanguageDSL.DomainRoleReferencesOpposite link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DomainRoleReferencesOpposite>(this, global::Tum.PDE.LanguageDSL.DomainRoleReferencesOpposite.SourceDomainRoleDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// DomainRoleReferencesRolePlayer
			foreach (global::Tum.PDE.LanguageDSL.DomainRoleReferencesRolePlayer link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DomainRoleReferencesRolePlayer>(this, global::Tum.PDE.LanguageDSL.DomainRoleReferencesRolePlayer.DomainRoleDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// DomainRoleReferencesCustomPropertyGridEditor
			foreach (global::Tum.PDE.LanguageDSL.DomainRoleReferencesCustomPropertyGridEditor link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DomainRoleReferencesCustomPropertyGridEditor>(this, global::Tum.PDE.LanguageDSL.DomainRoleReferencesCustomPropertyGridEditor.DomainRoleDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
		}
		/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public override void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			base.ModelProcessMergeCopy(protoElement, protoGroup);
		
			// ExternViewContextReferencesExternModelContext
			foreach (global::Tum.PDE.LanguageDSL.ExternViewContextReferencesExternModelContext link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.ExternViewContextReferencesExternModelContext>(this, global::Tum.PDE.LanguageDSL.ExternViewContextReferencesExternModelContext.ExternViewContextDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
		}
		/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public override void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			base.ModelProcessMergeCopy(protoElement, protoGroup);
		
			// DomainRelationshipHasRoles
			foreach (global::Tum.PDE.LanguageDSL.DomainRelationshipHasRoles link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DomainRelationshipHasRoles>(this, global::Tum.PDE.LanguageDSL.DomainRelationshipHasRoles.RelationshipDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewEmbeddingLink(protoLink);
				
				DslEditorModeling::ModelProtoElement protoElementRS = new DslEditorModeling::ModelProtoElement(link.Role);
				protoGroup.AddNewElement(protoElementRS);
				
				// continue with target element
				if( link.Role is DslEditorModeling::IModelMergeElements )
				{
					(link.Role as DslEditorModeling::IModelMergeElements).ModelCreateMergeCopy(protoGroup);
				}
			}
			// DomainRelationshipReferencesSource
			foreach (global::Tum.PDE.LanguageDSL.DomainRelationshipReferencesSource link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DomainRelationshipReferencesSource>(this, global::Tum.PDE.LanguageDSL.DomainRelationshipReferencesSource.RelationshipDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// DomainRelationshipReferencesTarget
			foreach (global::Tum.PDE.LanguageDSL.DomainRelationshipReferencesTarget link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DomainRelationshipReferencesTarget>(this, global::Tum.PDE.LanguageDSL.DomainRelationshipReferencesTarget.RelationshipDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// DomainRelationshipReferencesBaseRelationship
			foreach (global::Tum.PDE.LanguageDSL.DomainRelationshipReferencesBaseRelationship link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DomainRelationshipReferencesBaseRelationship>(this, global::Tum.PDE.LanguageDSL.DomainRelationshipReferencesBaseRelationship.DerivedRelationshipDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
		}
		/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public override void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			base.ModelProcessMergeCopy(protoElement, protoGroup);
		
			// ViewContextHasDomainModelTreeView
			foreach (global::Tum.PDE.LanguageDSL.ViewContextHasDomainModelTreeView link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.ViewContextHasDomainModelTreeView>(this, global::Tum.PDE.LanguageDSL.ViewContextHasDomainModelTreeView.ViewContextDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewEmbeddingLink(protoLink);
				
				DslEditorModeling::ModelProtoElement protoElementRS = new DslEditorModeling::ModelProtoElement(link.DomainModelTreeView);
				protoGroup.AddNewElement(protoElementRS);
				
				// continue with target element
				if( link.DomainModelTreeView is DslEditorModeling::IModelMergeElements )
				{
					(link.DomainModelTreeView as DslEditorModeling::IModelMergeElements).ModelCreateMergeCopy(protoGroup);
				}
			}
			// ViewContextHasDiagramView
			foreach (global::Tum.PDE.LanguageDSL.ViewContextHasDiagramView link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.ViewContextHasDiagramView>(this, global::Tum.PDE.LanguageDSL.ViewContextHasDiagramView.ViewContextDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewEmbeddingLink(protoLink);
				
				DslEditorModeling::ModelProtoElement protoElementRS = new DslEditorModeling::ModelProtoElement(link.DiagramView);
				protoGroup.AddNewElement(protoElementRS);
				
				// continue with target element
				if( link.DiagramView is DslEditorModeling::IModelMergeElements )
				{
					(link.DiagramView as DslEditorModeling::IModelMergeElements).ModelCreateMergeCopy(protoGroup);
				}
			}
			// ViewContextReferencesModelContext
			foreach (global::Tum.PDE.LanguageDSL.ViewContextReferencesModelContext link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.ViewContextReferencesModelContext>(this, global::Tum.PDE.LanguageDSL.ViewContextReferencesModelContext.ViewContextDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
		}
		/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public override void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			base.ModelProcessMergeCopy(protoElement, protoGroup);
		
			// SerializationClassReferencesChildren
			foreach (global::Tum.PDE.LanguageDSL.SerializationClassReferencesChildren link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.SerializationClassReferencesChildren>(this, global::Tum.PDE.LanguageDSL.SerializationClassReferencesChildren.ParentDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// SerializationClassReferencesAttributes
			foreach (global::Tum.PDE.LanguageDSL.SerializationClassReferencesAttributes link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.SerializationClassReferencesAttributes>(this, global::Tum.PDE.LanguageDSL.SerializationClassReferencesAttributes.ElementDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
			// SerializationClassHasIdProperty
			foreach (global::Tum.PDE.LanguageDSL.SerializationClassHasIdProperty link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.SerializationClassHasIdProperty>(this, global::Tum.PDE.LanguageDSL.SerializationClassHasIdProperty.SerializationClassDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewEmbeddingLink(protoLink);
				
				DslEditorModeling::ModelProtoElement protoElementRS = new DslEditorModeling::ModelProtoElement(link.SerializedIdProperty);
				protoGroup.AddNewElement(protoElementRS);
				
				// continue with target element
				if( link.SerializedIdProperty is DslEditorModeling::IModelMergeElements )
				{
					(link.SerializedIdProperty as DslEditorModeling::IModelMergeElements).ModelCreateMergeCopy(protoGroup);
				}
			}
			// SerializationClassHasProperties
			foreach (global::Tum.PDE.LanguageDSL.SerializationClassHasProperties link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.SerializationClassHasProperties>(this, global::Tum.PDE.LanguageDSL.SerializationClassHasProperties.SerializationClassDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewEmbeddingLink(protoLink);
				
				DslEditorModeling::ModelProtoElement protoElementRS = new DslEditorModeling::ModelProtoElement(link.SerializedDomainProperty);
				protoGroup.AddNewElement(protoElementRS);
				
				// continue with target element
				if( link.SerializedDomainProperty is DslEditorModeling::IModelMergeElements )
				{
					(link.SerializedDomainProperty as DslEditorModeling::IModelMergeElements).ModelCreateMergeCopy(protoGroup);
				}
			}
		}
		/// <summary>
		/// Processes a proto element representation of the element and adds required proto links. 
		/// This method is called on base classes from derived classes.
		/// 
		/// Hint: Properties do not need to be added in this method.
		/// </summary>
		/// <param name="protoElement">Proto element representation of the element.</param>
		/// <param name="protoGroup">Proto group the proto element belongs to.</param>
		public virtual void ModelProcessMergeCopy(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroup protoGroup)
		{
			// DiagramTreeNodeReferencesPresentationElementClass
			foreach (global::Tum.PDE.LanguageDSL.DiagramTreeNodeReferencesPresentationElementClass link in DslModeling::DomainRoleInfo.GetElementLinks<global::Tum.PDE.LanguageDSL.DiagramTreeNodeReferencesPresentationElementClass>(this, global::Tum.PDE.LanguageDSL.DiagramTreeNodeReferencesPresentationElementClass.DiagramTreeNodeDomainRoleId))
			{
				DslEditorModeling::ModelProtoLink protoLink = new DslEditorModeling::ModelProtoLink(link);
				protoGroup.AddNewReferenceLink(protoLink);
			}
		}