public List<Tuple<string, string>> OrderSecurityTokens(AccessCodeSet accessCodeSet, List<Tuple<string, string>> sortedList, string newStartColor) { var startColor = accessCodeSet.StartColor; if (!string.IsNullOrEmpty(newStartColor)) startColor = newStartColor; if (accessCodeSet.TokenList.Count(x => x.Item1.Equals(startColor)) == 1) { sortedList.Add(accessCodeSet.TokenList.Single(x => x.Item1.Equals(startColor))); accessCodeSet.TokenList = accessCodeSet.TokenList.ToList().Except(new List<Tuple<string, string>> { sortedList.Last() }).ToList(); } else { var listOfTokensWithSameStartColor = accessCodeSet.TokenList.Where(x => x.Item1.Equals(startColor)); if (!listOfTokensWithSameStartColor.Any()) return sortedList; foreach (var token in listOfTokensWithSameStartColor) { if (accessCodeSet.TokenList.Count(x => x.Item1.Equals(token.Item2)) == 1) { sortedList.Add(token); accessCodeSet.TokenList = accessCodeSet.TokenList.ToList().Except(new List<Tuple<string, string>> { token }).ToList(); sortedList.Add(accessCodeSet.TokenList.Single(x => x.Item1.Equals(token.Item2))); accessCodeSet.TokenList = accessCodeSet.TokenList.ToList().Except(new List<Tuple<string, string>> { sortedList.Last() }).ToList(); } } } if (accessCodeSet.TokenList.Any()) OrderSecurityTokens(accessCodeSet, sortedList, sortedList.Last().Item2); return sortedList; }
public AccessCodeSet CreateAccessCodeSet(string input) { var codeSet = new AccessCodeSet(); var list = GetInputSets(input); codeSet.StartColor = list.First().Split(',').First().Trim(); codeSet.EndColor = list.First().Split(',').Skip(1).First().Trim(); foreach (var token in list.Skip(1)) codeSet.TokenList.Add(CreateSingleCodeToken(token)); return codeSet; }