package sk.upjs.paz.prednaska10;
// trieda z minuleho tyzdna - zmeny len v metode printAllBooks
public class Library {
private Book[] books;
public Library() {
books = new Book[0];
}
public void addBook(Book book) {
Book[] novePole = new Book[books.length + 1];
System.arraycopy(books, 0, novePole, 0, books.length);
novePole[novePole.length - 1] = book;
books = novePole;
}
public void printAllBooks() {
System.out.println("Kniznica ma tolko knih: " + books.length);
for (int i = 0; i < books.length; i++) {
System.out.println(books[i].toString());
// mozne overenie ci ide o instanciu konkretnej triedy + pretypovanie
/*if (books[i] instanceof PrintedBook) {
PrintedBook kniha = (PrintedBook) books[i];
System.out.println(kniha.getLocation());
// Book books[i] ... PrintedBook kniha - maju rovnaku referenciu
}*/
// volanie metody je mozne lebo sa nachadza v triede Book
// polymorfizmus sposobi, ze sa vola implementacia v triede PrintedBook/AudioBook/EBook
System.out.println(books[i].getLocation());
}
}
public void deleteBook(Book book) {
int index = -1;
for (int i = 0; i < books.length; i++) {
if (books[i] == book) {
index = i;
break;
}
}
if (index != -1) {
Book[] novePole = new Book[books.length - 1];
System.arraycopy(books, 0, novePole, 0, index);
System.arraycopy(books, index + 1, novePole, index, novePole.length - index);
books = novePole;
}
}
public void deleteBook(String title) {
int index = -1;
for (int i = 0; i < books.length; i++) {
if (books[i].getTitle().equals(title)) {
index = i;
break;
}
}
if (index != -1) {
Book[] novePole = new Book[books.length - 1];
System.arraycopy(books, 0, novePole, 0, index);
System.arraycopy(books, index + 1, novePole, index, novePole.length - index);
books = novePole;
}
}
public void printByGenre(String genre) {
for (int i = 0; i < books.length; i++) {
if (books[i].hasGenre(genre)) {
System.out.println(books[i]);
}
}
}
}