public List<ProjectInformationDto> GetProjectInfos(ProviderConfigElement providerInfo)
 {
     return _buildServer.GetAllProjects()
         .Where(f => f.Group.Contains(providerInfo.GroupMask))
         .Select(x => new ProjectInformationDto
         {
             Name = x.Name,
             Status = ParseFBStatus(x.Status)
         }).ToList();
 }
        public TeamCityBuildDto GetBuildInfo(ProviderConfigElement providerInfo, TeamCityBuildTypeDto buildTypeDto)
        {
            string queryUrl = string.Format(queryBuildInfoUrlFormat, providerInfo.Url, buildTypeDto.Url);

            var doc = ProcessWebRequest(providerInfo, queryUrl);

            var status = (string)doc.Elements("build").First().Attribute("status");
            var finishedDate = doc.Root.Elements("finishDate").FirstOrDefault() != null ? doc.Root.Elements("finishDate").First().Value : null;

            return new TeamCityBuildDto { FinishDate = finishedDate, Status = status };
        }
        public List<ProjectInformationDto> GetProjectInfos(ProviderConfigElement providerInfo)
        {
            ITeamCityInfoService teamCityInfoService = new TeamCityInfoService();
            var projectGroups = teamCityInfoService.GetFilteredProjectGroup(providerInfo);

            var result = new List<ProjectInformationDto>();

            foreach (var teamCityProjectGroupDto in projectGroups)
            {
                var buildTypes = teamCityInfoService.GetFilteredBuildTypes(providerInfo, teamCityProjectGroupDto);
                var builds = buildTypes.Select(teamCityBuildTypeDto => teamCityInfoService.GetBuildInfo(providerInfo, teamCityBuildTypeDto)).ToList();

                result.AddRange((from teamCityBuildDto in builds
                          select new ProjectInformationDto
                                  {
                                      Name = "Yo",
                                      Status = teamCityBuildDto.GetBuildStatus()
                                  }).ToList());
            }

            return result;
        }
        private static XDocument ProcessWebRequest(ProviderConfigElement providerInfo, string queryUrl)
        {
            var queryUri = new Uri(queryUrl);
            var webRequest = (HttpWebRequest)WebRequest.Create(queryUrl);

            var cred = new NetworkCredential(providerInfo.User, providerInfo.Password);

            var cache = new CredentialCache { { queryUri, "Basic", cred } };
            webRequest.Credentials = cache;

            var webResponse = (HttpWebResponse)webRequest.GetResponse();

            var stream = webResponse.GetResponseStream();
            var xmlDoc = new XmlDocument();
            if (stream != null)
            {
                xmlDoc.Load(stream);
            }

            var doc = XDocument.Parse(xmlDoc.OuterXml);
            return doc;
        }
        public IEnumerable<TeamCityProjectGroupDto> GetFilteredProjectGroup(ProviderConfigElement providerInfo)
        {
            string queryUrl = string.Format(queryProjectsUrlFormat, providerInfo.Url);
            var doc = ProcessWebRequest(providerInfo, queryUrl);

            var projectGroups = (from project in doc.Root.Elements("project")
                        where ((string)project.Attribute("name")).Contains(providerInfo.GroupMask)
                        select new TeamCityProjectGroupDto
                        {
                            Name = (string)project.Attribute("name"),
                            Url = (string)project.Attribute("href")
                        });

            return projectGroups;
        }
        public IEnumerable<TeamCityBuildTypeDto> GetFilteredBuildTypes(ProviderConfigElement providerInfo, TeamCityProjectGroupDto projectGroupDto)
        {
            string queryUrl = string.Format(queryBuildTypesUrlFormat, providerInfo.Url, projectGroupDto.Url);
            var doc = ProcessWebRequest(providerInfo, queryUrl);

            IEnumerable<TeamCityBuildTypeDto> buildTypes;
            if (providerInfo.Projects.Count == 0)
            {
                buildTypes = (from buildType in doc.Root.Elements("buildType")
                                select new TeamCityBuildTypeDto
                                {
                                    Name = (string) buildType.Attribute("name"),
                                    Url = (string) buildType.Attribute("href")
                                });
            }
            else
            {
                List<string> projectNames = providerInfo.Projects.Cast<ProjectConfigElement>().Select(x => x.Name).ToList();

                buildTypes = (from buildType in doc.Root.Elements("buildTypes").First().Elements("buildType")
                              where projectNames.Contains((string)buildType.Attribute("name"))
                              select new TeamCityBuildTypeDto
                                    {
                                        Name = (string)buildType.Attribute("name"),
                                        Url = (string)buildType.Attribute("href")
                                    });
            }

            return buildTypes;
        }