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..1c4bb6df 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 @@ -5,19 +5,92 @@ /** * Класс содержащий информацию об авторе. - * - * Необходимо: - * 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) + *

+ * Необходимо: 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; + 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); + } + + @java.lang.Override + public java.lang.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..b5227674 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,56 @@ * 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 + '\'' + + '}'; + } } 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..6ba985bd 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 @@ -5,20 +5,87 @@ /** * Сущность учебника. Он должен быть унаследован от сущности 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) + *

+ * Необходимо: 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; + 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/SimpleAuthorRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java new file mode 100644 index 00000000..8f663352 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java @@ -0,0 +1,52 @@ +package com.epam.izh.rd.online.repository; + +import com.epam.izh.rd.online.entity.Author; +import java.util.Arrays; + +public class SimpleAuthorRepository implements AuthorRepository { + + private Author[] authors = {}; + + @Override + public boolean save(Author author) { + if (findByFullName(author.getName(), author.getLastName()) != null) { + return false; + } + authors = Arrays.copyOf(authors, authors.length + 1); + authors[authors.length - 1] = author; + return true; + } + + @Override + public Author findByFullName(String name, String lastname) { + for (Author author : authors) { + if (name.equals(author.getName()) && lastname.equals(author.getLastName())) { + return author; + } + } + return null; + } + + @Override + public boolean remove(Author author) { + Author foundAuthor = findByFullName(author.getName(), author.getLastName()); + if (foundAuthor == null) { + return false; + } + int isRemoved = 0; + Author result[] = new Author[authors.length - 1]; + for (int i = 0; i < result.length; i++) { + if (foundAuthor == authors[i]) { + isRemoved = 1; + } + result[i] = authors[i + isRemoved]; + } + authors = result; + return true; + } + + @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..3fcf37f0 --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java @@ -0,0 +1,52 @@ +package com.epam.izh.rd.online.repository; + +import com.epam.izh.rd.online.entity.Book; +import com.epam.izh.rd.online.entity.SchoolBook; +import java.util.Arrays; + +public class SimpleSchoolBookRepository implements BookRepository { + + private SchoolBook[] schoolBooks = {}; + + @Override + public boolean save(Book book) { + schoolBooks = Arrays.copyOf(schoolBooks, schoolBooks.length + 1); + schoolBooks[schoolBooks.length - 1] = (SchoolBook) book; + return true; + } + + @Override + public SchoolBook[] findByName(String name) { + SchoolBook[] result = {}; + for (SchoolBook book : schoolBooks) { + if (name.equals(book.getName())) { + result = Arrays.copyOf(result, result.length + 1); + result[result.length - 1] = book; + } + } + return result; + } + + @Override + public boolean removeByName(String name) { + SchoolBook[] foundBooks = findByName(name); + if (foundBooks == null) { + return false; + } + int removed = 0; + SchoolBook result[] = new SchoolBook[schoolBooks.length - foundBooks.length]; + for (int i = 0; i < result.length; i++) { + if (name == schoolBooks[i + removed].getName()) { + removed++; + } + result[i] = schoolBooks[i + removed]; + } + schoolBooks = result; + return true; + } + + @Override + public int count() { + return 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..4f93d4a7 --- /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..51c20a6a --- /dev/null +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java @@ -0,0 +1,60 @@ +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; +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(Book book) { + SchoolBook b = (SchoolBook) book; + if (authorService.findByFullName(b.getAuthorName(), b.getAuthorLastName()) != null) { + return schoolBookBookRepository.save(b); + } + return false; + } + + @Override + public Book[] findByName(String name) { + return schoolBookBookRepository.findByName(name); + } + + @Override + public int getNumberOfBooksByName(String name) { + return schoolBookBookRepository.findByName(name).length; + } + + @Override + public boolean removeByName(String name) { + return schoolBookBookRepository.removeByName(name); + } + + @Override + public int count() { + return schoolBookBookRepository.count(); + } + + @Override + public Author findAuthorByBookName(String name) { + SchoolBook[] books = schoolBookBookRepository.findByName(name); + if (books.length == 0) { + return null; + } + return authorService.findByFullName(books[0].getAuthorName(), books[0].getAuthorLastName()); + } +}