diff --git a/src/main/java/com/epam/izh/rd/online/Main.java b/src/main/java/com/epam/izh/rd/online/Main.java
index e3939a4b..30c67bb4 100644
--- a/src/main/java/com/epam/izh/rd/online/Main.java
+++ b/src/main/java/com/epam/izh/rd/online/Main.java
@@ -1,9 +1,18 @@
package com.epam.izh.rd.online;
+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.service.SimpleAuthorService;
+import com.epam.izh.rd.online.service.SimpleSchoolBookService;
+
public class Main {
+
public static void main(String[] args) {
+
+
}
}
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..4fa2b47f 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,76 @@
* 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..9538cd63 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,54 @@
* 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..52a12ce0 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,66 @@
* 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/AuthorRepository.java b/src/main/java/com/epam/izh/rd/online/repository/AuthorRepository.java
index c62bd4e9..d95c05ba 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
@@ -35,6 +35,7 @@ public interface AuthorRepository {
* Метод должен находить в массиве authors автора по имени и фамилии (считаем, что двух авторов
* с одинаковыми именем и фамилией быть не может.)
*
+ *
* Если автор с таким именем и фамилией найден - возвращаем его, если же не найден, метод должен вернуть null.
*/
Author findByFullName(String name, String lastname);
@@ -51,7 +52,6 @@ public interface AuthorRepository {
* должен вернуть false.
*/
boolean remove(Author author);
-
/**
* Метод возвращает количество сохраненных сущностей в массиве authors.
*/
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..e6cd09eb 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;
/**
* Интерфейс репозитория для хранения данных о книгах
@@ -51,4 +52,6 @@ public interface BookRepository {
* Метод возвращает количество сохраненных сущностей в массиве 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
new file mode 100644
index 00000000..9591bfa1
--- /dev/null
+++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleAuthorRepository.java
@@ -0,0 +1,63 @@
+package com.epam.izh.rd.online.repository;
+
+import com.epam.izh.rd.online.entity.Author;
+import com.epam.izh.rd.online.entity.SchoolBook;
+
+import java.util.Arrays;
+
+public class SimpleAuthorRepository implements AuthorRepository {
+ private static int count = 0;
+ private Author[] authors = new Author[count];
+
+ @Override
+ public boolean save(Author author) {
+ if (findByFullName(author.getName(), author.getLastName()) == null) {
+ Author[] authors1 = new Author[0];
+ authors1 = Arrays.copyOf(authors, count);
+ count++;
+ authors = Arrays.copyOf(authors1, count);
+ authors[authors.length - 1] = author;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public Author findByFullName(String name, String lastname) {
+ for (Author author : authors) {
+ if (author.getName().equals(name) && author.getLastName().equals(lastname)) {
+ return author;
+ }
+ }
+ return null;
+ }
+
+
+ @Override
+ public boolean remove(Author author) {
+ Author[] authors1 = new Author[0];
+ authors1 = Arrays.copyOf(authors, count);
+ if (findByFullName(author.getName(), author.getLastName()) != null) {
+ for (int i = 0; i < authors1.length; i++) {
+ if (authors1[i].getName().equals(author.getName()) && authors1[i].getLastName().equals(author.getLastName())) {
+ Author author1 = new Author();
+ author1 = authors1[i];
+ if (authors1[i].equals(author1)) {
+ authors1[i] = authors1[authors1.length - 1];
+ authors1[authors1.length - 1] = author1;
+ count--;
+ }
+ }
+ }
+ authors = Arrays.copyOf(authors1, count);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public int count() {
+ return count;
+ }
+}
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..9c96a9c6
--- /dev/null
+++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleSchoolBookRepository.java
@@ -0,0 +1,72 @@
+package com.epam.izh.rd.online.repository;
+
+import com.epam.izh.rd.online.entity.Author;
+import com.epam.izh.rd.online.entity.SchoolBook;
+
+import java.util.Arrays;
+
+public class SimpleSchoolBookRepository implements BookRepository {
+ private static int count = 0;
+ private SchoolBook[] schoolBooks = new SchoolBook[count];
+
+
+ @Override
+ public boolean save(SchoolBook book) {
+ SchoolBook[] schoolBooks1 = new SchoolBook[count];
+ schoolBooks1 = Arrays.copyOf(schoolBooks, count);
+ count++;
+ schoolBooks = Arrays.copyOf(schoolBooks1, count);
+ schoolBooks[schoolBooks.length - 1] = book;
+ return true;
+ }
+
+
+ @Override
+ public SchoolBook[] findByName(String name) {
+ int index = 0;
+ SchoolBook[] foundBook = new SchoolBook[0];
+ for (SchoolBook book : schoolBooks) {
+ if (book.getName().equals(name)) {
+ index++;
+ }
+ }
+ foundBook = new SchoolBook[index];
+ int foundBookIndex = 0;
+ for (SchoolBook schoolBook : schoolBooks) {
+ if (schoolBook.getName().equals(name)) {
+ foundBook[foundBookIndex] = schoolBook;
+ foundBookIndex++;
+ }
+ }
+ return foundBook;
+ }
+
+ @Override
+ public boolean removeByName(String name) {
+ SchoolBook[] schoolBooks1 = new SchoolBook[0];
+ schoolBooks1 = Arrays.copyOf(schoolBooks, count);
+ if (findByName(name).length != 0) {
+ for (int i = 0; i < schoolBooks1.length; i++) {
+ if (schoolBooks1[i].getName().equals(name)) {
+ SchoolBook schoolBook = new SchoolBook();
+ schoolBook = schoolBooks1[i];
+ count--;
+ if (schoolBooks1[i].equals(schoolBook)) {
+ schoolBooks1[i] = schoolBooks1[schoolBooks1.length - 1];
+ schoolBooks1[schoolBooks1.length - 1] = schoolBook;
+ }
+ }
+ }
+ schoolBooks = Arrays.copyOf(schoolBooks1, count);
+ return true;
+ }
+
+ return false;
+ }
+
+
+ @Override
+ public int count() {
+ return 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 e221033b..fe7b1bdb 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
@@ -65,7 +65,7 @@ public interface BookService {
/**
* Метод должен возвращать автора книги по названию книги.
*
- * То есть приждется сходить и в репозиторий с книгами и в сервис авторов.
+ * То есть придется сходить и в репозиторий с книгами и в сервис авторов.
*
* Если такой книги не найдено, метод должен вернуть null.
*/
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..c13b81bf
--- /dev/null
+++ b/src/main/java/com/epam/izh/rd/online/service/SimpleAuthorService.java
@@ -0,0 +1,37 @@
+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..d069e374
--- /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.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 schoolBook = new SchoolBook();
+ schoolBook = (SchoolBook) book;
+ if (authorService.findByFullName(schoolBook.getAuthorName(), schoolBook.getAuthorLastName()) != null) {
+ schoolBookBookRepository.save(schoolBook);
+ return true;
+ }
+
+ 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 schoolBook = new SchoolBook();
+ if (schoolBookBookRepository.findByName(name).length != 0) {
+ schoolBook = schoolBookBookRepository.findByName(name)[0];
+ String nameAuthor = schoolBook.getAuthorName();
+ String lastNameAuthor = schoolBook.getAuthorLastName();
+ Author author = new Author();
+ author = authorService.findByFullName(nameAuthor, lastNameAuthor);
+ return author;
+ }
+ return null;
+ }
+}
\ No newline at end of file