예제 #1
0
        /// <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;
            }
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
 /// <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));
 }