/// <summary> /// Constuctor. /// </summary> /// <param name="viewModelStore">The store this view model belongs to.</param> /// <param name="embeddingRSNode">EmbeddingRSNode.</param> /// <param name="parent">Parent.</param> public EmbeddingRSNodeViewModel(ViewModelStore viewModelStore, EmbeddingRSNode embeddingRSNode, TreeNodeViewModel parent) : base(viewModelStore, embeddingRSNode.Relationship, parent) { this.embeddingRSNode = embeddingRSNode; this.embeddingNodeVMs = new ObservableCollection <EmbeddingNodeViewModel>(); this.embeddingNodeVMsRO = new ReadOnlyObservableCollection <EmbeddingNodeViewModel>(embeddingNodeVMs); if (embeddingRSNode != null) { if (embeddingRSNode.EmbeddingNode != null) { AddEmbeddingNode(embeddingRSNode.EmbeddingNode); } Subscribe(); } }
/// <summary> /// Constuctor. /// </summary> /// <param name="viewModelStore">The store this view model belongs to.</param> /// <param name="embeddingRSNode">EmbeddingRSNode.</param> /// <param name="parent">Parent.</param> public EmbeddingRSNodeViewModel(ViewModelStore viewModelStore, EmbeddingRSNode embeddingRSNode, TreeNodeViewModel parent) : base(viewModelStore, embeddingRSNode.Relationship, parent) { this.embeddingRSNode = embeddingRSNode; this.embeddingNodeVMs = new ObservableCollection<EmbeddingNodeViewModel>(); this.embeddingNodeVMsRO = new ReadOnlyObservableCollection<EmbeddingNodeViewModel>(embeddingNodeVMs); if (embeddingRSNode != null) { if (embeddingRSNode.EmbeddingNode != null) { AddEmbeddingNode(embeddingRSNode.EmbeddingNode); } Subscribe(); } }
/// <summary> /// Adds a new embedding relationship instance. Needs to be called within a modeling transaction. /// </summary> /// <param name="source">Domain class representing the parent.</param> /// <param name="target">Domain class representing the child.</param> public static void AddNewEmbeddingRS(EmbeddingRelationship emb, DomainClass source, AttributedDomainElement target, bool bTargetElementHolder) { // tree nodes // 1. find the element holder node for source // 2. add new EmbeddingRSNode, connect to rs // 3. add new EmbeddingNode for target TreeNode elementHolderNode = null; foreach (TreeNode node in source.DomainModelTreeNodes) { if (node.IsElementHolder) { elementHolderNode = node; break; } } if (elementHolderNode == null) { throw new ArgumentNullException("elementHolderNode"); } EmbeddingRSNode rsNode = new EmbeddingRSNode(source.Store); rsNode.Relationship = emb; EmbeddingNode embNode = new EmbeddingNode(source.Store); embNode.DomainElement = target; embNode.IsElementHolder = bTargetElementHolder; if (!bTargetElementHolder) { embNode.IsExpanded = false; } elementHolderNode.EmbeddingRSNodes.Add(rsNode); rsNode.EmbeddingNode = embNode; source.ModelContext.ViewContext.DomainModelTreeView.ModelTreeNodes.Add(rsNode); source.ModelContext.ViewContext.DomainModelTreeView.ModelTreeNodes.Add(embNode); }
/// <summary> /// Deletes the rs view model that is hosting the given rs node. /// </summary> /// <param name="node">Rs node.</param> public void DeleteEmbeddingRSNode(EmbeddingRSNode node) { for (int i = this.embeddingRSNodeVMs.Count - 1; i >= 0; i--) if (this.embeddingRSNodeVMs[i].EmbeddingRSNode.Id == node.Id) { this.embeddingRSNodeVMs[i].Dispose(); this.embeddingRSNodeVMs.RemoveAt(i); } foreach (EmbeddingRSNodeViewModel vm in this.embeddingRSNodeVMs) vm.UpdateNodePosition(); OnPropertyChanged("HasEmbeddingRSNodes"); }
/// <summary> /// Adds a new embedding rs view model for the given rs node. /// </summary> /// <param name="node">Rs node.</param> public void AddEmbeddingRSNode(EmbeddingRSNode node) { // verify that node hasnt been added yet foreach (EmbeddingRSNodeViewModel viewModel in this.embeddingRSNodeVMs) if (viewModel.EmbeddingRSNode.Id == node.Id) return; EmbeddingRSNodeViewModel vm = new EmbeddingRSNodeViewModel(this.ViewModelStore, node, this); this.embeddingRSNodeVMs.Add(vm); foreach (EmbeddingRSNodeViewModel viewModel in this.embeddingRSNodeVMs) viewModel.UpdateNodePosition(); OnPropertyChanged("HasEmbeddingRSNodes"); }
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; } TreeNodeReferencesEmbeddingRSNodes con = e.ModelElement as TreeNodeReferencesEmbeddingRSNodes; if (con != null) { EmbeddingRSNode rsNode = con.EmbeddingRSNode; if (rsNode != null) { EmbeddingNode node = rsNode.EmbeddingNode; if (node != null) { // since this node still exists, it isnt included in the deletion process // --> move to root node if this node is the element holder, as its parent has been deleted if (node.IsElementHolder) { RootNode rootNode = new RootNode(node.Store); rootNode.DomainElement = node.DomainElement; node.EmbeddingModelTreeViewModel.RootNodes.Add(rootNode); node.EmbeddingModelTreeViewModel.ModelTreeNodes.Add(rootNode); // 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; } rootNode.IsElementHolder = true; rootNode.IsEmbeddingTreeExpanded = node.IsEmbeddingTreeExpanded; rootNode.IsExpanded = true; rootNode.IsInheritanceTreeExpanded = node.IsInheritanceTreeExpanded; rootNode.IsReferenceTreeExpanded = node.IsReferenceTreeExpanded; rootNode.IsShapeMappingTreeExpanded = node.IsShapeMappingTreeExpanded; } node.Delete(); } rsNode.Delete(); } } }