public static void Index(Film film) { var writer = GetWriter(); writer.AddDocument(DocFactory.CreateFilmDocument(film)); writer.Optimize(); writer.Commit(); }
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; }
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; }
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); } }
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; }