public virtual Namespace <Models.View> GetNamespace(Site site, params string[] exculdes) { var views = All(site, "").Where(it => !exculdes.Any(ex => ex.EqualsOrNullEmpty(it.Name, StringComparison.OrdinalIgnoreCase))); Dictionary <string, Namespace <Models.View> > namespaces = new Dictionary <string, Namespace <Models.View> >(StringComparer.CurrentCultureIgnoreCase); Namespace <Models.View> root = new Namespace <Models.View>(); foreach (var item in views) { string parentName = ""; Namespace <Models.View> last = null; var names = item.Name.Split(".".ToArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var name in names.Take(names.Length - 1)) { string fullName = ""; if (string.IsNullOrEmpty(parentName)) { fullName = name; } else { fullName = parentName + "." + name; } if (!namespaces.ContainsKey(fullName)) { last = new Namespace <Models.View>() { Name = name, FullName = fullName }; namespaces[fullName] = last; if (!string.IsNullOrEmpty(parentName)) { namespaces[parentName].AddNamespace(last); } else { root.AddNamespace(last); } } else { last = namespaces[fullName]; } parentName = fullName; } if (last == null) { root.AddEntry(item.Name, item); } else { last.AddEntry(item.Name, item); } } return(root); }
public static Namespace <T> Extract <T>(IEnumerable <T> list) where T : PathResource { Dictionary <string, Namespace <T> > namespaces = new Dictionary <string, Namespace <T> >(StringComparer.CurrentCultureIgnoreCase); Namespace <T> root = new Namespace <T>(); foreach (var item in list) { string parentName = ""; Namespace <T> last = null; var names = item.Name.Split(".".ToArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var name in names.Take(names.Length - 1)) { string fullName = ""; if (string.IsNullOrEmpty(parentName)) { fullName = name; } else { fullName = parentName + "." + name; } if (!namespaces.ContainsKey(fullName)) { last = new Namespace <T>() { Name = name, FullName = fullName }; namespaces[fullName] = last; if (!string.IsNullOrEmpty(parentName)) { namespaces[parentName].AddNamespace(last); } else { root.AddNamespace(last); } } else { last = namespaces[fullName]; } parentName = fullName; } if (last == null) { root.AddEntry(item.Name, item); } else { last.AddEntry(item.Name, item); } } return(root); }