/// <summary> /// Method used to create a new element's name based on the range of available names. /// Excluded are names used by the child elements embedded in the given parent element. /// </summary> /// <param name="parent">Parent element, embedding the model element.</param> /// <param name="modelElement">ModelElement to create the name for.</param> /// <returns>Created name for the given ModelElement. </returns> public virtual string CreateName(ModelElement parent, ModelElement modelElement) { if (parent is IDomainModelOwnable && modelElement is IDomainModelOwnable) { if (!(modelElement as IDomainModelOwnable).DomainElementHasName) { return(null); } DomainClassInfo infoParent = parent.GetDomainClass(); DomainClassInfo infoChild = modelElement.GetDomainClass(); IModelElementParentProvider parentprovider = (parent as IDomainModelOwnable).GetDomainModelServices().ElementParentProvider; foreach (DomainRoleInfo roleInfo in infoParent.AllDomainRolesPlayed) { if (roleInfo.IsSource) { //if (roleInfo.OppositeDomainRole.RolePlayer.Id == infoChild.Id) if (infoChild.IsDerivedFrom(roleInfo.OppositeDomainRole.RolePlayer)) { if ((modelElement as IDomainModelOwnable).Store.DomainDataAdvDirectory.IsEmbeddingRelationship(roleInfo.DomainRelationship.Id)) { int counter = 0; string name = (modelElement as IDomainModelOwnable).DomainElementTypeDisplayName; while (true) { bool bFound = false; IList <ElementLink> links = DomainRoleInfo.GetElementLinks <ElementLink>(parent, roleInfo.Id); foreach (ElementLink c in links) { if ((DomainRoleInfo.GetTargetRolePlayer(c) as IDomainModelOwnable).DomainElementName == name + counter.ToString()) { bFound = true; break; } } if (!bFound) { return(name + counter.ToString()); } counter++; } } } } } } return(null); }
private void ProcessRoleForContextMenu(IModelElementParentProvider parentProvider, MenuItemViewModel menuItemAdd, DomainRoleInfo roleInfo) { bool bShouldAdd = true; if (this.ContextMenuProvider != null) { bShouldAdd = this.ContextMenuProvider.ShouldCreateMenuItem(ModelTreeContextMenuItemType.AddElementMenuItem, roleInfo.OppositeDomainRole.RolePlayer.GetType(), this.Element, null); } if (this.Store.DomainDataAdvDirectory.IsAbstractRelationship(roleInfo.DomainRelationship.Id)) { bShouldAdd = false; } else if (roleInfo.Multiplicity == Multiplicity.One || roleInfo.Multiplicity == Multiplicity.ZeroOne) { global::System.Collections.Generic.IList <ElementLink> links = DomainRoleInfo.GetElementLinks <ElementLink>(this.Element, roleInfo.Id); if (links.Count == 1) { bShouldAdd = false; } } if (bShouldAdd) { DomainClassInfo rolePlayer = roleInfo.OppositeDomainRole.RolePlayer; if (!this.Store.DomainDataAdvDirectory.IsAbstractClass(rolePlayer.Id)) { MenuItemViewModel <ContextMenuCreationHelper> item = new MenuItemViewModel <ContextMenuCreationHelper>(this.ViewModelStore); item.Text = "Add new " + (this.Element as IDomainModelOwnable).GetDomainModelServices().ElementTypeProvider.GetTypeDisplayName(this.Store, rolePlayer.Id); item.Command = new DelegateCommand <ContextMenuCreationHelper>(AddNewElement); //item.CommandParameter = roleInfo; item.CommandParameter = new ContextMenuCreationHelper(roleInfo, rolePlayer); menuItemAdd.Children.Add(item); } foreach (DomainClassInfo r in rolePlayer.AllDescendants) { if (!this.Store.DomainDataAdvDirectory.IsAbstractClass(r.Id)) { MenuItemViewModel <ContextMenuCreationHelper> item = new MenuItemViewModel <ContextMenuCreationHelper>(this.ViewModelStore); item.Text = "Add new " + (this.Element as IDomainModelOwnable).GetDomainModelServices().ElementTypeProvider.GetTypeDisplayName(this.Store, r.Id); item.Command = new DelegateCommand <ContextMenuCreationHelper>(AddNewElement); //item.CommandParameter = roleInfo; item.CommandParameter = new ContextMenuCreationHelper(roleInfo, r); menuItemAdd.Children.Add(item); } } } }
protected override void CreateAddElementsContextMenu(MenuItemViewModel menuItemAdd) { base.CreateAddElementsContextMenu(menuItemAdd); List <Guid> omittedItems; ParentChildrenCMMapping[this.ModelData.CurrentModelContext.ModelContextId].TryGetValue(this.ElementInfo.Id, out omittedItems); IModelElementParentProvider parentProvider = (this.Element as IDomainModelOwnable).GetDomainModelServices().ElementParentProvider; DomainClassInfo info = this.Element.GetDomainClass(); foreach (DomainRoleInfo roleInfo in info.AllDomainRolesPlayed) { if (roleInfo.IsSource) { DomainRelationshipAdvancedInfo infoAdv = this.Store.DomainDataAdvDirectory.FindRelationshipInfo(roleInfo.DomainRelationship.Id); if (infoAdv is EmbeddingRelationshipAdvancedInfo) { if (!infoAdv.SourceRoleIsUIReadOnly && infoAdv.SourceRoleIsUIBrowsable) //if (!infoAdv.SourceRoleIsUIReadOnly && infoAdv.SourceRoleIsUIBrowsable && infoAdv.SourceRoleIsGenerated) //if (!infoAdv.TargetRoleIsUIReadOnly && infoAdv.TargetRoleIsUIBrowsable && infoAdv.TargetRoleIsGenerated) { if (omittedItems != null) { if (omittedItems.Contains(roleInfo.DomainRelationship.Id)) { continue; } } ProcessRoleForContextMenu(parentProvider, menuItemAdd, roleInfo); } } } } }
private void ProcessRoleForContextMenu(IModelElementParentProvider parentProvider, MenuItemViewModel menuItemAdd, DomainRoleInfo roleInfo) { bool bShouldAdd = true; if (this.ContextMenuProvider != null) bShouldAdd = this.ContextMenuProvider.ShouldCreateMenuItem(ModelTreeContextMenuItemType.AddElementMenuItem, roleInfo.OppositeDomainRole.RolePlayer.GetType(), this.Element, null); if( this.Store.DomainDataAdvDirectory.IsAbstractRelationship(roleInfo.DomainRelationship.Id) ) bShouldAdd = false; else if (roleInfo.Multiplicity == Multiplicity.One || roleInfo.Multiplicity == Multiplicity.ZeroOne) { global::System.Collections.Generic.IList<ElementLink> links = DomainRoleInfo.GetElementLinks<ElementLink>(this.Element, roleInfo.Id); if (links.Count == 1) bShouldAdd = false; } if (bShouldAdd) { DomainClassInfo rolePlayer = roleInfo.OppositeDomainRole.RolePlayer; if (!this.Store.DomainDataAdvDirectory.IsAbstractClass(rolePlayer.Id)) { MenuItemViewModel<ContextMenuCreationHelper> item = new MenuItemViewModel<ContextMenuCreationHelper>(this.ViewModelStore); item.Text = "Add new " + (this.Element as IDomainModelOwnable).GetDomainModelServices().ElementTypeProvider.GetTypeDisplayName(this.Store, rolePlayer.Id); item.Command = new DelegateCommand<ContextMenuCreationHelper>(AddNewElement); //item.CommandParameter = roleInfo; item.CommandParameter = new ContextMenuCreationHelper(roleInfo, rolePlayer); menuItemAdd.Children.Add(item); } foreach (DomainClassInfo r in rolePlayer.AllDescendants) { if (!this.Store.DomainDataAdvDirectory.IsAbstractClass(r.Id)) { MenuItemViewModel<ContextMenuCreationHelper> item = new MenuItemViewModel<ContextMenuCreationHelper>(this.ViewModelStore); item.Text = "Add new " + (this.Element as IDomainModelOwnable).GetDomainModelServices().ElementTypeProvider.GetTypeDisplayName(this.Store, r.Id); item.Command = new DelegateCommand<ContextMenuCreationHelper>(AddNewElement); //item.CommandParameter = roleInfo; item.CommandParameter = new ContextMenuCreationHelper(roleInfo, r); menuItemAdd.Children.Add(item); } } } }