示例#1
0
        public RepoReleaseVariableVM BuildTokenData(string releaseId)
        {
            Classes.VSTS.VstsReleaseDefinition def = null;

            ////TODO: add timeout stuff
            while (_cache.Get <Classes.VSTS.VstsReleaseDefinitions>(CACHE.RELEASES) == null)
            {
            }

            def = _cache.Get <Classes.VSTS.VstsReleaseDefinitions>(CACHE.RELEASES).ReleaseDefinitions.Where(t => t.Id == releaseId).FirstOrDefault();

            RepoReleaseVariableVM item = new RepoReleaseVariableVM();

            item.Columns = new List <VSTSDataColumn>();
            List <List <string> > tempData = new List <List <string> >();

            if (def != null)
            {
                // add columns
                var tok = new VSTSDataColumn("Token", typeof(string));
                tok.Caption  = "Token";
                tok.IsLocked = true;
                item.Columns.Add(tok);
                foreach (var col in def.Environments)
                {
                    tok          = new VSTSDataColumn(col.Name, typeof(string));
                    tok.Caption  = col.Name;
                    tok.IsLocked = false;

                    tok.ColumnName = System.Text.RegularExpressions.Regex
                                     .Replace(tok.ColumnName, @"[\[\]\\\^\$\.\|\?\*\+\(\)\{\}%,;><!@#&\-\+\ /]", string.Empty);

                    item.Columns.Add(tok);
                }
                // now values.
                foreach (var env in def.Environments)
                {
                    foreach (var v in env.Variables)
                    {
                        string varName  = v.Key;
                        string varValue = ((Classes.VSTS.VstsValue)v.Value).Value;
                        string envName  = env.Name;

                        // I could use RANK but to be safe, I'll use the column position to know where to put
                        // variable value
                        bool found    = false;
                        int  foundPos = -1;
                        for (int j = 0; j < tempData.Count; j++)
                        {
                            if (tempData[j][0] == varName)
                            {
                                found    = true;
                                foundPos = j;
                                break;
                            }
                        }
                        var pos = item.Columns.FindIndex(t => t.Caption == envName);

                        if (!found)
                        {
                            var toAdd = new List <string>();
                            for (int x = 0; x < item.Columns.Count; x++)
                            {
                                toAdd.Add(string.Empty);
                            }
                            toAdd[0]   = varName;
                            toAdd[pos] = varValue;
                            tempData.Add(toAdd);
                        }
                        else // found so obtain position of env
                        {
                            var fullItem = tempData[foundPos];
                            fullItem[pos] = varValue;
                        }
                    }
                }

                // Now build dictionary
                item.Data = new List <Dictionary <string, string> >();
                foreach (var element in tempData)
                {
                    var itemToAdd = new Dictionary <string, string>();
                    for (int x = 0; x < item.Columns.Count; x++)
                    {
                        itemToAdd.Add(item.Columns[x].ColumnName, element[x]);
                    }
                    item.Data.Add(itemToAdd);
                }
            }
            return(item);
        }
示例#2
0
        public ActionResult GetVariablesForDefinition([DataSourceRequest] DataSourceRequest request, string releaseid)
        {
            RepoReleaseVariableVM item = BuildTokenData(releaseid);

            return(Json(item.Data.ToDataSourceResult(request)));
        }