Beispiel #1
0
        /// <summary>
        /// Normalizes the name of the type (replaces white spaces with <see cref="WhitespaceReplacement"/>).
        /// </summary>
        /// <typeparam name="TComponent">The type of the element.</typeparam>
        /// <param name="component">The element whose name should be normalized.</param>
        /// <param name="nameGetter">The function (conveniently a lambda expression) that
        /// returns name for <paramref name="component"/>.</param>
        /// <returns></returns>
        public string NormalizeTypeName <TComponent>(TComponent component, GetItemName <TComponent> nameGetter = null)
            where TComponent : Component
        {
            string typeName = nameGetter != null?nameGetter(component) : component.Name;

            if (normalizationRegex == null)
            {
                normalizationRegex = new Regex("\\s", RegexOptions.CultureInvariant);
            }
            if (normalizationRegex.IsMatch(typeName))
            {
                string replace = normalizationRegex.Replace(typeName, WhitespaceReplacement);
                if (component is PSMAttribute)
                {
                    Log.AddWarning(string.Format(LogMessages.XS_TRANSLATED_ATTRIBUTE_ALIAS, component.Name, replace));
                }
                else
                {
                    Log.AddWarning(string.Format(LogMessages.XS_TRANSLATED_CLASS_NAME, component, replace));
                }
                return(replace);
            }
            else
            {
                return(typeName);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Normalizes the name of the type (replaces whitespaces with <see cref="WhitespaceReplacement"/>).
        /// </summary>
        /// <typeparam name="Element">The type of the element.</typeparam>
        /// <param name="element">The element whose name should be normalized.</param>
        /// <param name="nameGetter">The function (conviniently a lambda expression) that
        /// returns name for <paramref name="element"/>.</param>
        /// <returns></returns>
        public string NormalizeTypeName <Element>(Element element, GetItemName <Element> nameGetter)
        {
            string typeName = nameGetter(element);

            if (normalizationRegex == null)
            {
                normalizationRegex = new Regex("\\s", RegexOptions.CultureInvariant);
            }
            if (normalizationRegex.IsMatch(typeName))
            {
                string replace = normalizationRegex.Replace(typeName, WhitespaceReplacement);
                if (element is PSMAttribute)
                {
                    Log.AddWarning(string.Format(LogMessages.XS_TRANSLATED_ATTRIBUTE_ALIAS, ((PSMAttribute)element).AliasOrName, replace));
                }
                else
                {
                    Log.AddWarning(string.Format(LogMessages.XS_TRANSLATED_CLASS_NAME, element, replace));
                }
                return(replace);
            }
            else
            {
                return(typeName);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Checks whether <paramref name="name"/> is unique in <paramref name="collection"/>
        /// </summary>
        /// <param name="collection">collection</param>
        /// <param name="name">name</param>
        /// <param name="getItemName">delegate of a function that returns name of object of type  <typeparamref name="Type"/></param>
        /// <param name="excluded">item that is not considered, if found in collection</param>
        /// <returns>true if <paramref name="name"/> is not used in <paramref name="collection"/></returns>
        public static bool IsNameUnique(IEnumerable <Type> collection, string name, GetItemName getItemName, Type excluded)
        {
            bool unique = true;

            foreach (Type item in collection)
            {
                if (getItemName(item) == name && !excluded.Equals(item))
                {
                    unique = false;
                }
            }
            return(unique);
        }
Beispiel #4
0
        /// <summary>
        /// Checks whether <paramref name="name"/> is unique in <paramref name="collection"/>.
        /// </summary>
        /// <param name="collection">collection</param>
        /// <param name="name">name</param>
        /// <param name="getItemName">delegate of a function that returns name of object of type  <typeparamref name="Type"/></param>
        /// <param name="conflictingItem">item whose name is in conflict if result is false</param>
        /// <returns>true if <paramref name="name"/> is not used in <paramref name="collection"/></returns>
        public static bool IsNameUnique(IEnumerable <Type> collection, string name, GetItemName getItemName, out Type conflictingItem)
        {
            bool unique = true;

            conflictingItem = default(Type);
            foreach (Type item in collection)
            {
                if (getItemName(item) == name)
                {
                    unique          = false;
                    conflictingItem = item;
                    break;
                }
            }
            return(unique);
        }
Beispiel #5
0
 /// <summary>
 /// Returns name that is not used in <paramref name="collection"/> (returned name will be of {prefix}{number} pattern)
 /// </summary>
 /// <param name="collection">collection</param>
 /// <param name="prefix">prefix of suggested name</param>
 /// <param name="getItemName">delegate of a function that returns name of object of type  <typeparamref name="Type"/></param>
 /// <returns>new unique name</returns>
 /// <example>
 /// This returns a unique name for a class
 /// NameSuggestor&lt;Class&gt;.SuggestUniqueName(ActiveDiagramView.Controller.ModelController.Model.Classes, "Class", modelClass => modelClass.Name)
 /// </example>
 public static string SuggestUniqueName(IEnumerable <Type> collection, string prefix, GetItemName getItemName)
 {
     return(SuggestUniqueName(collection, prefix, getItemName, false, true));
 }
Beispiel #6
0
        /// <summary>
        /// Returns name that is not used in <paramref name="collection"/> (returned name will be of {prefix}{number} pattern)
        /// </summary>
        /// <example>
        /// This returns a unique name for a class
        /// NameSuggestor&lt;Class&gt;.SuggestUniqueName(ActiveDiagramView.Controller.ModelController.Model.Classes, "Class", modelClass =&gt; modelClass.Name)
        /// </example>
        /// <param name="collection">collection</param>
        /// <param name="prefix">prefix of suggested name</param>
        /// <param name="getItemName">delegate of a function that returns name of object of type  <typeparamref name="Type"/></param>
        /// <param name="firstItemWithout1">if set to true, first returned name will not use number suffix</param>
        /// <param name="startWithCount">if set to <c>true</c> first suggestion will be {prefix}{number} where {number is count of
        /// itmes in <paramref name="collection"/> + 1, otherwise first suggestion will be {prefix}1.</param>
        /// <returns>new unique name</returns>
        public static string SuggestUniqueName(IEnumerable <Type> collection, string prefix, GetItemName getItemName, bool firstItemWithout1, bool startWithCount)
        {
            int c = startWithCount ? collection.Count() + 1 : 1;

            while (!IsNameUnique(collection, (c != 1 || !firstItemWithout1) ? prefix + c : prefix, getItemName))
            {
                c++;
            }

            if (c == 1 && firstItemWithout1)
            {
                return(prefix);
            }
            else
            {
                return(prefix + c);
            }
        }
 public GetItemNameWrapper(GetItemName gin)
 {
     line = gin;
 }