Example #1
0
        /// <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);
        }
Example #2
0
        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);
                    }
                }
            }
        }
Example #3
0
        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);
                    }
                }
            }            
        }