/// <summary> /// Creates an internal representation of the given projects query hierarchy /// </summary> /// <param name="project">The project</param> /// <param name="q">The current queryfolder</param> /// <param name="qi">The internal wrapper for the current queryfolder</param> /// <param name="level">The recursion depth</param> private void ProcessQueryHierarchy(Project project, QueryFolder q, TfsQueryFolder qi, int level) { foreach (QueryItem item in q) { if (item is QueryFolder) { TfsQueryFolder sub = new TfsQueryFolder() { Title = item.Name, Children = new List <ITfsQueryItem>(), Parent = qi, Level = level }; qi.Children.Add(sub); ProcessQueryHierarchy(project, item as QueryFolder, sub, level + 1); } else { var wis = TfsTeamProjectCollection.GetService <WorkItemStore>(); TfsQuery sub = new TfsQuery(wis, project) { Title = item.Name, Parent = qi, QueryDefinition = (item as QueryDefinition), Level = level }; qi.Children.Add(sub); } } }
/// <summary> /// Entry point method for fetching all queries for a given project (the active one) /// </summary> /// <returns>The root query folder for the active project</returns> private ITfsQueryFolder GetAllQueries() { try { var wis = TfsTeamProjectCollection.GetService <WorkItemStore>(); var project = wis.Projects[ActiveTeamProject.Name]; var queryHierarchy = project.QueryHierarchy; var result = new TfsQueryFolder() { Title = queryHierarchy.Name, Children = new List <ITfsQueryItem>(), Parent = null, Level = 0 }; ProcessQueryHierarchy(project, queryHierarchy, result, 1); return(result); } catch (NullReferenceException) { // This can happen due to a parallel refresh (ActiveTeamProject switches to null) return(null); } }