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..da47f237 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,7 +5,7 @@ /** * Класс содержащий информацию об авторе. - * + *
* Необходимо: * 1) Создать список полей с указанными типами ровно в этом порядке: * - name с типом String и приватным модификатором доступа @@ -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 name.equals(author.name) && lastName.equals(author.lastName) && birthdate.equals(author.birthdate) && country.equals(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..8bc615b5 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 @@ -15,6 +15,52 @@ * 5) Переопределить методы equals и hashCode - используйте генерацию (не забывайте alt+inset) * 6) Переопределить метод toString с выводом всех полей (не забывайте alt+inset) */ -public abstract class Book { +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 && name.equals(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..dd76e993 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,7 +5,7 @@ /** * Сущность учебника. Он должен быть унаследован от сущности Book - * + *
* Необходимо:
* 1) Унаследовать данный класс от класса Book
* 2) Создать список полей с указанными типами ровно в этом порядке:
@@ -19,6 +19,67 @@
* 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 authorName.equals(that.authorName) && authorLastName.equals(that.authorLastName) && publishDate.equals(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..084f9d12
--- /dev/null
+++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java
@@ -0,0 +1,57 @@
+package com.epam.izh.rd.online.repository;
+
+import com.epam.izh.rd.online.entity.Author;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+public class SimpleAuthorRepository implements AuthorRepository {
+
+ private Author[] authors = new Author[0];
+
+ @Override
+ public boolean save(Author author) {
+ boolean isAuthor = findByFullName(author.getName(), author.getLastName()) == null;
+ if (isAuthor) {
+ Author[] tempAuthors = new Author[authors.length + 1];
+ System.arraycopy(authors, 0, tempAuthors, 0, authors.length);
+ tempAuthors[tempAuthors.length - 1] = author;
+ authors = tempAuthors;
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public Author findByFullName(String name, String lastname) {
+ boolean isName = false;
+ boolean isLastName = false;
+ for (Author authorForEach : authors) {
+// Arrays.stream(authors).forEach(authorForEach.getName()::equals);
+ isName = name == authorForEach.getName();
+ isLastName = lastname == authorForEach.getLastName();
+ if (isName && isLastName) {
+ return authorForEach;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean remove(Author author) {
+ boolean isAuthor = author.equals(findByFullName(author.getName(), author.getLastName()));
+ if (isAuthor) {
+ Author[] tempAuthors = Arrays.stream(authors)
+ .filter(authorDel -> !author.equals(authorDel))
+ .toArray(Author[]::new);
+ authors = tempAuthors;
+ return true;
+ }
+ 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..15eb1394
--- /dev/null
+++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java
@@ -0,0 +1,57 @@
+package com.epam.izh.rd.online.repository;
+
+import com.epam.izh.rd.online.entity.SchoolBook;
+
+import java.util.Arrays;
+
+public class SimpleSchoolBookRepository implements BookRepository
+ * Важно: при удалении книги из массива размер массива должен уменьшиться!
+ * То есть, если мы сохранили 2 разные книги и вызвали count() (метод ниже), то он должен вернуть 2.
+ * Если после этого мы удалили 1 книгу, метод count() должен вернуть 1.
+ *
+ * Если хотя бы одна книга была найдена и удалена, метод должен вернуть true, в противном случае,
+ * если книга не была найдена, метод должен вернуть false.
+ */
+
+ @Override
+ public boolean removeByName(String name) {
+ boolean isContain = Arrays.stream(schoolBooks)
+ .anyMatch(nameField -> name.equals(nameField.getName()));
+ if (isContain) {
+ SchoolBook[] temp = Arrays.stream(schoolBooks)
+ .filter(nameField -> !name.equals(nameField.getName()))
+ .toArray(SchoolBook[]::new);
+ schoolBooks = temp;
+ return true;
+ }
+ return isContain;
+ }
+
+ @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..b29370d7
--- /dev/null
+++ b/src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java
@@ -0,0 +1,36 @@
+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..4611e1e6
--- /dev/null
+++ b/src/main/java/com/epam/izh/rd/online/service/SimpleSchoolBookService.java
@@ -0,0 +1,57 @@
+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