public override void ElementDeleting(ElementDeletingEventArgs e) { if (e.ModelElement != null) { if (e.ModelElement.Store.TransactionManager.CurrentTransaction != null) { if (e.ModelElement.Store.TransactionManager.CurrentTransaction.IsSerializing) { return; } } } if (e.ModelElement == null) { return; } if (ImmutabilityExtensionMethods.GetLocks(e.ModelElement) != Locks.None) { return; } ReferenceRelationship referenceRelationship = e.ModelElement as ReferenceRelationship; if (referenceRelationship != null) { if (referenceRelationship.ReferenceRSNode != null) { referenceRelationship.ReferenceRSNode.Delete(); } } EmbeddingRelationship embeddingRelationship = e.ModelElement as EmbeddingRelationship; if (embeddingRelationship != null) { if (embeddingRelationship.EmbeddingRSNode != null) { embeddingRelationship.EmbeddingRSNode.Delete(); } } DomainClassReferencesBaseClass inhRelationship = e.ModelElement as DomainClassReferencesBaseClass; if (inhRelationship != null) { InheritanceNode node = inhRelationship.Store.ElementDirectory.FindElement(inhRelationship.InhNodeId) as InheritanceNode; if (node != null) { if (node.IsElementHolder) { RootNode rootNode = new RootNode(node.Store); rootNode.DomainElement = node.DomainElement; rootNode.IsElementHolder = true; rootNode.IsEmbeddingTreeExpanded = node.IsEmbeddingTreeExpanded; rootNode.IsExpanded = true; rootNode.IsInheritanceTreeExpanded = node.IsInheritanceTreeExpanded; rootNode.IsReferenceTreeExpanded = node.IsReferenceTreeExpanded; rootNode.IsShapeMappingTreeExpanded = node.IsShapeMappingTreeExpanded; // copy sub tree for (int i = node.EmbeddingRSNodes.Count - 1; i >= 0; i--) { node.EmbeddingRSNodes[i].TreeNode = rootNode; } for (int i = node.ReferenceRSNodes.Count - 1; i >= 0; i--) { node.ReferenceRSNodes[i].TreeNode = rootNode; } for (int i = node.InheritanceNodes.Count - 1; i >= 0; i--) { node.InheritanceNodes[i].TreeNode = rootNode; } for (int i = node.ShapeClassNodes.Count - 1; i >= 0; i--) { node.ShapeClassNodes[i].TreeNode = rootNode; } node.DomainElement.ParentModelContext.ViewContext.DomainModelTreeView.RootNodes.Add(rootNode); node.DomainElement.ParentModelContext.ViewContext.DomainModelTreeView.ModelTreeNodes.Add(rootNode); } // connection was deleted using the property window and not the menu item, so delete the rs and the // node here //if (inhNode.IsElementHolder) // TreeOperations.SplitTree(inhNode); node.Delete(); } } }
public override void RolePlayerChanged(RolePlayerChangedEventArgs e) { if (e.ElementLink != null) { if (e.ElementLink.Store.TransactionManager.CurrentTransaction != null) { if (e.ElementLink.Store.TransactionManager.CurrentTransaction.IsSerializing) { return; } } } if (e.ElementLink == null) { return; } if (ImmutabilityExtensionMethods.GetLocks(e.ElementLink) != Locks.None) { return; } DomainClassReferencesBaseClass con = e.ElementLink as DomainClassReferencesBaseClass; if (con != null) { if (con.BaseClass != null) { TreeNode elementHolderNode = null; foreach (TreeNode node in con.BaseClass.DomainModelTreeNodes) { if (node.IsElementHolder) { elementHolderNode = node; break; } } if (elementHolderNode == null) { throw new ArgumentNullException("elementHolderNode"); } // we need to delte the old inheritance node and add a new one for the changed inheritance relationship InheritanceNode inhNodeOld = con.Store.ElementDirectory.FindElement(con.InhNodeId) as InheritanceNode; if (inhNodeOld == null) { return; } // create new inheritance node InheritanceNode inhNode = new InheritanceNode(con.Store); inhNode.DomainElement = con.DerivedClass; inhNode.IsElementHolder = inhNodeOld.IsElementHolder; inhNode.IsExpanded = inhNodeOld.IsExpanded; inhNode.InhRelationshipId = con.Id; inhNode.IsEmbeddingTreeExpanded = inhNodeOld.IsEmbeddingTreeExpanded; inhNode.IsInheritanceTreeExpanded = inhNodeOld.IsInheritanceTreeExpanded; inhNode.IsReferenceTreeExpanded = inhNodeOld.IsReferenceTreeExpanded; inhNode.IsShapeMappingTreeExpanded = inhNodeOld.IsShapeMappingTreeExpanded; con.InhNodeId = inhNode.Id; // copy sub tree for (int i = inhNodeOld.EmbeddingRSNodes.Count - 1; i >= 0; i--) { inhNodeOld.EmbeddingRSNodes[i].TreeNode = inhNode; } for (int i = inhNodeOld.ReferenceRSNodes.Count - 1; i >= 0; i--) { inhNodeOld.ReferenceRSNodes[i].TreeNode = inhNode; } for (int i = inhNodeOld.InheritanceNodes.Count - 1; i >= 0; i--) { inhNodeOld.InheritanceNodes[i].TreeNode = inhNode; } for (int i = inhNodeOld.ShapeClassNodes.Count - 1; i >= 0; i--) { inhNodeOld.ShapeClassNodes[i].TreeNode = inhNode; } elementHolderNode.InheritanceNodes.Add(inhNode); con.DerivedClass.ModelContext.ViewContext.DomainModelTreeView.ModelTreeNodes.Add(inhNode); inhNodeOld.Delete(); } } }