using System.Collections.Generic; using System.Linq; using moviestore.core.domain.comparisons; using moviestore.core.infrastructure.extensions; using trainingprep.collections; namespace moviestore.core.domain { public class MovieLibrary { private IList library; public MovieLibrary(IList list_of_movies) { library = list_of_movies; } public IEnumerable all_movies() { foreach (var movie in library) { yield return movie; } } public void add(Movie inMovie) { foreach (var movie in library) { if (inMovie.title == movie.title) return; } library.Add(inMovie); } public IEnumerable sort_all_movies_by_title_descending() { return all_movies().sort_using(Sort.on_descending(x => x.title)); } public IEnumerable all_movies_published_by_pixar() { return from movie in all_movies() where movie.production_studio == ProductionStudio.Pixar select movie; //return new List(all_movies()).FindAll(x => x.production_studio==ProductionStudio.Pixar); //return all_movies().satisfied_by(Movie.is_published_by(ProductionStudio.Pixar)); } public IEnumerable all_movies_not_published_by_pixar() { return all_movies().satisfied_by(Movie.is_published_by(ProductionStudio.Pixar).Not()); } public IEnumerable all_movies_published_by_pixar_or_disney() { return all_movies().satisfied_by( Movie.is_published_by(ProductionStudio.Pixar).Or( Movie.is_published_by(ProductionStudio.Disney))); } public IEnumerable sort_all_movies_by_title_ascending() { return all_movies().sort_using(Sort.on(x => x.title)); } public IEnumerable sort_all_movies_by_movie_studio_and_year_published() { //Studio Ratings (highest to lowest) //MGM //Pixar //Dreamworks //Universal //Disney IList rankings = new List { ProductionStudio.MGM, ProductionStudio.Pixar, ProductionStudio.Dreamworks, ProductionStudio.Universal, ProductionStudio.Disney }; return all_movies().sort_using(Sort.with(new ProductionStudioComparer(rankings)).then_by(x => x.date_published.Year)); } public IEnumerable all_movies_published_after(int year) { return all_movies().satisfied_by(Movie.published_after(year)); } public IEnumerable all_movies_published_between_years(int startingYear, int endingYear) { return all_movies().satisfied_by(Movie.published_after(startingYear-1).And( Movie.published_before(endingYear))); } public IEnumerable all_kid_movies() { return all_movies().satisfied_by(Movie.is_of_genre(Genre.kids)); } public IEnumerable all_action_movies() { return all_movies().satisfied_by(Movie.is_of_genre(Genre.action)); } public IEnumerable sort_all_movies_by_date_published_descending() { return all_movies().sort_using(Sort.on_descending(x => x.date_published)); } public IEnumerable sort_all_movies_by_date_published_ascending() { return all_movies().sort_by(new date_published_comparer()); } } }