/// <summary>
		/// Helper method to create and initialize a new AsyncDslDiagram.
		/// </summary>
		internal protected virtual AsyncDslDiagram CreateDiagramHelper(DslModeling::Partition diagramPartition, DslModeling::ModelElement modelRoot)
		{
			AsyncDslDiagram diagram = new AsyncDslDiagram(diagramPartition);
	
			// If model root has not children, create initial elements mapped to swimlanes, and merge them into the root.
			if (DslModeling::DomainRoleInfo.GetAllElementLinks(modelRoot).Count == 0)
			{
				DslModeling::ElementGroup elementGroup = new DslModeling::ElementGroup(diagramPartition);
				DslModeling::ModelElement mappedElement;
				mappedElement = new Process(diagramPartition);
				elementGroup.Add(mappedElement);
				elementGroup.MarkAsRoot(mappedElement);
				if(diagram.ElementOperations.CanMergeElementGroupPrototype(modelRoot, elementGroup.CreatePrototype()))
				{
					diagram.ElementOperations.MergeElementGroup(modelRoot, elementGroup);
				}
				else
				{
					global::System.Diagnostics.Debug.Fail("Cannot merge swimlane-mapped element(s) into the root model element.  Initial swimlanes will not be created.");
				}
			}
	
	
			// If we have unmapped swimlanes then Initialize them also
			diagram.InitializeSwimlanes();
	
			return diagram;
		}