private void CreatePropertyHandlersInternal(PresentationElementClass shape, AttributedDomainElement domainElement, bool hasBaseClass)
{
	if( shape.GeneratePropertiesVM )
		CreatePropertyAccessorsInternal(domainElement, hasBaseClass);
	if( shape.GenerateShapePropertiesVM)
		CreatePropertyAccessorsForShapeInternal(shape, hasBaseClass);
	
	string modifier = "virtual";
	if( hasBaseClass )
		modifier = "override";
	

        
        #line default
        #line hidden
        
        #line 78 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\r\n#region Subscription and Unsubscription\r\n/// <summary>\r\n/// Called whenever pro" +
        "perties change.\r\n/// </summary>\r\n/// <param name=\"args\"></param>\r\nprotected ");

        
        #line default
        #line hidden
        
        #line 85 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(modifier));

        
        #line default
        #line hidden
        
        #line 85 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(" void OnElementPropertyChanged(DslModeling::ElementPropertyChangedEventArgs args)" +
        "\r\n{\r\n");

        
        #line default
        #line hidden
        
        #line 87 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	HandlePropertyChangeEvents(shape, domainElement);

        
        #line default
        #line hidden
        
        #line 89 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("}\r\n\r\n/// <summary>\r\n/// Subscribes to model element property change events.\r\n/// " +
        "</summary>\r\nprotected override void Subscribe()\r\n{\r\n\tbase.Subscribe();\r\n\t\r\n");

        
        #line default
        #line hidden
        
        #line 99 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	SubscribeToPropertyChangeEvents(shape, domainElement);

        
        #line default
        #line hidden
        
        #line 101 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("}\r\n\r\n/// <summary>\r\n/// Unsubscribes from model element property change events.\r\n" +
        "/// </summary>\r\nprotected override void Unsubscribe()\r\n{\r\n\tbase.Unsubscribe();\r\n" +
        "\t\r\n");

        
        #line default
        #line hidden
        
        #line 111 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	UnsubscribeToPropertyChangeEvents(shape, domainElement);

        
        #line default
        #line hidden
        
        #line 113 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("}\r\n#endregion\r\n");

        
        #line default
        #line hidden
        
        #line 116 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

}
private void CreatePropertyAccessorsForShapeInternal(PresentationElementClass domainElement, bool hasBaseClass)
{

        
        #line default
        #line hidden
        
        #line 318 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("#region Shape Properties\r\n");

        
        #line default
        #line hidden
        
        #line 320 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	AttributedDomainElement temp = domainElement;
	System.Collections.Generic.List<string> handledProperty = new System.Collections.Generic.List<string>();
	while(temp != null )
	{
		foreach(DomainProperty property in temp.Properties)
		{
			if( handledProperty.Contains(property.Name) )
				continue;
			
			handledProperty.Add(property.Name);
			
			AccessModifier setterAccessModifier = property.SetterAccessModifier;
			AccessModifier getterAccessModifier = property.GetterAccessModifier;
			AccessModifier overallAccessModifier;
			
			if(setterAccessModifier==AccessModifier.Public || getterAccessModifier==AccessModifier.Public)
			{
				overallAccessModifier = AccessModifier.Public;
			}
			else if(setterAccessModifier==AccessModifier.FamilyOrAssembly || getterAccessModifier==AccessModifier.FamilyOrAssembly)
			{
				overallAccessModifier = AccessModifier.FamilyOrAssembly;	
			}
			else if(setterAccessModifier==AccessModifier.Family || getterAccessModifier==AccessModifier.Family)
			{
				overallAccessModifier = AccessModifier.Family;
			}
			else if(setterAccessModifier==AccessModifier.Assembly || getterAccessModifier==AccessModifier.Assembly)
			{
				overallAccessModifier = AccessModifier.Assembly;
			}
			else 
			{
				overallAccessModifier = AccessModifier.Private;
			}			
			
			string modifier = "";
			//if( hasBaseClass )
			//	modifier = " new";
			
			//if( p.IsElementName )

        
        #line default
        #line hidden
        
        #line 362 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("/// <summary>\r\n/// Gets or sets the value of ");

        
        #line default
        #line hidden
        
        #line 364 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

        
        #line default
        #line hidden
        
        #line 364 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(" domain property.\r\n/// </summary>\r\n");

        
        #line default
        #line hidden
        
        #line 366 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(CodeGenerationUtilities.GetAccessModifier(overallAccessModifier)));

        
        #line default
        #line hidden
        
        #line 366 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(modifier));

        
        #line default
        #line hidden
        
        #line 366 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(" ");

        
        #line default
        #line hidden
        
        #line 366 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(CodeGenerationUtilities.GetDomainTypeFullName(property)));

        
        #line default
        #line hidden
        
        #line 366 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(" Shape_");

        
        #line default
        #line hidden
        
        #line 366 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

        
        #line default
        #line hidden
        
        #line 366 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\r\n{\r\n");

        
        #line default
        #line hidden
        
        #line 368 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	if(getterAccessModifier!=overallAccessModifier)
	{

        
        #line default
        #line hidden
        
        #line 371 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\t");

        
        #line default
        #line hidden
        
        #line 372 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(CodeGenerationUtilities.GetAccessModifier(getterAccessModifier)));

        
        #line default
        #line hidden
        
        #line 372 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(" get\r\n");

        
        #line default
        #line hidden
        
        #line 373 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	}
	else
	{

        
        #line default
        #line hidden
        
        #line 377 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\tget\r\n");

        
        #line default
        #line hidden
        
        #line 379 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	}

        
        #line default
        #line hidden
        
        #line 381 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\t{\r\n");

        
        #line default
        #line hidden
        
        #line 383 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	if( property.IsElementName )
	{

        
        #line default
        #line hidden
        
        #line 386 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\t\treturn this.DomainElementName;\r\n");

        
        #line default
        #line hidden
        
        #line 388 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	}
	else
	{

        
        #line default
        #line hidden
        
        #line 392 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\t\treturn (this.ShapeElement as ");

        
        #line default
        #line hidden
        
        #line 393 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(domainElement.GetFullName(true)));

        
        #line default
        #line hidden
        
        #line 393 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(").");

        
        #line default
        #line hidden
        
        #line 393 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

        
        #line default
        #line hidden
        
        #line 393 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(";\r\n");

        
        #line default
        #line hidden
        
        #line 394 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	}

        
        #line default
        #line hidden
        
        #line 396 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\t}\r\n");

        
        #line default
        #line hidden
        
        #line 398 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

		if(setterAccessModifier != overallAccessModifier)
		{

        
        #line default
        #line hidden
        
        #line 401 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\t");

        
        #line default
        #line hidden
        
        #line 402 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(CodeGenerationUtilities.GetAccessModifier(setterAccessModifier)));

        
        #line default
        #line hidden
        
        #line 402 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(" set\r\n");

        
        #line default
        #line hidden
        
        #line 403 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

		}
		else
		{

        
        #line default
        #line hidden
        
        #line 407 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\tset\r\n");

        
        #line default
        #line hidden
        
        #line 409 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

		}

        
        #line default
        #line hidden
        
        #line 411 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\t{\r\n");

        
        #line default
        #line hidden
        
        #line 413 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"


	if( property.IsElementName )
	{

        
        #line default
        #line hidden
        
        #line 417 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\t\tif( this.DomainElementName != value )\r\n\t\t\tthis.DomainElementName = value;\r\n");

        
        #line default
        #line hidden
        
        #line 420 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	}
	else
	{

        
        #line default
        #line hidden
        
        #line 424 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\t\tif( (this.Element as ");

        
        #line default
        #line hidden
        
        #line 425 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(domainElement.GetFullName(true)));

        
        #line default
        #line hidden
        
        #line 425 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(").");

        
        #line default
        #line hidden
        
        #line 425 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

        
        #line default
        #line hidden
        
        #line 425 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(" != value )\r\n\t\t{\r\n\t\t\tusing( DslModeling::Transaction transaction = this.Store.Tra" +
        "nsactionManager.BeginTransaction(\"Update value of ");

        
        #line default
        #line hidden
        
        #line 427 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

        
        #line default
        #line hidden
        
        #line 427 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\") )\r\n\t\t\t{\r\n\t\t\t\t(this.Element as ");

        
        #line default
        #line hidden
        
        #line 429 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(domainElement.GetFullName(true)));

        
        #line default
        #line hidden
        
        #line 429 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(").");

        
        #line default
        #line hidden
        
        #line 429 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

        
        #line default
        #line hidden
        
        #line 429 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(" = value;\r\n\t\t\t\t\r\n\t\t\t\ttransaction.Commit();\r\n\t\t\t}\r\n\t\t}\r\n");

        
        #line default
        #line hidden
        
        #line 434 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	}

        
        #line default
        #line hidden
        
        #line 436 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\t}\r\n}\r\n\r\n");

        
        #line default
        #line hidden
        
        #line 440 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

		}
		
		temp = temp.BaseElement;
	}

        
        #line default
        #line hidden
        
        #line 445 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("#endregion\r\n");

        
        #line default
        #line hidden
        
        #line 447 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
		
}
public string CreatePropertyHandlers(PresentationElementClass shape, AttributedDomainElement domainElement, bool hasBaseClass)
{
	this.GenerationEnvironment = null;
	this.CreatePropertyHandlersInternal(shape, domainElement, hasBaseClass);
	return this.GenerationEnvironment.ToString();
}
public void UnsubscribeToPropertyChangeEvents(PresentationElementClass shape, AttributedDomainElement pElement)
{

        
        #line default
        #line hidden
        
        #line 47 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(@"	if( this.Element != null )
	{
		this.EventManager.GetEvent<DslEditorEvents::ModelElementPropertyChangedEvent>().Unsubscribe(this.Element.Id, new System.Action<DslModeling::ElementPropertyChangedEventArgs>(OnElementPropertyChanged));
	}
	
	if( this.ShapeElement != null )
	{
		this.EventManager.GetEvent<DslEditorEvents::ModelElementPropertyChangedEvent>().Unsubscribe(this.ShapeElement.Id, new System.Action<DslModeling::ElementPropertyChangedEventArgs>(OnElementPropertyChanged));
	}	
");

        
        #line default
        #line hidden
        
        #line 57 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
	
}
public void HandlePropertyChangeEvents(PresentationElementClass shape, AttributedDomainElement domainElement)
{

        
        #line default
        #line hidden
        
        #line 474 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\tif( this.IsDisposed )\r\n\t\treturn;\r\n\r\n");

        
        #line default
        #line hidden
        
        #line 478 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

	AttributedDomainElement temp = domainElement;
	while(temp != null )
	{
		foreach(DomainProperty property in temp.Properties)
		{

        
        #line default
        #line hidden
        
        #line 484 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\tif( args.DomainProperty.Id == ");

        
        #line default
        #line hidden
        
        #line 485 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(temp.GetFullName(true)));

        
        #line default
        #line hidden
        
        #line 485 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(".");

        
        #line default
        #line hidden
        
        #line 485 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

        
        #line default
        #line hidden
        
        #line 485 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("DomainPropertyId )\r\n\t\tOnPropertyChanged(\"Element_");

        
        #line default
        #line hidden
        
        #line 486 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

        
        #line default
        #line hidden
        
        #line 486 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\");\r\n");

        
        #line default
        #line hidden
        
        #line 487 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

		}
		
		temp = temp.BaseElement;
	}

	temp = shape;
	while(temp != null )
	{
		foreach(DomainProperty property in temp.Properties)
		{

        
        #line default
        #line hidden
        
        #line 498 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\tif( args.DomainProperty.Id == ");

        
        #line default
        #line hidden
        
        #line 499 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(temp.GetFullName(true)));

        
        #line default
        #line hidden
        
        #line 499 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(".");

        
        #line default
        #line hidden
        
        #line 499 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

        
        #line default
        #line hidden
        
        #line 499 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("DomainPropertyId )\r\n\t\tOnPropertyChanged(\"Shape_");

        
        #line default
        #line hidden
        
        #line 500 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(property.Name));

        
        #line default
        #line hidden
        
        #line 500 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"
this.Write("\");\r\n");

        
        #line default
        #line hidden
        
        #line 501 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ViewModel\DiagramGeneratorHelper.tt"

		}
		
		temp = temp.BaseElement;
	}
}
/// <summary>
/// Generate the constructors for a DomainClass
/// </summary>
/// <param name="domainClass">the domain class to generate constructors for</param>
/// <param name="generatedClass">Whether this is the class carrying the generated code or the derived class in a double-derived pair</param>
private void GenerateDomainClassConstructors(PresentationElementClass presentationClass, bool generatedClass)
{
	if(presentationClass.HasCustomConstructor && !(generatedClass && presentationClass.GeneratesDoubleDerived))
	{

        
        #line default
        #line hidden
        
        #line 321 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write("// Constructors were not generated for this class because it had HasCustomConstru" +
        "ctor\r\n// set to true. Please provide the constructors below in a partial class.\r" +
        "\n");

        
        #line default
        #line hidden
        
        #line 324 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"

		// We comment out the constructors if HasCustomConstructor is set to true
		PushIndent("//");
	}
	string ctorName;
	if ( generatedClass )
	{
		if( presentationClass.GeneratesDoubleDerived)
			ctorName = presentationClass.Name + "Base";
		else
			ctorName = presentationClass.Name;
	}
	else
	{
		ctorName = presentationClass.Name;
	}
	if(presentationClass.InheritanceModifier == InheritanceModifier.Abstract || (generatedClass && presentationClass.GeneratesDoubleDerived ))
	{

        
        #line default
        #line hidden
        
        #line 342 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write(@"/// <summary>
/// Constructor.
/// </summary>
/// <param name=""partition"">Partition where new element is to be created.</param>
/// <param name=""propertyAssignments"">List of domain property id/value pairs to set once the element is created.</param>
protected ");

        
        #line default
        #line hidden
        
        #line 348 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(ctorName));

        
        #line default
        #line hidden
        
        #line 348 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write("(DslModeling::Partition partition, DslModeling::PropertyAssignment[] propertyAssi" +
        "gnments)\r\n\t: base(partition, propertyAssignments)\r\n{\r\n");

        
        #line default
        #line hidden
        
        #line 351 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"

	//SetupInitialValues(presentationClass);

        
        #line default
        #line hidden
        
        #line 353 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write("}\r\n");

        
        #line default
        #line hidden
        
        #line 355 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"

	}
	else
	{

        
        #line default
        #line hidden
        
        #line 359 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write("/// <summary>\r\n/// Constructor\r\n/// </summary>\r\n/// <param name=\"store\">Store whe" +
        "re new element is to be created.</param>\r\n/// <param name=\"propertyAssignments\">" +
        "List of domain property id/value pairs to set once the element is created.</para" +
        "m>\r\npublic ");

        
        #line default
        #line hidden
        
        #line 365 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(ctorName));

        
        #line default
        #line hidden
        
        #line 365 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write("(DslModeling::Store store, params DslModeling::PropertyAssignment[] propertyAssig" +
        "nments)\r\n\t: this(store != null ? store.DefaultPartitionForClass(DomainClassId) :" +
        " null, propertyAssignments)\r\n{\r\n");

        
        #line default
        #line hidden
        
        #line 368 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"

	//SetupInitialValues(presentationClass);

        
        #line default
        #line hidden
        
        #line 370 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write(@"}

/// <summary>
/// Constructor
/// </summary>
/// <param name=""partition"">Partition where new element is to be created.</param>
/// <param name=""propertyAssignments"">List of domain property id/value pairs to set once the element is created.</param>
public ");

        
        #line default
        #line hidden
        
        #line 378 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(ctorName));

        
        #line default
        #line hidden
        
        #line 378 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write("(DslModeling::Partition partition, params DslModeling::PropertyAssignment[] prope" +
        "rtyAssignments)\r\n\t: base(partition, propertyAssignments)\r\n{\r\n}\r\n");

        
        #line default
        #line hidden
        
        #line 382 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"

	}
	if(presentationClass.HasCustomConstructor && !(generatedClass && presentationClass.GeneratesDoubleDerived))
	{
		PopIndent();
	}
}
private void SetupInitialValues(PresentationElementClass presentationClass)
{
	if( presentationClass is ShapeClass )
	{
		ShapeClass shapeClass = presentationClass as ShapeClass;

        
        #line default
        #line hidden
        
        #line 397 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write(@"	bool bHandledSize = false;
	bool bHandledLocation = false;
	bool bHandledAbsoluteLocation = false;
	
	if( propertyAssignments != null )
		foreach(DslModeling::PropertyAssignment propertyAssignment in propertyAssignments )
		{
			if( propertyAssignment.PropertyId == DslEditorDiagrams::NodeShape.SizeDomainPropertyId)
				bHandledSize = true;
			else if( propertyAssignment.PropertyId == DslEditorDiagrams::NodeShape.LocationDomainPropertyId)
				bHandledLocation = true;
			else if( propertyAssignment.PropertyId == DslEditorDiagrams::NodeShape.AbsoluteLocationDomainPropertyId)
				bHandledAbsoluteLocation = true;
		}
	
	if( !bHandledSize )
		this.Size = new DslEditorDiagrams::SizeD(");

        
        #line default
        #line hidden
        
        #line 414 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(shapeClass.DefaultWidth));

        
        #line default
        #line hidden
        
        #line 414 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write(", ");

        
        #line default
        #line hidden
        
        #line 414 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(shapeClass.DefaultHeight));

        
        #line default
        #line hidden
        
        #line 414 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"
this.Write(");\r\n\tif( !bHandledLocation )\r\n\t\tthis.Location = DslEditorDiagrams::PointD.Empty;\r" +
        "\n\tif( !bHandledAbsoluteLocation )\r\n\t\tthis.AbsoluteLocation = DslEditorDiagrams::" +
        "PointD.Empty;\r\n");

        
        #line default
        #line hidden
        
        #line 419 "J:\Uni\CC Processes\Werkzeuge\PDE 2\Tum.PDE.ToolFramework\Tum.PDE.ToolFramework.Templates\ShapesGenerator.tt"

	}
}