コード例 #1
0
        protected override IEnumerable <Models.Team> DoGetItems()
        {
            var team            = GetParameter <object>(nameof(GetTeam.Team));
            var current         = GetParameter <bool>(nameof(GetTeam.Current));
            var includeMembers  = GetParameter <bool>(nameof(GetTeam.QueryMembership));
            var includeSettings = GetParameter <bool>(nameof(GetTeam.IncludeSettings));
            var defaultTeam     = GetParameter <bool>(nameof(GetTeam.Default));

            var(_, tp) = Cmdlet.GetCollectionAndProject();
            var client = GetClient <TeamHttpClient>();

            while (true)
            {
                switch (team)
                {
                case Guid g:
                {
                    team = g.ToString();
                    continue;
                }

                case { } when defaultTeam:
                {
                    Logger.Log("Get default team");
                    var projectClient = GetClient <ProjectHttpClient>();
                    var props         = projectClient
                                        .GetProjectPropertiesAsync(tp.Id)
                                        .GetResult("Error retrieving project's default team");
                    team = props.Where(p => p.Name.Equals("System.Microsoft.TeamFoundation.Team.Default"))
                           .FirstOrDefault()?.Value;
                    defaultTeam = false;
                    continue;
                }

                case null:
                case { } when current:
                {
                    Logger.Log("Get currently connected team");

                    if (CurrentConnections.Team == null)
                    {
                        yield break;
                    }
                    team    = CurrentConnections.Team.Id;
                    current = false;
                    continue;
                }

                case WebApiTeam t:
                {
                    if (includeMembers || includeSettings)
                    {
                        team = t.Id.ToString();
                        continue;
                    }

                    yield return(CreateTeamObject(t));

                    yield break;
                }

                case string s when !s.IsWildcard():
                {
                    var result = client.GetTeamAsync(tp.Name, s)
                                 .GetResult($"Error getting team '{s}'");
                    yield return(CreateTeamObject(result, includeMembers, includeSettings));

                    yield break;
                }

                case string s:
                {
                    foreach (var result in client.GetTeamsAsync(tp.Name)
                             .GetResult($"Error getting team(s) '{s}'")
                             .Where(t => t.Name.IsLike(s)))
                    {
                        yield return(CreateTeamObject(result, includeMembers, includeSettings));
                    }
                    yield break;
                }

                default:
                {
                    throw new ArgumentException($"Invalid or non-existent team {team}");
                }
                }
            }
        }