/// <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); } }
/// <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); } }
/// <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); }
/// <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); }
/// <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<Class>.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)); }
/// <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<Class>.SuggestUniqueName(ActiveDiagramView.Controller.ModelController.Model.Classes, "Class", modelClass => 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; }