public bool ExportTeams()

in src/VstsDemoBuilder/Services/ExtractorService.cs [425:660]


        public bool ExportTeams(Configuration con, string processTemplate, string projectID)
        {
            try
            {
                string defaultTeamID = string.Empty;
                VstsRestAPI.Extractor.ClassificationNodes nodes = new VstsRestAPI.Extractor.ClassificationNodes(con);
                TeamList _team = new TeamList();
                string ProjectPropertyVersion = System.Configuration.ConfigurationManager.AppSettings["ProjectPropertyVersion"];
                con.VersionNumber = ProjectPropertyVersion;
                con.ProjectId = projectID;
                Projects projects = new Projects(con);
                projectProperties = projects.GetProjectProperties();
                if (projectProperties.count > 0)
                {
                    defaultTeamID = projectProperties.value.Where(x => x.name == "System.Microsoft.TeamFoundation.Team.Default").FirstOrDefault().value;
                }
                _team = nodes.ExportTeamList(defaultTeamID);
                if (_team.value != null)
                {
                    AddMessage(con.Id, "Teams");

                    string fetchedJson = JsonConvert.SerializeObject(_team.value, Formatting.Indented);
                    if (fetchedJson != "")
                    {
                        if (!Directory.Exists(extractedTemplatePath + con.Project + "\\Teams"))
                        {
                            Directory.CreateDirectory(extractedTemplatePath + con.Project + "\\Teams");
                        }
                        File.WriteAllText(extractedTemplatePath + con.Project + "\\Teams\\Teams.json", fetchedJson);

                        List<string> boardTypes = new List<string>();
                        boardTypes.Add("Epics");
                        if (processTemplate.ToLower() == "agile")
                        {
                            boardTypes.Add("Features");
                            boardTypes.Add("Stories");
                        }
                        else if (processTemplate.ToLower() == "basic")
                        {
                            boardTypes.Add("Issues");
                        }
                        else if (processTemplate.ToLower() == "scrum")
                        {
                            boardTypes.Add("Features");
                            boardTypes.Add("Backlog Items");
                        }

                        foreach (var team in _team.value)
                        {
                            List<BoardColumnResponseScrum.ColumnResponse> columnResponsesScrum = new List<BoardColumnResponseScrum.ColumnResponse>();
                            List<BoardColumnResponseAgile.ColumnResponse> columnResponsesAgile = new List<BoardColumnResponseAgile.ColumnResponse>();
                            List<BoardColumnResponseBasic.ColumnResponse> columnResponsesBasic = new List<BoardColumnResponseBasic.ColumnResponse>();
                            List<ExportBoardRows.Rows> boardRows = new List<ExportBoardRows.Rows>();

                            ExportTeamSetting.Setting listTeamSetting = new ExportTeamSetting.Setting();

                            List<JObject> jObjCardFieldList = new List<JObject>();
                            List<JObject> jObjcardStyleList = new List<JObject>();
                            string teamFolderPath = extractedTemplatePath + con.Project + "\\Teams\\" + team.name;
                            if (!Directory.Exists(teamFolderPath))
                            {
                                Directory.CreateDirectory(teamFolderPath);
                            }
                            //Export Board Colums for each team
                            con.Team = team.name;

                            ClassificationNodes teamNodes = new ClassificationNodes(con);
                            foreach (var boardType in boardTypes)
                            {
                                var response = teamNodes.ExportBoardColums(boardType);
                                if (response.IsSuccessStatusCode && response.StatusCode == System.Net.HttpStatusCode.OK)
                                {
                                    if (processTemplate.ToLower() == "scrum")
                                    {
                                        string res = response.Content.ReadAsStringAsync().Result;
                                        BoardColumnResponseScrum.ColumnResponse scrumColumns = JsonConvert.DeserializeObject<BoardColumnResponseScrum.ColumnResponse>(res);
                                        scrumColumns.BoardName = boardType;
                                        columnResponsesScrum.Add(scrumColumns);
                                    }
                                    else if (processTemplate.ToLower() == "agile")
                                    {
                                        string res = response.Content.ReadAsStringAsync().Result;
                                        BoardColumnResponseAgile.ColumnResponse agileColumns = JsonConvert.DeserializeObject<BoardColumnResponseAgile.ColumnResponse>(res);
                                        agileColumns.BoardName = boardType;
                                        columnResponsesAgile.Add(agileColumns);
                                    }
                                    else if (processTemplate.ToLower() == "basic")
                                    {
                                        string res = response.Content.ReadAsStringAsync().Result;
                                        BoardColumnResponseBasic.ColumnResponse basicColumns = JsonConvert.DeserializeObject<BoardColumnResponseBasic.ColumnResponse>(res);
                                        basicColumns.BoardName = boardType;
                                        columnResponsesBasic.Add(basicColumns);
                                    }
                                    AddMessage(con.Id, "Board Columns");
                                    Thread.Sleep(2000);
                                }
                                else
                                {
                                    var errorMessage = response.Content.ReadAsStringAsync();
                                    string error = Utility.GeterroMessage(errorMessage.Result.ToString());
                                    teamNodes.LastFailureMessage = error;
                                    AddMessage(con.Id.ErrorId(), "Error occured while exporting Board Columns: " + teamNodes.LastFailureMessage);
                                }

                                //Export board rows for each team
                                ExportBoardRows.Rows rows = teamNodes.ExportBoardRows(boardType);
                                if (rows.value != null && rows.value.Count > 0)
                                {
                                    rows.BoardName = boardType;
                                    boardRows.Add(rows);
                                    AddMessage(con.Id, "Board Rows");
                                    Thread.Sleep(2000);
                                }
                                else if (!string.IsNullOrEmpty(teamNodes.LastFailureMessage))
                                {
                                    AddMessage(con.Id.ErrorId(), "Error occured while exporting Board Rows: " + teamNodes.LastFailureMessage);
                                }


                                //Export Card Fields for each team
                                var cardFieldResponse = teamNodes.ExportCardFields(boardType);
                                if (cardFieldResponse.IsSuccessStatusCode && cardFieldResponse.StatusCode == System.Net.HttpStatusCode.OK)
                                {
                                    string res = cardFieldResponse.Content.ReadAsStringAsync().Result;
                                    JObject jObj = JsonConvert.DeserializeObject<JObject>(res);
                                    jObj["BoardName"] = boardType;
                                    jObjCardFieldList.Add(jObj);
                                    AddMessage(con.Id, "Card fields Definition");

                                }
                                else
                                {
                                    var errorMessage = cardFieldResponse.Content.ReadAsStringAsync();
                                    string error = Utility.GeterroMessage(errorMessage.Result.ToString());
                                    teamNodes.LastFailureMessage = error;
                                    AddMessage(con.Id.ErrorId(), "Error occured while exporting Card Fields: " + teamNodes.LastFailureMessage);
                                }

                                //// Export card styles for each team
                                var cardStyleResponse = teamNodes.ExportCardStyle(boardType);
                                if (cardStyleResponse.IsSuccessStatusCode && cardStyleResponse.StatusCode == System.Net.HttpStatusCode.OK)
                                {
                                    string res = cardStyleResponse.Content.ReadAsStringAsync().Result;
                                    res = res.Replace(con.Project, "$ProjectName$");
                                    JObject jObj = JsonConvert.DeserializeObject<JObject>(res);
                                    jObj["BoardName"] = boardType;
                                    var style = jObj;
                                    style["url"] = "";
                                    style["_links"] = "{}";
                                    var tagStyle = style["rules"]["tagStyle"];
                                    if (tagStyle == null)
                                    {
                                        style["rules"]["tagStyle"] = new JArray();
                                    }
                                    jObjcardStyleList.Add(jObj);
                                    AddMessage(con.Id, "Card style");

                                }
                                else
                                {
                                    var errorMessage = cardStyleResponse.Content.ReadAsStringAsync();
                                    string error = Utility.GeterroMessage(errorMessage.Result.ToString());
                                    teamNodes.LastFailureMessage = error;
                                    AddMessage(con.Id.ErrorId(), "Error occured while exporting Card Styles: " + teamNodes.LastFailureMessage);
                                }
                            }
                            //Export Team Setting for each team
                            if (processTemplate.ToLower() != "basic")
                            {
                                ExportTeamSetting.Setting teamSetting = teamNodes.ExportTeamSetting();
                                if (teamSetting.backlogVisibilities != null)
                                {
                                    listTeamSetting = teamSetting;
                                    AddMessage(con.Id, "Team Settings Definition");
                                }
                            }
                            else if (!string.IsNullOrEmpty(teamNodes.LastFailureMessage))
                            {
                                AddMessage(con.Id.ErrorId(), "Error occured while exporting Team Setting: " + teamNodes.LastFailureMessage);
                            }

                            if (columnResponsesAgile.Count > 0)
                            {
                                File.WriteAllText(teamFolderPath + "\\BoardColumns.json", JsonConvert.SerializeObject(columnResponsesAgile, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }));
                            }
                            if (columnResponsesScrum.Count > 0)
                            {
                                File.WriteAllText(teamFolderPath + "\\BoardColumns.json", JsonConvert.SerializeObject(columnResponsesScrum, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }));
                            }
                            if (columnResponsesBasic.Count > 0)
                            {
                                File.WriteAllText(teamFolderPath + "\\BoardColumns.json", JsonConvert.SerializeObject(columnResponsesBasic, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }));
                            }
                            if (boardRows.Count > 0)
                            {
                                File.WriteAllText(teamFolderPath + "\\BoardRows.json", JsonConvert.SerializeObject(boardRows, Formatting.Indented));
                            }
                            if (!string.IsNullOrEmpty(listTeamSetting.bugsBehavior))
                            {
                                File.WriteAllText(teamFolderPath + "\\TeamSetting.json", JsonConvert.SerializeObject(listTeamSetting, Formatting.Indented));
                            }
                            if (jObjCardFieldList.Count > 0)
                            {
                                File.WriteAllText(teamFolderPath + "\\CardFields.json", JsonConvert.SerializeObject(jObjCardFieldList, Formatting.Indented));
                            }
                            if (jObjcardStyleList.Count > 0)
                            {
                                File.WriteAllText(teamFolderPath + "\\CardStyles.json", JsonConvert.SerializeObject(jObjcardStyleList, Formatting.Indented));
                            }
                        }

                        return true;
                    }
                    else if (!string.IsNullOrEmpty(nodes.LastFailureMessage))
                    {
                        AddMessage(con.Id.ErrorId(), nodes.LastFailureMessage);
                        string error = nodes.LastFailureMessage;
                        return false;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    AddMessage(con.Id.ErrorId(), nodes.LastFailureMessage);
                    return false;
                }
            }
            catch (Exception ex)
            {
                logger.Info(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") + "\t" + ex.Message + "\n" + ex.StackTrace + "\n");
            }
            return false;
        }