From 167be8b682ac449d100bb58df8ddc88174133c44 Mon Sep 17 00:00:00 2001 From: Andrey Sh Date: Wed, 20 Jan 2021 00:23:27 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D1=80=D0=B5=D1=88=D0=B8=D0=BB=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epam/izh/rd/online/entity/Author.java | 68 +++++++++++++++++++ .../com/epam/izh/rd/online/entity/Book.java | 46 +++++++++++++ .../epam/izh/rd/online/entity/SchoolBook.java | 61 ++++++++++++++++- .../rd/online/repository/BookRepository.java | 3 +- .../izh/rd/online/service/BookService.java | 6 +- 5 files changed, 180 insertions(+), 4 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 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 + '\'' + + '}'; + } } 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..0cb9307b 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 this.numberOfPages; + } + + public void setNumberOfPages(int numberOfPages) { + this.numberOfPages = numberOfPages; + } + + public String getName() { + return this.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 + '\'' + + '}'; + } } 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..e504db64 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 @@ -14,11 +14,70 @@ * - publishDate с типом LocalDate и приватным модификатором доступа * 2) Создать дефолтный конструктор (без параметров) (не забывайте alt+inset) * 3) Создать конструктор со всеми параметрами (важно - не только с полями данного класса, но и с полями родителя Book) - * (создавать в том порядке в котором перечислены). Сначала нужно создать аналогичный конструтор для Book. Используйте alt+inset. + * (создавать в том порядке в котором перечислены). Сначала нужно создать аналогичный конструктор для 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; + 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 + + '}'; + } } 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..6631124c 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 @@ -1,6 +1,7 @@ package com.epam.izh.rd.online.repository; import com.epam.izh.rd.online.entity.Book; +import com.epam.izh.rd.online.entity.SchoolBook; /** * Интерфейс репозитория для хранения данных о книгах @@ -13,7 +14,7 @@ * 5) Инициалазировать его пустым массивом * 6) Написать в классе SimpleSchoolBookRepository реализацию для всех методов (коллекции не используем, работаем только с массивами) */ -public interface BookRepository { +public interface BookRepository { /** * Метод должен сохранять школьную книгу в массив schoolBooks. 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..7949a0cb 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 @@ -1,7 +1,8 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.entity.Author; -import com.epam.izh.rd.online.entity.Book; + +import com.epam.izh.rd.online.entity.SchoolBook; /** * Интерфейс сервиса для выполнения бизнес логики при работе с книга и авторами и взаимодействием с @@ -20,7 +21,7 @@ * (который будет устанвливать в поле schoolBookBookRepository и в поле authorService значения) * 8) Написать в классе SimpleSchoolBookService реализацию для всех методов */ -public interface BookService { +public interface BookService { /** * Метод должен сохранять книгу. @@ -70,4 +71,5 @@ public interface BookService { * Если такой книги не найдено, метод должен вернуть null. */ Author findAuthorByBookName(String name); + } From 3cab76c4a313ad4c6177018f9c92114c61483071 Mon Sep 17 00:00:00 2001 From: Andrey Sh Date: Wed, 20 Jan 2021 00:26:03 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B5=D1=89=D0=B5=204=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0.=20SimpleAu?= =?UTF-8?q?thorRepository=20SimpleAuthorService=20SimpleSchoolBookReposito?= =?UTF-8?q?ry=20SimpleSchoolBookService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/SimpleAuthorRepository.java | 64 +++++++++++++++ .../SimpleSchoolBookRepository.java | 81 +++++++++++++++++++ .../online/service/SimpleAuthorService.java | 35 ++++++++ .../service/SimpleSchoolBookService.java | 66 +++++++++++++++ 4 files changed, 246 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 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 new file mode 100644 index 00000000..b1e8074b --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java @@ -0,0 +1,64 @@ +package com.epam.izh.rd.online.repository; + +import com.epam.izh.rd.online.entity.Author; +import com.epam.izh.rd.online.entity.SchoolBook; + + +public class SimpleAuthorRepository implements AuthorRepository { + private Author[] authors = new Author[0]; + + @Override + public boolean save(Author author) { + if( findByFullName(author.getName(), author.getLastName()) == null) { + Author[] temp; + if(authors.length == 0) { + authors = new Author[1]; + authors[0] = author; + return true; + } else { + temp = authors; + authors = new Author[temp.length+1]; + for (int i = 0; i < temp.length; i++){ + authors[i] = temp[i]; + } + authors[authors.length-1] = author; + return true; + } + } else { + return false; + } + } + + @Override + public Author findByFullName(String name, String lastname) { + for (int i = 0; i < authors.length ; i++) { + if (name == authors[i].getName() && lastname == authors[i].getLastName()){ + return authors[i]; + } + } + return null; + } + + @Override + public boolean remove(Author author) { + if( findByFullName(author.getName(), author.getLastName()) != null) { + Author[] temp = new Author[authors.length-1]; + for(int i = 0; i < authors.length; i++) { + int j = 0; + if(authors[i] != author ) { + temp[j] = authors[i]; + j++; + }; + } + authors = temp; + return true; + } else { + return false; + } + } + + @Override + public int count() { + return authors.length; + } +} 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..1598e291 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java @@ -0,0 +1,81 @@ +package com.epam.izh.rd.online.repository; + +import com.epam.izh.rd.online.entity.Author; +import com.epam.izh.rd.online.entity.SchoolBook; + +public class SimpleSchoolBookRepository implements BookRepository { + public SchoolBook[] schoolBooks = new SchoolBook[0]; + + + @Override + public boolean save(SchoolBook book) { + SchoolBook[] temp; + if (this.schoolBooks.length == 0) { + this.schoolBooks = new SchoolBook[1]; + this.schoolBooks[0] = book; + return true; + } else { + temp = schoolBooks; + schoolBooks = new SchoolBook[temp.length + 1]; + for (int i = 0; i < temp.length; i++) { + schoolBooks[i] = temp[i]; + } + schoolBooks[schoolBooks.length-1] = book; + return true; + + } + } + + @Override + public SchoolBook[] findByName(String name) { + if (schoolBooks.length > 0) { + int j = 0; + for (int i = 0; i < this.schoolBooks.length; i++) { + if (this.schoolBooks[i]!= null) { + if (name == this.schoolBooks[i].getName()) { + j++; + } + } + } + if (j > 0) { + SchoolBook[] schoolBooksOneName = new SchoolBook[j]; + int temp = 0; + for (int i = 0; i < this.schoolBooks.length; i++) { + if (this.schoolBooks[i]!= null) { + if (name == this.schoolBooks[i].getName()) { + schoolBooksOneName[temp] = schoolBooks[i]; + temp++; + } + } + } + return schoolBooksOneName; + + } + + } + return new SchoolBook[0]; + } + + @Override + public boolean removeByName(String name) { + if( this.schoolBooks.length > 0 && findByName(name) != null ) { + SchoolBook[] temp = new SchoolBook[this.schoolBooks.length-findByName(name).length]; + for(int i = 0; i < this.schoolBooks.length; i++) { + int j = 0; + if(this.schoolBooks[i].getName() != name ) { + temp[j] = this.schoolBooks[i]; + j++; + }; + } + this.schoolBooks = temp; + return true; + } else { + return false; + } + } + + @Override + public int count() { + return this.schoolBooks.length; + } +} 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..bd885470 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java @@ -0,0 +1,35 @@ +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) { + return authorRepository.save(author); + } + + @Override + public Author findByFullName(String name, String lastname) { + return authorRepository.findByFullName(name, lastname); + } + + @Override + public boolean remove(Author author) { + return authorRepository.remove(author); + } + + @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..5052c33d --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java @@ -0,0 +1,66 @@ +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{ + BookRepository schoolBookBookRepository; + 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 ){ + return schoolBookBookRepository.save(book); + } else { + return false; + } + } + + @Override + public SchoolBook[] findByName(String name) { + return schoolBookBookRepository.findByName(name); + } + + @Override + public int getNumberOfBooksByName(String name) { + SchoolBook[] temp = new SchoolBook[0]; + temp = schoolBookBookRepository.findByName(name); + + + return temp.length; + } + + @Override + public boolean removeByName(String name) { + return schoolBookBookRepository.removeByName(name); + } + + @Override + public int count() { + return schoolBookBookRepository.count(); + } + + @Override + public Author findAuthorByBookName(String name) { + int j = schoolBookBookRepository.findByName(name).length; + + if (j != 0) { + SchoolBook[] temp = new SchoolBook[j]; + temp = schoolBookBookRepository.findByName(name); + return authorService.findByFullName(temp[0].getAuthorName(), temp[0].getAuthorLastName()); + } else { + return null; + } + } +}