From efa962db86ca374a411fbbee5917752aafced2af Mon Sep 17 00:00:00 2001 From: Anastasiya Svetlova Date: Fri, 11 Jun 2021 01:41:48 +0400 Subject: [PATCH 1/6] create class author --- .../com/epam/izh/rd/online/entity/Author.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/main/java/com/epam/izh/rd/online/entity/Author.java b/src/main/java/com/epam/izh/rd/online/entity/Author.java index 166be587..2236820b 100644 --- a/src/main/java/com/epam/izh/rd/online/entity/Author.java +++ b/src/main/java/com/epam/izh/rd/online/entity/Author.java @@ -19,5 +19,73 @@ * 6) Переопределить метод toString с выводом всех полей (не забывайте alt+inset) */ public class Author { + private String name; + private String lastName; + private LocalDate birthdate; + private String country; + public Author() { + } + + public Author(String name, String lastName, LocalDate birthdate, String country) { + this.name = name; + this.lastName = lastName; + this.birthdate = birthdate; + this.country = country; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public LocalDate getBirthdate() { + return birthdate; + } + + public void setBirthdate(LocalDate birthdate) { + this.birthdate = birthdate; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Author author = (Author) o; + return Objects.equals(name, author.name) && Objects.equals(lastName, author.lastName) && Objects.equals(birthdate, author.birthdate) && Objects.equals(country, author.country); + } + + @Override + public int hashCode() { + return Objects.hash(name, lastName, birthdate, country); + } + + @Override + public String toString() { + return "Author{" + + "name='" + name + '\'' + + ", lastName='" + lastName + '\'' + + ", birthdate=" + birthdate + + ", country='" + country + '\'' + + '}'; + } } From 41ae16b2d99c36848acf4fd37aa4a59d1fdc3e93 Mon Sep 17 00:00:00 2001 From: Anastasiya Svetlova Date: Fri, 11 Jun 2021 01:51:32 +0400 Subject: [PATCH 2/6] create abstract class book --- .../com/epam/izh/rd/online/entity/Book.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/main/java/com/epam/izh/rd/online/entity/Book.java b/src/main/java/com/epam/izh/rd/online/entity/Book.java index 08bdccb8..3990ce7f 100644 --- a/src/main/java/com/epam/izh/rd/online/entity/Book.java +++ b/src/main/java/com/epam/izh/rd/online/entity/Book.java @@ -16,5 +16,51 @@ * 6) Переопределить метод toString с выводом всех полей (не забывайте alt+inset) */ public abstract class Book { + private int numberOfPages; + private String name; + public Book() { + } + + public Book(int numberOfPages, String name) { + this.numberOfPages = numberOfPages; + this.name = name; + } + + public int getNumberOfPages() { + return numberOfPages; + } + + public void setNumberOfPages(int numberOfPages) { + this.numberOfPages = numberOfPages; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Book book = (Book) o; + return numberOfPages == book.numberOfPages && Objects.equals(name, book.name); + } + + @Override + public int hashCode() { + return Objects.hash(numberOfPages, name); + } + + @Override + public String toString() { + return "Book{" + + "numberOfPages=" + numberOfPages + + ", name='" + name + '\'' + + '}'; + } } From 9eddbac380bf9cefda8ef404806b66d01e88316b Mon Sep 17 00:00:00 2001 From: Anastasiya Svetlova Date: Fri, 11 Jun 2021 01:57:37 +0400 Subject: [PATCH 3/6] create class schoolbook --- .../epam/izh/rd/online/entity/SchoolBook.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/main/java/com/epam/izh/rd/online/entity/SchoolBook.java b/src/main/java/com/epam/izh/rd/online/entity/SchoolBook.java index a9834db4..9b8a8f2b 100644 --- a/src/main/java/com/epam/izh/rd/online/entity/SchoolBook.java +++ b/src/main/java/com/epam/izh/rd/online/entity/SchoolBook.java @@ -20,5 +20,64 @@ * 6) Переопределить метод toString с выводом всех полей (не забывайте alt+inset) */ public class SchoolBook extends Book { + private String authorName; + private String authorLastName; + private LocalDate publishDate; + public SchoolBook() { + } + + public SchoolBook(int numberOfPages, String name, String authorName, String authorLastName, LocalDate publishDate) { + super(numberOfPages, name); + this.authorName = authorName; + this.authorLastName = authorLastName; + this.publishDate = publishDate; + } + + public String getAuthorName() { + return authorName; + } + + public void setAuthorName(String authorName) { + this.authorName = authorName; + } + + public String getAuthorLastName() { + return authorLastName; + } + + public void setAuthorLastName(String authorLastName) { + this.authorLastName = authorLastName; + } + + public LocalDate getPublishDate() { + return publishDate; + } + + public void setPublishDate(LocalDate publishDate) { + this.publishDate = publishDate; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + SchoolBook that = (SchoolBook) o; + return Objects.equals(authorName, that.authorName) && Objects.equals(authorLastName, that.authorLastName) && Objects.equals(publishDate, that.publishDate); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), authorName, authorLastName, publishDate); + } + + @Override + public String toString() { + return "SchoolBook{" + + "authorName='" + authorName + '\'' + + ", authorLastName='" + authorLastName + '\'' + + ", publishDate=" + publishDate + + '}'; + } } From df3a915151d15e4651338b10e9c20d94401f300f Mon Sep 17 00:00:00 2001 From: Anastasiya Svetlova Date: Fri, 11 Jun 2021 05:34:03 +0400 Subject: [PATCH 4/6] create author and book repositories (with problems) --- .../online/repository/AuthorRepository.java | 2 + .../rd/online/repository/BookRepository.java | 1 + .../repository/SimpleAuthorRepository.java | 49 +++++++++++++++ .../SimpleSchoolBookRepository.java | 56 ++++++++++++++++++ .../izh/rd/online/service/AuthorService.java | 34 +++++++++++ .../izh/rd/online/service/BookService.java | 59 +++++++++++++++++++ 6 files changed, 201 insertions(+) create mode 100644 src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java create mode 100644 src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java diff --git a/src/main/java/com/epam/izh/rd/online/repository/AuthorRepository.java b/src/main/java/com/epam/izh/rd/online/repository/AuthorRepository.java index c62bd4e9..9fc8e740 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/AuthorRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/AuthorRepository.java @@ -57,3 +57,5 @@ public interface AuthorRepository { */ int count(); } + + diff --git a/src/main/java/com/epam/izh/rd/online/repository/BookRepository.java b/src/main/java/com/epam/izh/rd/online/repository/BookRepository.java index 7358e99b..1707d437 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/BookRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/BookRepository.java @@ -52,3 +52,4 @@ public interface BookRepository { */ int count(); } + diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java new file mode 100644 index 00000000..52e9f6b2 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java @@ -0,0 +1,49 @@ +package com.epam.izh.rd.online.repository; + +import com.epam.izh.rd.online.entity.Author; +import org.apache.commons.lang3.ArrayUtils; + +public class SimpleAuthorRepository implements AuthorRepository { + private Author[] authors = new Author[0]; + int counter = 0; + + public SimpleAuthorRepository() { + } + + @Override + public boolean save(Author author) { + if (findByFullName(author.getName(), author.getLastName()) == null) { + authors[counter] = author; + counter++; + return true; + } + else return false; + } + + @Override + public Author findByFullName(String name, String lastname) { + for (int i = 0; i <= counter; counter++) { + if (authors[i].getName() == name && authors[i].getLastName() == lastname) { + return authors[i]; + } + } + return null; + } + + @Override + public boolean remove(Author author) { + for (int i = 0; i <= counter; counter++) { + if (findByFullName(author.getName(), author.getLastName()) != null) { + authors = ArrayUtils.remove(authors, i); + return true; + } + } + return false; + } + + @Override + public int count() { + counter = authors.length - 1; + return counter; + } +} diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java new file mode 100644 index 00000000..e5f04604 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java @@ -0,0 +1,56 @@ +package com.epam.izh.rd.online.repository; + +import com.epam.izh.rd.online.entity.SchoolBook; +import org.apache.commons.lang3.ArrayUtils; + +public class SimpleSchoolBookRepository implements BookRepository { + private SchoolBook[] schoolBooks = new SchoolBook[0]; + int counterB = 0; + + public SimpleSchoolBookRepository() { + } + + @Override + public boolean save(SchoolBook book) { + schoolBooks[counterB] = book; + counterB++; + return true; + } + + @Override + public SchoolBook[] findByName(String name) { + int iTwo = -1; + SchoolBook[] schoolBooks2 = new SchoolBook[0]; + + for (int i = 0; i <= counterB; i++) { + if (schoolBooks[i].getName() == name) { + schoolBooks2[iTwo+1] = schoolBooks[i]; + } + } + if (schoolBooks2.length != 0) { + return schoolBooks2; + } + else return new SchoolBook[0]; + } + + @Override + public boolean removeByName(String name) { + int removing = 0; + for (int i = 0; i <= counterB; i++) { + if (schoolBooks[i].getName() == name) { + schoolBooks = ArrayUtils.remove(schoolBooks, i); + removing = 1; + } + } + if (removing == 0) { + return true; + } + else return false; + } + + @Override + public int count() { + counterB = schoolBooks.length - 1; + return counterB; + } +} diff --git a/src/main/java/com/epam/izh/rd/online/service/AuthorService.java b/src/main/java/com/epam/izh/rd/online/service/AuthorService.java index 25bfecd1..0558f7dc 100644 --- a/src/main/java/com/epam/izh/rd/online/service/AuthorService.java +++ b/src/main/java/com/epam/izh/rd/online/service/AuthorService.java @@ -1,6 +1,7 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.entity.Author; +import com.epam.izh.rd.online.repository.AuthorRepository; /** * Интерфейс сервиса для выполнения бизнес логики при работе с авторами и взаимодействием с @@ -42,3 +43,36 @@ public interface AuthorService { */ int count(); } + +class SimpleAuthorService implements AuthorService { + private AuthorRepository authorRepository; + + public SimpleAuthorService() { + } + + public SimpleAuthorService(AuthorRepository authorRepository) { + this.authorRepository = authorRepository; + } + + @Override + public boolean save(Author author) { + authorRepository.save(author); + return true; + } + + @Override + public Author findByFullName(String name, String lastname) { + return authorRepository.findByFullName(name,lastname); + } + + @Override + public boolean remove(Author author) { + authorRepository.remove(author); + return true; + } + + @Override + public int count() { + return authorRepository.count(); + } +} \ No newline at end of file diff --git a/src/main/java/com/epam/izh/rd/online/service/BookService.java b/src/main/java/com/epam/izh/rd/online/service/BookService.java index e221033b..755768a4 100644 --- a/src/main/java/com/epam/izh/rd/online/service/BookService.java +++ b/src/main/java/com/epam/izh/rd/online/service/BookService.java @@ -2,6 +2,9 @@ import com.epam.izh.rd.online.entity.Author; import com.epam.izh.rd.online.entity.Book; +import com.epam.izh.rd.online.entity.SchoolBook; +import com.epam.izh.rd.online.repository.AuthorRepository; +import com.epam.izh.rd.online.repository.BookRepository; /** * Интерфейс сервиса для выполнения бизнес логики при работе с книга и авторами и взаимодействием с @@ -71,3 +74,59 @@ public interface BookService { */ Author findAuthorByBookName(String name); } + +class SimpleSchoolBookService implements BookService { + private BookRepository schoolBookBookRepository; + private AuthorService authorService; + + public SimpleSchoolBookService() { + } + + public SimpleSchoolBookService(BookRepository schoolBookBookRepository, AuthorService authorService) { + this.schoolBookBookRepository = schoolBookBookRepository; + this.authorService = authorService; + } + + @Override + public boolean save(SchoolBook book) { + if (authorService.findByFullName(book.getAuthorName(), book.getAuthorLastName()) != null) { + schoolBookBookRepository.save(book); + return true; + } + else return false; + } + + @Override + public SchoolBook[] findByName(String name) { + return schoolBookBookRepository.findByName(name); + } + + @Override + public int getNumberOfBooksByName(String name) { + int numberOfBooks = 0; + numberOfBooks = schoolBookBookRepository.findByName(name).length; + return numberOfBooks; + } + + @Override + public boolean removeByName(String name) { + return schoolBookBookRepository.removeByName(name); + } + + @Override + public int count() { + return schoolBookBookRepository.count(); + } + + @Override + public Author findAuthorByBookName(String name) { + SchoolBook[] schoolBooks3 = new SchoolBook[0]; + schoolBooks3 = schoolBookBookRepository.findByName(name); + if (schoolBooks3 != null) { + if (authorService.findByFullName(schoolBooks3[0].getAuthorName(), schoolBooks3[0].getAuthorLastName()) != null) { + return authorService.findByFullName(schoolBooks3[0].getAuthorName(), schoolBooks3[0].getAuthorLastName()); + } + } + return null; + } +} \ No newline at end of file From c837c5c18ceae6d5a30e6f75c6ce84cf1be34bc9 Mon Sep 17 00:00:00 2001 From: Anastasiya Svetlova Date: Fri, 11 Jun 2021 06:08:07 +0400 Subject: [PATCH 5/6] create author and book services (with problems) --- .../repository/SimpleAuthorRepository.java | 2 +- .../SimpleSchoolBookRepository.java | 12 ++-- .../izh/rd/online/service/AuthorService.java | 33 ---------- .../izh/rd/online/service/BookService.java | 58 ------------------ .../online/service/SimpleAuthorService.java | 38 ++++++++++++ .../service/SimpleSchoolBookService.java | 61 +++++++++++++++++++ 6 files changed, 105 insertions(+), 99 deletions(-) create mode 100644 src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java create mode 100644 src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java index 52e9f6b2..542f297f 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java @@ -23,7 +23,7 @@ public boolean save(Author author) { @Override public Author findByFullName(String name, String lastname) { for (int i = 0; i <= counter; counter++) { - if (authors[i].getName() == name && authors[i].getLastName() == lastname) { + if ((authors[i].getName().equals(name)) && (authors[i].getLastName().equals(lastname))) { return authors[i]; } } diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java index e5f04604..e59635c5 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java @@ -23,21 +23,19 @@ public SchoolBook[] findByName(String name) { SchoolBook[] schoolBooks2 = new SchoolBook[0]; for (int i = 0; i <= counterB; i++) { - if (schoolBooks[i].getName() == name) { - schoolBooks2[iTwo+1] = schoolBooks[i]; + if (schoolBooks[i].getName().equals(name)) { + iTwo += 1; + schoolBooks2[iTwo] = schoolBooks[i]; } } - if (schoolBooks2.length != 0) { - return schoolBooks2; - } - else return new SchoolBook[0]; + return schoolBooks2; } @Override public boolean removeByName(String name) { int removing = 0; for (int i = 0; i <= counterB; i++) { - if (schoolBooks[i].getName() == name) { + if (schoolBooks[i].getName().equals(name)) { schoolBooks = ArrayUtils.remove(schoolBooks, i); removing = 1; } diff --git a/src/main/java/com/epam/izh/rd/online/service/AuthorService.java b/src/main/java/com/epam/izh/rd/online/service/AuthorService.java index 0558f7dc..1740eab3 100644 --- a/src/main/java/com/epam/izh/rd/online/service/AuthorService.java +++ b/src/main/java/com/epam/izh/rd/online/service/AuthorService.java @@ -1,7 +1,6 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.entity.Author; -import com.epam.izh.rd.online.repository.AuthorRepository; /** * Интерфейс сервиса для выполнения бизнес логики при работе с авторами и взаимодействием с @@ -44,35 +43,3 @@ public interface AuthorService { int count(); } -class SimpleAuthorService implements AuthorService { - private AuthorRepository authorRepository; - - public SimpleAuthorService() { - } - - public SimpleAuthorService(AuthorRepository authorRepository) { - this.authorRepository = authorRepository; - } - - @Override - public boolean save(Author author) { - authorRepository.save(author); - return true; - } - - @Override - public Author findByFullName(String name, String lastname) { - return authorRepository.findByFullName(name,lastname); - } - - @Override - public boolean remove(Author author) { - authorRepository.remove(author); - return true; - } - - @Override - public int count() { - return authorRepository.count(); - } -} \ No newline at end of file diff --git a/src/main/java/com/epam/izh/rd/online/service/BookService.java b/src/main/java/com/epam/izh/rd/online/service/BookService.java index 755768a4..fe3a70de 100644 --- a/src/main/java/com/epam/izh/rd/online/service/BookService.java +++ b/src/main/java/com/epam/izh/rd/online/service/BookService.java @@ -2,9 +2,6 @@ import com.epam.izh.rd.online.entity.Author; import com.epam.izh.rd.online.entity.Book; -import com.epam.izh.rd.online.entity.SchoolBook; -import com.epam.izh.rd.online.repository.AuthorRepository; -import com.epam.izh.rd.online.repository.BookRepository; /** * Интерфейс сервиса для выполнения бизнес логики при работе с книга и авторами и взаимодействием с @@ -75,58 +72,3 @@ public interface BookService { Author findAuthorByBookName(String name); } -class SimpleSchoolBookService implements BookService { - private BookRepository schoolBookBookRepository; - private AuthorService authorService; - - public SimpleSchoolBookService() { - } - - public SimpleSchoolBookService(BookRepository schoolBookBookRepository, AuthorService authorService) { - this.schoolBookBookRepository = schoolBookBookRepository; - this.authorService = authorService; - } - - @Override - public boolean save(SchoolBook book) { - if (authorService.findByFullName(book.getAuthorName(), book.getAuthorLastName()) != null) { - schoolBookBookRepository.save(book); - return true; - } - else return false; - } - - @Override - public SchoolBook[] findByName(String name) { - return schoolBookBookRepository.findByName(name); - } - - @Override - public int getNumberOfBooksByName(String name) { - int numberOfBooks = 0; - numberOfBooks = schoolBookBookRepository.findByName(name).length; - return numberOfBooks; - } - - @Override - public boolean removeByName(String name) { - return schoolBookBookRepository.removeByName(name); - } - - @Override - public int count() { - return schoolBookBookRepository.count(); - } - - @Override - public Author findAuthorByBookName(String name) { - SchoolBook[] schoolBooks3 = new SchoolBook[0]; - schoolBooks3 = schoolBookBookRepository.findByName(name); - if (schoolBooks3 != null) { - if (authorService.findByFullName(schoolBooks3[0].getAuthorName(), schoolBooks3[0].getAuthorLastName()) != null) { - return authorService.findByFullName(schoolBooks3[0].getAuthorName(), schoolBooks3[0].getAuthorLastName()); - } - } - return null; - } -} \ No newline at end of file diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java new file mode 100644 index 00000000..4ef60509 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java @@ -0,0 +1,38 @@ +package com.epam.izh.rd.online.service; + +import com.epam.izh.rd.online.entity.Author; +import com.epam.izh.rd.online.repository.AuthorRepository; + +public class SimpleAuthorService implements AuthorService { + private AuthorRepository authorRepository; + + public SimpleAuthorService() { + } + + public SimpleAuthorService(AuthorRepository authorRepository) { + this.authorRepository = authorRepository; + } + + @Override + public boolean save(Author author) { + authorRepository.save(author); + return true; + } + + @Override + public Author findByFullName(String name, String lastname) { + Author byFullName = authorRepository.findByFullName(name, lastname); + return byFullName; + } + + @Override + public boolean remove(Author author) { + authorRepository.remove(author); + return true; + } + + @Override + public int count() { + return authorRepository.count(); + } +} diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java new file mode 100644 index 00000000..107b6deb --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java @@ -0,0 +1,61 @@ +package com.epam.izh.rd.online.service; + +import com.epam.izh.rd.online.entity.Author; +import com.epam.izh.rd.online.entity.SchoolBook; +import com.epam.izh.rd.online.repository.BookRepository; + +public class SimpleSchoolBookService implements BookService { + private BookRepository schoolBookBookRepository; + private AuthorService authorService; + + public SimpleSchoolBookService() { + } + + public SimpleSchoolBookService(BookRepository schoolBookBookRepository, AuthorService authorService) { + this.schoolBookBookRepository = schoolBookBookRepository; + this.authorService = authorService; + } + + @Override + public boolean save(SchoolBook book) { + if (authorService.findByFullName(book.getAuthorName(), book.getAuthorLastName()) != null) { + schoolBookBookRepository.save(book); + return true; + } + else return false; + } + + @Override + public SchoolBook[] findByName(String name) { + return schoolBookBookRepository.findByName(name); + } + + @Override + public int getNumberOfBooksByName(String name) { + int numberOfBooks = 0; + numberOfBooks = schoolBookBookRepository.findByName(name).length; + return numberOfBooks; + } + + @Override + public boolean removeByName(String name) { + return schoolBookBookRepository.removeByName(name); + } + + @Override + public int count() { + return schoolBookBookRepository.count(); + } + + @Override + public Author findAuthorByBookName(String name) { + SchoolBook[] schoolBooks3 = new SchoolBook[0]; + schoolBooks3 = schoolBookBookRepository.findByName(name); + if (schoolBooks3 != null) { + if (authorService.findByFullName(schoolBooks3[0].getAuthorName(), schoolBooks3[0].getAuthorLastName()) != null) { + return authorService.findByFullName(schoolBooks3[0].getAuthorName(), schoolBooks3[0].getAuthorLastName()); + } + } + return null; + } +} From 1a9fb114e52bb8a02b4c68bd01d038367baf7340 Mon Sep 17 00:00:00 2001 From: Anastasiya Svetlova Date: Sat, 12 Jun 2021 09:40:14 +0400 Subject: [PATCH 6/6] finished program --- .../com/epam/izh/rd/online/entity/Author.java | 15 ----- .../com/epam/izh/rd/online/entity/Book.java | 13 ---- .../epam/izh/rd/online/entity/SchoolBook.java | 16 ----- .../online/repository/AuthorRepository.java | 48 --------------- .../rd/online/repository/BookRepository.java | 43 -------------- .../repository/SimpleAuthorRepository.java | 44 +++++++++++--- .../SimpleSchoolBookRepository.java | 59 ++++++++++++++----- .../izh/rd/online/service/AuthorService.java | 33 ----------- .../izh/rd/online/service/BookService.java | 59 ------------------- .../online/service/SimpleAuthorService.java | 7 +-- .../service/SimpleSchoolBookService.java | 13 ++-- 11 files changed, 89 insertions(+), 261 deletions(-) diff --git a/src/main/java/com/epam/izh/rd/online/entity/Author.java b/src/main/java/com/epam/izh/rd/online/entity/Author.java index 2236820b..56928ea4 100644 --- a/src/main/java/com/epam/izh/rd/online/entity/Author.java +++ b/src/main/java/com/epam/izh/rd/online/entity/Author.java @@ -3,21 +3,6 @@ import java.time.LocalDate; import java.util.Objects; -/** - * Класс содержащий информацию об авторе. - * - * Необходимо: - * 1) Создать список полей с указанными типами ровно в этом порядке: - * - name с типом String и приватным модификатором доступа - * - lastName с типом String и приватным модификатором доступа - * - birthdate с типом LocalDate и приватным модификатором доступа - * - country с типом String и приватным модификатором доступа - * 2) Создать дефолтный конструктор (без параметров) (не забывайте alt+inset) - * 3) Создать конструктор со всеми параметрами (в том порядке в котором перечислены) (не забывайте alt+inset) - * 4) Создать геттеры и сеттеры (не забывайте alt+inset) - * 5) Переопределить методы equals и hashCode - используйте генерацию (не забывайте alt+inset) - * 6) Переопределить метод toString с выводом всех полей (не забывайте alt+inset) - */ public class Author { private String name; private String lastName; diff --git a/src/main/java/com/epam/izh/rd/online/entity/Book.java b/src/main/java/com/epam/izh/rd/online/entity/Book.java index 3990ce7f..37fbb464 100644 --- a/src/main/java/com/epam/izh/rd/online/entity/Book.java +++ b/src/main/java/com/epam/izh/rd/online/entity/Book.java @@ -2,19 +2,6 @@ import java.util.Objects; -/** - * Базовая сущность для книги. Содержит базовые поля. - * - * Необходимо: - * 1) Создать список полей с указанными типами ровно в этом порядке: - * - numberOfPages с типом int и приватным модификатором доступа - * - name с типом String и приватным модификатором доступа - * 2) Создать дефолтный конструктор (без параметров) (не забывайте alt+inset) - * 3) Создать конструктор со всеми параметрами (в том порядке в котором перечислены) (не забывайте alt+inset) - * 4) Создать геттеры и сеттеры (не забывайте alt+inset) - * 5) Переопределить методы equals и hashCode - используйте генерацию (не забывайте alt+inset) - * 6) Переопределить метод toString с выводом всех полей (не забывайте alt+inset) - */ public abstract class Book { private int numberOfPages; private String name; diff --git a/src/main/java/com/epam/izh/rd/online/entity/SchoolBook.java b/src/main/java/com/epam/izh/rd/online/entity/SchoolBook.java index 9b8a8f2b..80621e14 100644 --- a/src/main/java/com/epam/izh/rd/online/entity/SchoolBook.java +++ b/src/main/java/com/epam/izh/rd/online/entity/SchoolBook.java @@ -3,22 +3,6 @@ import java.time.LocalDate; import java.util.Objects; -/** - * Сущность учебника. Он должен быть унаследован от сущности Book - * - * Необходимо: - * 1) Унаследовать данный класс от класса Book - * 2) Создать список полей с указанными типами ровно в этом порядке: - * - authorName с типом String и приватным модификатором доступа - * - authorLastName с типом String и приватным модификатором доступа - * - publishDate с типом LocalDate и приватным модификатором доступа - * 2) Создать дефолтный конструктор (без параметров) (не забывайте alt+inset) - * 3) Создать конструктор со всеми параметрами (важно - не только с полями данного класса, но и с полями родителя Book) - * (создавать в том порядке в котором перечислены). Сначала нужно создать аналогичный конструтор для Book. Используйте alt+inset. - * 4) Создать геттеры и сеттеры (не забывайте alt+inset) - * 5) Переопределить методы equals и hashCode - используйте генерацию (не забывайте alt+inset) - * 6) Переопределить метод toString с выводом всех полей (не забывайте alt+inset) - */ public class SchoolBook extends Book { private String authorName; private String authorLastName; diff --git a/src/main/java/com/epam/izh/rd/online/repository/AuthorRepository.java b/src/main/java/com/epam/izh/rd/online/repository/AuthorRepository.java index 9fc8e740..da346a4f 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/AuthorRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/AuthorRepository.java @@ -2,59 +2,11 @@ import com.epam.izh.rd.online.entity.Author; -/** - * Интерфейс репозитория для хранения данных об авторах. - *

- * Необходимо: - * 1) Создать в этом же пакете класс SimpleAuthorRepository - * 2) Имплементировать им данный интерфейс - * 3) Добавить все методы (пока можно не писать реализацию) - * 4) Добавить в SimpleAuthorRepository приватное поле "Author[] authors" для хранения авторов - * 5) Инициалазировать его пустым массивом - * 6) Написать в классе SimpleAuthorRepository реализацию для всех методов (коллекции не используем, работаем только с массивами) - */ public interface AuthorRepository { - /** - * Метод должен сохранять автора в массив authors. - * Массив при каждом сохранении должен увеличиваться в размере ровно на 1. - * То есть он ровно того размера, сколько сущностей мы в него сохранили. - *

- * Если на вход для сохранения приходит автор, который уже есть в массиве (сохранен), то автор не сохраняется и - * метод возвращает false. - *

- * Можно сравнивать только по полному имени (имя и фамилия), считаем, что двух авторов - * с одинаковыми именем и фамилией быть не может. - * Подсказка - можно использовать для проверки метод findByFullName. - *

- * Если сохранение прошло успешно, метод должен вернуть true. - */ boolean save(Author author); - - /** - * Метод должен находить в массиве authors автора по имени и фамилии (считаем, что двух авторов - * с одинаковыми именем и фамилией быть не может.) - *

- * Если автор с таким именем и фамилией найден - возвращаем его, если же не найден, метод должен вернуть null. - */ Author findByFullName(String name, String lastname); - - /** - * Метод должен удалять автора из массива authors, если он там имеется. - * Автора опять же, можно определять только по совпадению имении и фамилии. - *

- * Важно: при удалении автора из массива размер массива должен уменьшиться! - * То есть, если мы сохранили 2 авторов и вызвали count() (метод ниже), то он должен вернуть 2. - * Если после этого мы удалили 1 автора, метод count() должен вернуть 1. - *

- * Если автор был найден и удален, метод должен вернуть true, в противном случае, если автор не был найден, метод - * должен вернуть false. - */ boolean remove(Author author); - - /** - * Метод возвращает количество сохраненных сущностей в массиве authors. - */ int count(); } diff --git a/src/main/java/com/epam/izh/rd/online/repository/BookRepository.java b/src/main/java/com/epam/izh/rd/online/repository/BookRepository.java index 1707d437..27a2fe05 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/BookRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/BookRepository.java @@ -2,54 +2,11 @@ import com.epam.izh.rd.online.entity.Book; -/** - * Интерфейс репозитория для хранения данных о книгах - *

- * Необходимо: - * 1) Создать в этом же пакете класс SimpleSchoolBookRepository - * 2) Имплементировать им данный интерфейс (имплементировать "BookRepository") - это указание дженерика - * 3) Добавить все методы (пока можно не писать реализацию) - * 4) Добавить в SimpleSchoolBookRepository приватное поле "SchoolBook[] schoolBooks" для хранения школьных книг - * 5) Инициалазировать его пустым массивом - * 6) Написать в классе SimpleSchoolBookRepository реализацию для всех методов (коллекции не используем, работаем только с массивами) - */ public interface BookRepository { - /** - * Метод должен сохранять школьную книгу в массив schoolBooks. - * Массив при каждом сохранении должен увеличиваться в размере ровно на 1. - * То есть он ровно того размера, сколько сущностей мы в него сохранили. - *

- * Одну и ту же книгу МОЖНО сохранить в массиве несколько раз, проверки на то, что такая книга уже сохранена, делать не нужно. - *

- * Если сохранение прошло успешно, метод должен вернуть true. - */ boolean save(T book); - - /** - * Метод должен находить в массиве schoolBooks все книги по имени. - *

- * Если книги найдены - метод должен их вернуть. - * Если найденных по имени книг нет, должен вернуться пустой массив. - */ T[] findByName(String name); - - /** - * Метод должен удалять книги из массива schoolBooks по названию. - * Если книг с одинаковым названием в массиве несколько, метод должен удалить их все. - *

- * Важно: при удалении книги из массива размер массива должен уменьшиться! - * То есть, если мы сохранили 2 разные книги и вызвали count() (метод ниже), то он должен вернуть 2. - * Если после этого мы удалили 1 книгу, метод count() должен вернуть 1. - *

- * Если хотя бы одна книга была найдена и удалена, метод должен вернуть true, в противном случае, - * если книга не была найдена, метод должен вернуть false. - */ boolean removeByName(String name); - - /** - * Метод возвращает количество сохраненных сущностей в массиве schoolBooks. - */ int count(); } diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java index 542f297f..833dd9ce 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java @@ -3,26 +3,42 @@ import com.epam.izh.rd.online.entity.Author; import org.apache.commons.lang3.ArrayUtils; +import java.util.Arrays; + public class SimpleAuthorRepository implements AuthorRepository { - private Author[] authors = new Author[0]; - int counter = 0; + private Author[] authors = new Author[] {}; + private Author[] authorsCopy = new Author[] {}; + int counter; + int removing = 0; + public SimpleAuthorRepository() { } @Override public boolean save(Author author) { - if (findByFullName(author.getName(), author.getLastName()) == null) { - authors[counter] = author; - counter++; + if (count() == 0) { + authors = new Author[1]; + authors[0] = author; return true; } - else return false; + else { + if (findByFullName(author.getName(), author.getLastName()) == null) { + counter = count() + 1; + authorsCopy = authors; + authors = new Author[counter]; + authors = Arrays.copyOf(authorsCopy,counter); + authors[counter - 1] = author; + + return true; + } + else return false; + } } @Override public Author findByFullName(String name, String lastname) { - for (int i = 0; i <= counter; counter++) { + for (int i = 0; i < counter; i++) { if ((authors[i].getName().equals(name)) && (authors[i].getLastName().equals(lastname))) { return authors[i]; } @@ -32,9 +48,11 @@ public Author findByFullName(String name, String lastname) { @Override public boolean remove(Author author) { - for (int i = 0; i <= counter; counter++) { + for (int i = 0; i < counter; i++) { if (findByFullName(author.getName(), author.getLastName()) != null) { authors = ArrayUtils.remove(authors, i); + removing++; + counter--; return true; } } @@ -43,7 +61,15 @@ public boolean remove(Author author) { @Override public int count() { - counter = authors.length - 1; + if (removing != 0) { + return counter; + } + if (authors.length == 0) { + counter = 0; + } + else { + counter = authors.length; + } return counter; } } diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java index e59635c5..7de13ed4 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java @@ -3,52 +3,81 @@ import com.epam.izh.rd.online.entity.SchoolBook; import org.apache.commons.lang3.ArrayUtils; +import java.util.Arrays; + public class SimpleSchoolBookRepository implements BookRepository { private SchoolBook[] schoolBooks = new SchoolBook[0]; - int counterB = 0; + private SchoolBook[] schoolBooksCopy = new SchoolBook[0]; + int counterB; + int removing = 0; public SimpleSchoolBookRepository() { } @Override public boolean save(SchoolBook book) { - schoolBooks[counterB] = book; - counterB++; + if (count() == 0) { + schoolBooks = new SchoolBook[1]; + schoolBooks[0] = book; + return true; + } + else { + counterB = count() + 1; + schoolBooksCopy = schoolBooks; + schoolBooks = new SchoolBook[counterB]; + schoolBooks = Arrays.copyOf(schoolBooksCopy,counterB); + schoolBooks[counterB - 1] = book; + } return true; } @Override public SchoolBook[] findByName(String name) { - int iTwo = -1; + int iTwo = 0; SchoolBook[] schoolBooks2 = new SchoolBook[0]; + SchoolBook[] schoolBooks2Copy = new SchoolBook[0]; - for (int i = 0; i <= counterB; i++) { - if (schoolBooks[i].getName().equals(name)) { - iTwo += 1; - schoolBooks2[iTwo] = schoolBooks[i]; + + for (int i = 0; i < counterB; i++) { + if (schoolBooks[i].getName() == name) { + iTwo++; + schoolBooks2Copy = schoolBooks2; + schoolBooks2 = new SchoolBook[iTwo]; + schoolBooks2 = Arrays.copyOf(schoolBooks2Copy,iTwo); + schoolBooks2[iTwo - 1] = schoolBooks[i]; + } } - } + return schoolBooks2; } @Override public boolean removeByName(String name) { - int removing = 0; - for (int i = 0; i <= counterB; i++) { + + for (int i = 0; i < counterB; i++) { if (schoolBooks[i].getName().equals(name)) { schoolBooks = ArrayUtils.remove(schoolBooks, i); - removing = 1; + counterB--; + removing++; } } if (removing == 0) { - return true; + return false; } - else return false; + else return true; } @Override public int count() { - counterB = schoolBooks.length - 1; + if (removing!=0) { + return counterB - removing; + } + if (schoolBooks.length == 0) { + counterB = 0; + } + else { + counterB = schoolBooks.length; + } return counterB; } } diff --git a/src/main/java/com/epam/izh/rd/online/service/AuthorService.java b/src/main/java/com/epam/izh/rd/online/service/AuthorService.java index 1740eab3..709b7410 100644 --- a/src/main/java/com/epam/izh/rd/online/service/AuthorService.java +++ b/src/main/java/com/epam/izh/rd/online/service/AuthorService.java @@ -2,44 +2,11 @@ import com.epam.izh.rd.online.entity.Author; -/** - * Интерфейс сервиса для выполнения бизнес логики при работе с авторами и взаимодействием с - * репозиторием для авторов AuthorRepository. - *

- * Необходимо: - * 1) Создать в этом же пакете класс SimpleAuthorService - * 2) Имплементировать им данный интерфейс - * 3) Добавить все методы (пока можно не писать реализацию) - * 4) Добавить в SimpleAuthorService приватное поле "AuthorRepository authorRepository" - это репозиторий к котормоу - * вы будете обращаться в методах - * 5) Создать дефолтный конструтор (без параметров) - * 6) Создать конструтор с параметром AuthorRepository authorRepository (который будет устанвливать в поле authorRepository значение) - * 7) Написать в классе SimpleAuthorService реализацию для всех методов - */ public interface AuthorService { - /** - * Метод должен сохранять автора. - * По факту, он просто обращается к репозиторию с авторами и вызывает аналогичный метод, псоле чего возвращает результат. - */ boolean save(Author author); - - /** - * Метод должен находить автора по имени и фамилии. - * По факту, он просто обращается к репозиторию с авторами и вызывает аналогичный метод, псоле чего возвращает результат. - */ Author findByFullName(String name, String lastname); - - /** - * Метод должен удалять автора. - * По факту, он просто обращается к репозиторию с авторами и вызывает аналогичный метод, псоле чего возвращает результат.. - */ boolean remove(Author author); - - /** - * Метод считать количество сохраненных авторов на текущий момент. - * По факту, он просто обращается к репозиторию с авторами и вызывает аналогичный метод, псоле чего возвращает результат. - */ int count(); } diff --git a/src/main/java/com/epam/izh/rd/online/service/BookService.java b/src/main/java/com/epam/izh/rd/online/service/BookService.java index fe3a70de..4218cf28 100644 --- a/src/main/java/com/epam/izh/rd/online/service/BookService.java +++ b/src/main/java/com/epam/izh/rd/online/service/BookService.java @@ -3,72 +3,13 @@ import com.epam.izh.rd.online.entity.Author; import com.epam.izh.rd.online.entity.Book; -/** - * Интерфейс сервиса для выполнения бизнес логики при работе с книга и авторами и взаимодействием с - * репозиторием для книг BookRepository и сервисом для авторов AuthorService. - *

- * Необходимо: - * 1) Создать в этом же пакете класс SimpleSchoolBookService - * 2) Имплементировать им данный интерфейс - * 3) Добавить все методы (пока можно не писать реализацию) - * 4) Добавить в SimpleSchoolBookService приватное поле "BookRepository schoolBookBookRepository" - это репозиторий - * книг к которому вы будете обращаться в методах - * 5) Добавить в SimpleSchoolBookService приватное поле "AuthorService authorService" - это сервис для работы с авторами к которому - * вы будете обращаться в методах - * 6) Создать дефолтный конструтор (без параметров) - * 7) Создать конструтор с параметрами "BookRepository schoolBookBookRepository, AuthorService authorService" - * (который будет устанвливать в поле schoolBookBookRepository и в поле authorService значения) - * 8) Написать в классе SimpleSchoolBookService реализацию для всех методов - */ public interface BookService { - /** - * Метод должен сохранять книгу. - * - * Перед сохранением книги нужно проверить, сохранен ли такой автор в базе авторов. - * То есть вы должен взять имя и фамилию автора из книги и обратиться к сервису авторов и узнать о наличии такого автора. - * Напомню, что мы считаем, что двух авторов с одинаковыми именем и фамилией быть не может. - * - * Если такой автор сущесвует (сохранен) - значит можно сохранять и книгу. - * Если же такого автора в базе нет, значит книгу сохранять нельзя. - * - * Соответственно, если книга была успешно сохранена - метод возвращает true, если же книга не была сохранена - метод возвращает false. - */ boolean save(T book); - - /** - * Метод должен находить книгу по имени. - *

- * По факту, он просто обращается к репозиторию с книгами и вызывает аналогичный метод, псоле чего возвращает результат. - */ T[] findByName(String name); - - /** - * Метод должен находить количество сохраненных книг по конкретному имени книги. - */ int getNumberOfBooksByName(String name); - - /** - * Метод должен удалять все книги по имени. - *

- * По факту, он просто обращается к репозиторию с книгами и вызывает аналогичный метод, псоле чего возвращает результат. - */ boolean removeByName(String name); - - /** - * Метод должен возвращать количество всех книг. - *

- * По факту, он просто обращается к репозиторию с книгами и вызывает аналогичный метод, псоле чего возвращает результат. - */ int count(); - - /** - * Метод должен возвращать автора книги по названию книги. - * - * То есть приждется сходить и в репозиторий с книгами и в сервис авторов. - * - * Если такой книги не найдено, метод должен вернуть null. - */ Author findAuthorByBookName(String name); } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java index 4ef60509..5dca37df 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java @@ -15,8 +15,8 @@ public SimpleAuthorService(AuthorRepository authorRepository) { @Override public boolean save(Author author) { - authorRepository.save(author); - return true; + boolean s = authorRepository.save(author); + return s; } @Override @@ -27,8 +27,7 @@ public Author findByFullName(String name, String lastname) { @Override public boolean remove(Author author) { - authorRepository.remove(author); - return true; + return authorRepository.remove(author); } @Override diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java index 107b6deb..8fd4141e 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java @@ -49,12 +49,13 @@ public int count() { @Override public Author findAuthorByBookName(String name) { - SchoolBook[] schoolBooks3 = new SchoolBook[0]; - schoolBooks3 = schoolBookBookRepository.findByName(name); - if (schoolBooks3 != null) { - if (authorService.findByFullName(schoolBooks3[0].getAuthorName(), schoolBooks3[0].getAuthorLastName()) != null) { - return authorService.findByFullName(schoolBooks3[0].getAuthorName(), schoolBooks3[0].getAuthorLastName()); - } + SchoolBook[] schoolBooks3 = new SchoolBook[schoolBookBookRepository.count()]; + schoolBooks3 = findByName(name); + + for (int i = 0; i < schoolBookBookRepository.count(); i++) { + if (authorService.findByFullName(schoolBooks3[i].getAuthorName(),schoolBooks3[i].getAuthorLastName()) != null) { + return authorService.findByFullName(schoolBooks3[i].getAuthorName(),schoolBooks3[i].getAuthorLastName()); + }; } return null; }