Exemplo n.º 1
0
        private List <PocoBook> FetchBooksInfoFromResponse(Rootobject root)
        {
            if (root == null || root.items == null)
            {
                return(new List <PocoBook>());
            }

            List <PocoBook> retval = new List <PocoBook>();

            for (int i = 0; i < root.items.Length; i++)
            {
                Collection <string> authors = new Collection <string>();

                Array.ForEach(root.items[i].volumeInfo.authors ?? Array.Empty <string>(), str => authors.Add(str));

                PocoBook abook = new PocoBook(root.File.FullName, root.items[i].volumeInfo.title,
                                              authors, string.Empty, string.Empty)
                {
                    Description   = root.items[i].volumeInfo.description,
                    Language      = root.items[i].volumeInfo.language,
                    Publisher     = root.items[i].volumeInfo.publisher,
                    ImageLink     = root.items[i].volumeInfo.imageLinks?.smallThumbnail,
                    PublishedDate = root.items[i].volumeInfo.publishedDate.ToDateTime(),
                    Isbn          = root.items[i].ToIsbn() ?? root.File.UniqueIdentifier(),
                    Authors       = authors
                };
                Array.ForEach(root.items[i].volumeInfo.categories ?? Array.Empty <string>(), str => abook.Categories.Add(str));
                retval.Add(abook);
            }

            return(retval);
        }
Exemplo n.º 2
0
        public void OnNewQueryFilter(string message)
        {
            BooksCollectedDataMapper mapper = new BooksCollectedDataMapper(ConfData.RepositoryHost, ConfData.DatabaseName);

            if (string.IsNullOrEmpty(message))
            {
                foreach (var book in mapper.Read())
                {
                    if (!Books.Contains(book))
                    {
                        Books.Add(book);
                    }
                }
                return;
            }

            PocoBook titlebook = new PocoBook("");

            titlebook.Title = message;

            var filtered = mapper.Read(titlebook);

            if (filtered.Any())
            {
                Books.Clear();
            }

            foreach (var book in filtered)
            {
                Books.Add(book);
            }
        }
Exemplo n.º 3
0
        public static BookAtHome AnalyzeResults(PocoBook minimalbookinfo, List <PocoBook> booksFromProvider, IBookParserTrace trace)
        {
            trace?.TraceInfo("AnalyzeResults start");
            if (booksFromProvider == null || booksFromProvider.Count == 0)
            {
                if (!String.IsNullOrEmpty(minimalbookinfo?.Title) && minimalbookinfo.Authors.Count != 0)
                {
                    minimalbookinfo.BookReliability = PocoBook.Reliability.Medium;
                    return(minimalbookinfo);
                }

                throw new ArgumentNullException(nameof(booksFromProvider));
            }

            if (booksFromProvider.Count == 1)
            {
                booksFromProvider.First().BookReliability = PocoBook.Reliability.High;
                return(booksFromProvider.First());
            }

            if (!string.IsNullOrEmpty(minimalbookinfo.SearchPhrase))
            {
                booksFromProvider.First().BookReliability = PocoBook.Reliability.Medium;
                return(booksFromProvider.First());
            }

            return(FindTheBookInfoFromCollection(minimalbookinfo.File, booksFromProvider, minimalbookinfo.SearchTitle, trace));
        }
Exemplo n.º 4
0
        public void TestReadBookByLanguage_NotExisting_ReturnNoBooks()
        {
            PocoBook book = new PocoBook();

            book.Language = "rr";
            var result = mybooks.Read(book);

            Assert.AreEqual(0, result.Count);
        }
Exemplo n.º 5
0
        public void TestReadBookByLanguage_Correctlanguage_ReturnManyBooks()
        {
            PocoBook book = new PocoBook();

            book.Language = "it";
            var result = mybooks.Read(book);

            Assert.AreEqual(9, result.Count);
        }
Exemplo n.º 6
0
        public void TestReadBookByTitle_NotExisting_ReturnEmpty()
        {
            PocoBook queryBook = new PocoBook();

            queryBook.Title = "asdasd";
            var result = mybooks.Read(queryBook);

            Assert.IsEmpty(result);
        }
Exemplo n.º 7
0
        public override BookAtHome GetPocoBook(string filepath)
        {
            iText.Kernel.Pdf.PdfReader   reader = null;
            iText.Kernel.Pdf.PdfDocument pDoc   = null;
            const int extracted_phrase_len      = 500;

            try
            {
                if (File.Exists(filepath))
                {
                    reader = new iText.Kernel.Pdf.PdfReader(filepath);
                    pDoc   = new iText.Kernel.Pdf.PdfDocument(reader);
                    int    nPages      = pDoc.GetNumberOfPages();
                    int    maxsearch   = nPages < 15 ? nPages : 10;
                    string currentText = string.Empty;
                    for (int i = 1; i <= maxsearch; i++)
                    {
                        ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                        currentText = PdfTextExtractor.GetTextFromPage(pDoc.GetPage(i), strategy);

                        currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));

                        if (currentText.ToLower().Contains("isbn", System.StringComparison.InvariantCulture))
                        {
                            string pattern = @"ISBN(-1(?:(0)|3))?:?\x20(\s)*[0-9]+[- ][0-9]+[- ][0-9]+[- ][0-9]*[- ]*[xX0-9]";

                            Match m = Regex.Match(currentText.Replace(":", "").Replace("-", " "), pattern);

                            if (m.Success)
                            {
                                PocoBook retBook = base.GetPocoBook(filepath) as PocoBook;
                                retBook.Isbnsearch = m.Value;
                                return(retBook);
                            }
                        }
                    }
                    PocoBook abook = base.GetPocoBook(filepath) as PocoBook;
                    int      len   = currentText.Length < extracted_phrase_len ? currentText.Length : extracted_phrase_len;
                    abook.SearchPhrase = currentText.Substring(0, len);

                    return(abook);
                }
            }
            catch (IOException)
            {
                return(new PocoBook(filepath));
            }
            finally
            {
                ((IDisposable)reader)?.Dispose();
                ((IDisposable)pDoc)?.Dispose();
                reader?.Close();
            }

            return(base.GetPocoBook(filepath));
        }
Exemplo n.º 8
0
        private void ListView_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            BookDetailsWindow details = new BookDetailsWindow();
            details.Show();

            PocoBook selectedBook = (sender as ListView).SelectedItem as PocoBook;

            MSG.Messenger.Default.Send(selectedBook);

        }
Exemplo n.º 9
0
        public void TestInsert_IsbnEmpty_ExpectedMongoWriteException()
        {
            PocoBook book = new PocoBook("blabla");

            book.File  = @"c:\test\prova.cc";
            book.Title = "mio titolo";
            book.Isbn  = string.Empty;

            Assert.Throws <ArgumentNullException>(delegate { mybooks.Write(book); });
        }
Exemplo n.º 10
0
        public void TestInsert_DuplicatedBook_ExpectedMongoWriteException()
        {
            PocoBook book = new PocoBook("blabla");

            book.File  = @"c:\test\prova.cc";
            book.Title = "mio titolo";
            book.Isbn  = "PSU:000054186286";

            Assert.Throws <MongodbDataMapperException <PocoBook> >(delegate { mybooks.Write(book); });
        }
Exemplo n.º 11
0
        public void TestInsert_HappyPath()
        {
            PocoBook book = new PocoBook("blabla");

            book.File            = @"c:\test\prova.cc";
            book.Title           = "mio titolo";
            book.Isbn            = System.Guid.NewGuid().ToString();
            book.BookReliability = PocoBook.Reliability.High;

            mybooks.Write(book);
        }
Exemplo n.º 12
0
        public void TestReadBookByTitle_CorrectTitle_ReturnOneBook()
        {
            PocoBook book = new PocoBook();

            book.Title = "Oltre";

            var result = mybooks.Read(book);

            Assert.AreEqual(1, result.Count);
            Assert.AreEqual("Oltre il nulla", result[0].Title);
            Assert.AreEqual("9788831132763", result[0].Isbn);
        }
Exemplo n.º 13
0
        public void TestReadBookbyCategory_GetComputers_ReturnBooks()
        {
            var query = new PocoBook();

            query.Categories = new Collection <string> {
                "Computers"
            };

            var books = mybooks.Read(query);

            Assert.IsNotNull(books);
            Assert.AreEqual(7, books.Count);
        }
Exemplo n.º 14
0
        private void GetBookDetailedInformation(PocoBook obj)
        {
            Title         = obj.Title;
            Description   = obj.Description;
            Publisher     = obj.Publisher;
            Language      = obj.Language;
            PublisherDate = obj.PublishedDate.Year.ToString();
            Isbn          = obj.Isbn;
            PageCount     = obj.PageCount.ToString();

            Authors   = string.Join(", ", obj.Authors);
            Publisher = string.Join(", ", obj.Publisher);
            ImageLink = obj.ImageLink;
            _file     = obj.File;
        }
Exemplo n.º 15
0
        public List <PocoBook> FetchBookInfo(PocoBook book)
        {
            if (PocoBook.IsNullOrEmpty(book))
            {
                throw new ArgumentNullException(nameof(book), "Book cannot be null.");
            }

            Uri myquery = CreateQueryOnBook(book);

            Rootobject root = ExecuteGoogleRequest(myquery);

            root.File = new FileInfo(book.File);

            return(FetchBooksInfoFromResponse(root));
        }
Exemplo n.º 16
0
        public void TestReadBookbyReliability_GetLow_ReturnBooks()
        {
            var query = new PocoBook();

            query.BookReliability = PocoBook.Reliability.Low;

            var books = mybooks.Read(query);

            var res = (from book in books
                       where book.BookReliability == PocoBook.Reliability.Low
                       select book.Isbn).ToList <string>();

            Assert.IsNotNull(books);
            Assert.AreEqual(2, books.Count);
            Assert.Contains("9780470512579", res);
            Assert.Contains("9788831132763", res);
        }
Exemplo n.º 17
0
        public void TestUpdateTitle_ExistingBook_ReturnTitleUpdated()
        {
            string   isbn  = "9780321246424";
            PocoBook query = new PocoBook();

            query.Isbn = isbn;


            var toUpdate = mybooks.Read(query).First();

            string newTitle = "Cross-platform Development in Cpp";

            toUpdate.Title = newTitle;

            var updatedBook = mybooks.Update(toUpdate);

            Assert.AreEqual(isbn, updatedBook.Isbn);
            Assert.AreEqual(newTitle, updatedBook.Title);
        }
Exemplo n.º 18
0
        public void TestUpdateBook_RemoveAuthor_ReturnBookUpdated()
        {
            string isbn  = "PSU:000054186286";
            var    query = new PocoBook();

            query.Isbn = isbn;

            var book = mybooks.Read(query).First();

            string[] newAuthors = { "Frank Buschmann", "Douglas C. Schmidt", "Regine Meunier", "Hans Rohnert", "Michael Stal" };


            book.Authors.Remove("Peter Sommerlad");

            var updatedBook = mybooks.Update(book);

            Assert.AreEqual(isbn, updatedBook.Isbn);
            Assert.AreEqual(5, updatedBook.Authors.Count);
            Assert.AreEqual(newAuthors, updatedBook.Authors);
        }
Exemplo n.º 19
0
        public void TestReadBookbyFormat_GetPdf_ReturnBooks()
        {
            string format = "pdf";
            var    query  = new PocoBook();

            query.Format = format;

            var books = mybooks.Read(query);


            var res = (from book in books
                       where book.Format == format
                       select book.Isbn).ToList <string>();


            Assert.IsNotNull(books);
            Assert.AreEqual(12, books.Count);
            Assert.Contains("UCSD:31822028759850", res);
            Assert.Contains("OCLC:1113772535", res);
            Assert.Contains("8852010440", res);
        }
Exemplo n.º 20
0
        public void TestReadBookByTitle_CorrectTitle_ReturnMultipleBooks()
        {
            PocoBook queryBook = new PocoBook();

            queryBook.Title = "Pattern-Oriented Software Architecture";

            var result = mybooks.Read(queryBook);

            Assert.AreEqual(3, result.Count);

            var firstbook  = result.First(p => p.Isbn == "PSU:000054186286");
            var secondBook = result.First(p => p.Isbn == "UCSD:31822028759850");
            var thirdBook  = result.First(p => p.Isbn == "9780470512579");

            Assert.IsNotNull(firstbook);
            Assert.AreEqual("Pattern-Oriented Software Architecture, A System of Patterns", firstbook.Title);
            Assert.IsNotNull(secondBook);
            Assert.AreEqual("Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects", secondBook.Title);
            Assert.IsNotNull(thirdBook);
            Assert.AreEqual("Pattern-Oriented Software Architecture, On Patterns and Pattern Languages", thirdBook.Title);
        }
Exemplo n.º 21
0
        public void TestUpdateBook_AddCategory_ReturnBookUpdated()
        {
            string isbn  = "PSU:000054186286";
            var    query = new PocoBook();

            query.Isbn = isbn;

            var book = mybooks.Read(query).First();

            Collection <string> category = new Collection <string>()
            {
                "Computers", "Science"
            };

            book.Categories.Add("Science");

            var updatedBook = mybooks.Update(book);

            Assert.AreEqual(isbn, updatedBook.Isbn);
            Assert.AreEqual(2, updatedBook.Categories.Count);
            Assert.AreEqual(category, updatedBook.Categories);
        }
Exemplo n.º 22
0
        public void TestUpdateTitle_AddAuthor_ReturnBookUpdated()
        {
            string isbn  = "PSU:000054186286";
            var    query = new PocoBook();

            query.Isbn = isbn;

            var book = mybooks.Read(query).First();

            book.Authors.Add("Peppino");
            Collection <string> expAuthors = book.Authors;


            var updatedBook = mybooks.Update(book);

            Assert.AreEqual(isbn, updatedBook.Isbn);
            Assert.AreEqual(expAuthors.Count, updatedBook.Authors.Count);
            Assert.AreEqual(expAuthors, updatedBook.Authors);

            //Clean
            book.Authors.Remove("Peppino");
            mybooks.Update(book);
        }
Exemplo n.º 23
0
        public void TestReadBookByAuthor_CorrectAuthor_ReturnBooks()
        {
            PocoBook book = new PocoBook();

            book.Authors = new Collection <string> {
                "Asimov"
            };

            var result = mybooks.Read(book);

            Assert.AreEqual(3, result.Count);

            var firstbook  = result.First(p => p.Title == "Preludio alla fondazione");
            var secondBook = result.First(p => p.Title == "Fondazione e terra");
            var thirdBook  = result.First(p => p.Title == "Cavalieri cosmici");

            Assert.IsNotNull(firstbook);
            Assert.AreEqual("9788804401841", firstbook.Isbn);
            Assert.IsNotNull(secondBook);
            Assert.AreEqual("9788804403029", secondBook.Isbn);
            Assert.IsNotNull(thirdBook);
            Assert.AreEqual("9788834700563", thirdBook.Isbn);
        }
Exemplo n.º 24
0
        public void TestRemoveBook_CorrectlyRemoved()
        {
            PocoBook myNewBook = new PocoBook();
            var      myguid    = Guid.NewGuid();
            string   title     = "asdfasdfa";

            myNewBook.Isbn  = myguid.ToString();
            myNewBook.Title = title;
            mybooks.Write(myNewBook);


            var test = mybooks.Read(myNewBook).First();

            Assert.AreEqual(myguid.ToString(), test.Isbn);
            Assert.AreEqual("asdfasdfa", test.Title);

            mybooks.Delete(myNewBook);


            var test2 = mybooks.Read(myNewBook);

            Assert.IsEmpty(test2);
        }
Exemplo n.º 25
0
        private Uri CreateQueryOnBook(PocoBook book)
        {
            if (PocoBook.IsNullOrEmpty(book))
            {
                throw new ArgumentNullException(nameof(book), "Book cannot be null or empty");
            }

            string endpoint = "https://www.googleapis.com/books/v1/volumes?q=###&maxResults=40&country=IT";

            string query;

            if (!string.IsNullOrEmpty(book.Isbnsearch))
            {
                query    = "isbn:" + book.Isbnsearch.Replace("-", "").Replace("ISBN", "", true, null).Replace(" ", "");
                endpoint = endpoint.Replace("###", query);
                return(new Uri(endpoint));
            }

            if (!string.IsNullOrEmpty(book.SearchPhrase))
            {
                query    = string.Format(" \"{0}\" ", book.SearchPhrase);
                endpoint = endpoint.Replace("###", query);
                return(new Uri(endpoint));
            }

            if (book.Authors == null || book.Authors.Count == 0)
            {
                query    = string.Format("intitle:{0}", book.SearchTitle);
                endpoint = endpoint.Replace("###", query);
                return(new Uri(endpoint));
            }

            query    = string.Format("intitle:{0}&inauthor:{1}", book.SearchTitle, string.Join(", ", book.Authors));
            endpoint = endpoint.Replace("###", query);
            return(new Uri(endpoint));
        }
Exemplo n.º 26
0
        public void TestReadBookByIsbn_CorrectIsbnAndVerifyFullFields_FullBookCorrect()
        {
            string   expTitle     = "Pattern-Oriented Software Architecture, On Patterns and Pattern Languages";
            string   expPublisher = "John Wiley & Sons";
            DateTime expPubDate   = new DateTime(2007, 4, 29);
            int      expPageCount = 0;
            string   expDescr     = "Software patterns have revolutionized the way developers think about how software is designed, built, and documented, and this unique book offers an in-depth look of what patterns are, what they are not, and how to use them successfully The only book to attempt to develop a comprehensive language that integrates patterns from key literature, it also serves as a reference manual for all pattern-oriented software architecture (POSA) patterns Addresses the question of what a pattern language is and compares various pattern paradigms Developers and programmers operating in an object-oriented environment will find this book to be an invaluable resource";
            string   expLang      = "en";

            PocoBook.Reliability expBookRel = PocoBook.Reliability.Low;
            string expFormat = "pdf";

            const string isbn      = "9780470512579";
            PocoBook     querybook = new PocoBook();

            querybook.Isbn = isbn;

            var result = mybooks.Read(querybook).First();


            string[] expAuthors    = { "Frank Buschmann", "Kevin Henney", "Douglas C. Schmidt" };
            string[] expCategories = { "Computers" };

            Assert.IsNotNull(result);
            Assert.AreEqual(expTitle, result.Title);

            Assert.AreEqual(expPublisher, result.Publisher);
            Assert.AreEqual(expPubDate, result.PublishedDate);
            Assert.AreEqual(expPageCount, result.PageCount);
            Assert.AreEqual(expDescr, result.Description);
            Assert.AreEqual(expFormat, result.Format);
            Assert.AreEqual(expBookRel, result.BookReliability);
            Assert.AreEqual(expLang, result.Language);
            Assert.AreEqual(expAuthors, result.Authors);
            Assert.AreEqual(expCategories, result.Categories);
        }
Exemplo n.º 27
0
 public void Add(PocoBook item)
 {
     Items.Add(item);
 }
Exemplo n.º 28
0
        public void TestReadBook_BookEmpty_ReturnNull()
        {
            PocoBook mybook = new PocoBook();

            Assert.Throws <ArgumentNullException>(() => mybooks.Read(mybook));
        }