/// <summary>
        /// returns the name to show as node name for this element
        /// </summary>
        /// <param name="element"></param>
        public string getNodeName(UML.UMLItem element)
        {
            string name = string.Empty;

            if (element != null)
            {
                name  = this.getStereotypeString(element);
                name += element.name;
            }
            if (element is UML.Classes.Kernel.Parameter)
            {
                UML.Classes.Kernel.Parameter parameter = (UML.Classes.Kernel.Parameter)element;
                if (parameter.direction != UML.Classes.Kernel.ParameterDirectionKind._return)
                {
                    name = parameter.name + " (" + this.getNodeName(parameter.operation) + ")";
                }
            }
            else if (element is UML.Classes.Kernel.Feature)
            {
                UML.Classes.Kernel.Feature feature = (UML.Classes.Kernel.Feature)element;
                UML.Classes.Kernel.Element owner   = feature.owner;
                if (owner != null)
                {
                    name = owner.name;
                }
                else
                {
                    name = "[owner missing]";
                }
                name += "." + this.getStereotypeString(element) + feature.name;
            }
            else if (element is UML.Profiles.TaggedValue)
            {
                UML.Profiles.TaggedValue taggedValue = (UML.Profiles.TaggedValue)element;
                if (taggedValue.owner.name.Length > 0)
                {
                    name = taggedValue.owner.name + "." + taggedValue.name;
                }
            }
            return(name);
        }
        /// <summary>
        /// returns all elements linked via the "link to element feature"
        /// </summary>
        /// <param name="parentItem">the connected element</param>
        /// <returns>attribute, operations and classes that are linked usign the "link to element feature" functionality</returns>
        private List <UML.UMLItem> getLinkedToElementFeatures(UML.UMLItem parentItem)
        {
            List <UML.UMLItem> elementsToNavigate = new List <UML.UMLItem>();

            //either the parent is a property, or it is a element
            if (parentItem is UML.Classes.Kernel.Feature)
            {
                UML.Classes.Kernel.Feature parentFeature = (UML.Classes.Kernel.Feature)parentItem;

                foreach (UML.Classes.Kernel.Relationship relation in parentFeature.relationships)
                {
                    foreach (UML.UMLItem item in relation.relatedElements)
                    {
                        if (!item.Equals(parentItem))
                        {
                            elementsToNavigate.Add(item);
                        }
                    }
                }
            }
            else if (parentItem is UML.Classes.Kernel.Element)
            {
                UML.Classes.Kernel.Element parentElement = (UML.Classes.Kernel.Element)parentItem;
                foreach (UML.Classes.Kernel.Relationship relation in parentElement.relationships)
                {
                    foreach (UML.UMLItem item in relation.relatedElements)
                    {
                        if (item is UML.Classes.Kernel.Feature)
                        {
                            elementsToNavigate.Add(item);
                        }
                    }
                }
            }
            return(elementsToNavigate);
        }