コード例 #1
0
ファイル: Indexer.cs プロジェクト: Umaaz/Komodo
 public static void Index(Film film)
 {
     var writer = GetWriter();
     writer.AddDocument(DocFactory.CreateFilmDocument(film));
     writer.Optimize();
     writer.Commit();
 }
コード例 #2
0
ファイル: DocFactory.cs プロジェクト: Umaaz/Komodo
        public static Document CreateFilmDocument(Film film)
        {
            var d = new Document();
            var nf = NewField("Id", film.Id.ToString());
            if(nf != null)
                d.Add(nf);
            nf = NewField("Title", film.Title);
            if (nf != null)
                d.Add(nf);
            nf = NewField("Synopsis", film.Synopsis);
            if (nf != null)
                d.Add(nf);
            nf = NewField("ReleaseDate", film.ReleaseDate);
            if (nf != null)
                d.Add(nf);

            foreach (var director in film.Directors)
            {
                nf = NewField("Director", director.Name);
                if (nf != null)
                    d.Add(nf);
            }

            foreach (var person in film.Writers)
            {
                nf = NewField("Person", person.Name);
                if (nf != null)
                    d.Add(nf);
            }

            foreach (var genre in film.Genres)
            {
                nf = NewField("Genre", genre.GenreName);
                if (nf != null)
                    d.Add(nf);
            }

            foreach (var role in film.Cast)
            {
                nf = NewField("Cast", role.ToString());
                if (nf != null)
                    d.Add(nf);
            }

            foreach (var keyWord in film.KeyWords)
            {
                nf = NewField("Keyword", keyWord.Word);
                if (nf != null)
                    d.Add(nf);
            }

            return d;
        }
コード例 #3
0
ファイル: Add.cs プロジェクト: Umaaz/Komodo
        public bool AddFilm(Film film)
        {
            if (film == null)
                throw new ArgumentNullException("film");

            var mayCommit = true;
            Film filmToAdd;
            using(var tx = _session.BeginTransaction())
            {
                if (_session.Query<Film>().Where(x => x.Title == film.Title).SingleOrDefault() != null)
                    return false;
                filmToAdd = new Film
                                    {
                                        Title = film.Title,
                                        Synopsis = film.Synopsis,
                                        ReleaseDate = film.ReleaseDate,
                                        Url = film.Url,
                                        Files = film.Files
                                    };

                FilterPersonCollection(film.Directors,filmToAdd);
                FilterPersonCollection(film.Writers, filmToAdd);

                foreach (var genre in film.Genres)
                {
                    var genre1 = genre;
                    var gen = GetFromGenreCache(genre1.GenreName) ??
                              _session.Query<Genre>().Where(x => x.GenreName == genre1.GenreName).SingleOrDefault() ??
                              genre;
                    AddToGenreCache(gen);
                    filmToAdd.Genres.Add(gen);
                }

                foreach (var keyWord in film.KeyWords)
                {
                    var keyWord1 = keyWord;
                    var key = GetFromKeyWordCache(keyWord1.Word) ??
                              _session.Query<KeyWord>().Where(x => x.Word == keyWord1.Word).SingleOrDefault() ??
                              keyWord;
                    AddToKeyWordCache(key);
                    filmToAdd.KeyWords.Add(key);
                }

                foreach (var role in film.Cast)
                {
                    var role1 = role;
                    var act = GetFromPersonCache(role1.Actor.Name) ??
                             _session.Query<Person>().Where(x => x.Name == role1.Actor.Name).SingleOrDefault() ??
                             role.Actor;
                    AddToPersonCache(act);
                    filmToAdd.Cast.Add(new Role{Actor = act,CharacterName = role1.CharacterName,Id = role1.Id});
                }

                var validator = new FilmValidator();
                var results = validator.Validate(filmToAdd);
                if (results.IsValid)
                {
                    _session.Save(filmToAdd);
                }
                else
                    mayCommit = false;
                if(mayCommit)
                    tx.Commit();
            }
            Index.Indexer.Index(filmToAdd);
            return mayCommit;
        }
コード例 #4
0
ファイル: Add.cs プロジェクト: Umaaz/Komodo
 private void FilterPersonCollection(IList<Person> collection, Film filmToAdd)
 {
     foreach (var person in collection)
     {
         var person1 = person;
         var per = GetFromPersonCache(person.Name) ??
                   _session.Query<Person>().Where(x => x.Name == person1.Name).SingleOrDefault() ??
                   person;
         AddToPersonCache(per);
         filmToAdd.Writers.Add(per);
     }
 }
コード例 #5
0
ファイル: ImdbFilmFetcher.cs プロジェクト: Umaaz/Komodo
 private static Film GetFilmFromImdbResult(ImdbResult resultToCollect)
 {
     var film = new Film();
     var filmSource = PageFetcher.GetSource(resultToCollect.Url);
     var parts = GetDivParts(filmSource);
     if (parts.Count != 5)
         return null;
     film.Title = resultToCollect.Title;
     film.ReleaseDate = resultToCollect.Year;
     film.Url = resultToCollect.Url;
     film.Directors = GetDirectors(parts[0]);
     film.Writers = GetWriters(parts[1]);
     film.Synopsis = GetStoryline(parts[2]);
     film.KeyWords = GetKeyWords(parts[3]);
     film.Genres = GetGenres(parts[4]);
     parts = GetTableParts(filmSource);
     if (parts.Count != 1)
         return null;
     film.Cast = GetCast(parts[0]);
     return film;
 }