/// <summary> /// The method creates tree from path strings - used for AreaPath and IterationPath /// </summary> /// <param name="paths">All paths to use to create tree.</param> /// <returns>Created tree from given paths.</returns> private static IEnumerable <PathElement> CreatePathTree(IEnumerable <string> paths) { var retVal = new List <PathElement>(); if (paths == null) { return(retVal); } foreach (var path in paths) { var parts = new List <string>(path.Split(PathElement.ConstDelimiter[0])); var firstPart = parts[0]; parts.RemoveAt(0); string newParts = string.Empty; if (parts.Count > 0) { newParts = string.Join(PathElement.ConstDelimiter, parts.ToArray()); } var child = retVal.FirstOrDefault(pe => pe.PathPart == firstPart); if (child == null) { var pe = new PathElement(null, firstPart); pe.Add(newParts); retVal.Add(pe); } else { child.Add(newParts); } } retVal.Sort((a, b) => string.Compare(a.PathPart, b.PathPart, CultureInfo.CurrentCulture, CompareOptions.OrdinalIgnoreCase)); return(retVal); }