/// <summary> /// Update the current filter property. /// </summary> /// <param name="filterString">The string representation of the new filter.</param> private void SetCurrentFilter(string filterString) { switch (filterString) { case "Date": CurrentFilter = SermonFilter.Date; break; case "Location": default: CurrentFilter = SermonFilter.Location; break; case "Speaker": CurrentFilter = SermonFilter.Speaker; break; case "Theme": CurrentFilter = SermonFilter.Theme; break; case "Title": CurrentFilter = SermonFilter.Title; break; } }
/// <summary> /// Does the actual sorting. /// </summary> /// <param name="filter">The filter to be used to sort.</param> /// <param name="sermons">The non-null list of sermons to be sorted.</param> /// <returns>List of sorted sermons.</returns> private static List <SortedSermons> SortActuator(SermonFilter filter, List <Sermon> sermons) { List <SortedSermons> sortedSermons = new List <SortedSermons>(); switch (filter) { case SermonFilter.Date: HashSet <int> years = new HashSet <int>(); foreach (Sermon sermon in sermons) { years.Add(sermon.DateCreated.Year); } foreach (int year in years) { AddToSortedList(ref sortedSermons, year.ToString(), from sermon in sermons where sermon.DateCreated.Year == year select sermon); } break; case SermonFilter.Location: var locations = Location.Read(); if (locations == null) { break; } foreach (Location location in locations) { AddToSortedList(ref sortedSermons, location.Name, from sermon in sermons where sermon.Location.Name == location.Name select sermon); } break; case SermonFilter.Title: HashSet <char> chars = new HashSet <char>() { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; foreach (char c in chars) { AddToSortedList(ref sortedSermons, c.ToString(), from sermon in sermons where char.ToLower(sermon.Title[0]) == c select sermon); } break; case SermonFilter.Theme: var themes = Theme.Read(); if (themes == null) { break; } foreach (Theme theme in themes) { AddToSortedList(ref sortedSermons, theme.Name, sermons.Where(sermon => sermon.Themes != null && sermon.Themes.Find(x => x.Name == theme.Name) != null).Select(sermon => sermon).ToList()); } break; case SermonFilter.Speaker: var speakers = Speaker.Read(); if (speakers == null) { break; } foreach (Speaker speaker in speakers) { AddToSortedList(ref sortedSermons, speaker.Name, sermons.Where(sermon => sermon.Speakers != null && sermon.Speakers.Find(x => x.Name == speaker.Name) != null).Select(sermon => sermon).ToList()); } break; } return(sortedSermons); }
/// <summary> /// Sort sermons based on the filter passed. /// </summary> /// <param name="filter">The filter to be used.</param> /// <param name="sermons">List of sermons to be sorted.</param> /// <returns>List of sorted sermons or null.</returns> public static List <SortedSermons> Sort(SermonFilter filter, List <Sermon> sermons) { return(sermons == null ? null : SortActuator(filter, sermons)); }