Zdrojak9

package sk.upjs.paz.prednaska09;

import java.util.Arrays;

// automaticky Book extends Object
public class Book {

    /**
    * Nazov knihy.
    */

        private String title;

    /**
    * Zoznam autorov.
    */

        private String[] authors;

    /**
    * Rok vydania knihy.
    */

        private int publicationYear;

    /**
    * Zoznam zanrov.
    */

        private String[] genres;

    /**
    * Rating v rozsahu 0-10 (najlepsie hodnotenie je 10). Povolene su aj desatinne cisla.
    */

        private double rating;

    // bezparametricky konstruktor - ak su pritomne ostatne, tento sa nedoplna automaticky
        public Book() {
                // default hodnota
                publicationYear = 1900;
        }

    // konstruktor ktory nastavi 5 premennych hodnotami - akoby 5 settrov v jednej metode pri vytvoreni objektu
        public Book(String title, String[] authors, int publicationYear, String[] genres, double rating) {
                this.title = title;
                this.authors = authors;
                this.publicationYear = publicationYear;
                this.genres = genres;
                this.rating = rating;
        }

        public Book(String title) {
        // volanie ineho konstruktora
                this(title, null, 1900, null, 5.0);
        }

    // GETTRE A SETTRE

        public void setTitle(String newTitle) {
                title = newTitle;
        }

        public String getTitle() {
                return title;
        }

        public void setPublicationYear(int publicationYear) {
                this.publicationYear = publicationYear;
        }

        public String[] getAuthors() {
                return authors.clone();
        }

        public void setAuthors(String[] authors) {
                this.authors = authors;
        }

        public String[] getGenres() {
                return genres.clone();
        }

        public void setGenres(String[] genres) {
                this.genres = genres;
        }

        public double getRating() {
                return rating;
        }

    // v set metode mozeme vyriesit nepovolene hodnoty
        public void setRating(double rating) {
                if (rating < 0) {
                        this.rating = 0;
                        return;
                }
                if (rating > 10) {
                        this.rating = 10;
                        return;
                }
                this.rating = rating;
        }

        public int getPublicationYear() {
                return publicationYear;
        }

    // metoda toString bola vygenerovana v eclipse Source->Generate toString
        public String toString() {
                return "Book [title=" + title + ", authors=" + Arrays.toString(authors) + ", publicationYear=" + publicationYear
                                + ", genres=" + Arrays.toString(genres) + ", rating=" + rating + "]";
        }

        /*public String toString() {
                return "kniha s nazvom " + title;
        }*/


    // metoda ktora prehlada pole zanrov a overi ci sa tam zadany zaner nachadza
        public boolean hasGenre(String genre) {
                for (int i = 0; i < genres.length; i++) {
                        if (genre.equals(genres[i])) {
                                return true;
                        }
                }
                return false;
        }



}
package sk.upjs.paz.prednaska09;

import java.util.Arrays;

// kniznica rozsiruje objekt nie Book - lebo kniznica nie je knihou.
public class Library {

    // zoznam knih v kniznici
        private Book[] books;

        public Library() {
        // pri vytvoreni kniznice je pole prazdne
                books = new Book[0];
        }

    // prida knihu do zoznamu - ten sa zvacsi o 1
        public void addBook(Book book) {
                //Book[] novePole = Arrays.copyOf(books, books.length + 1);

                // vytvorit si nove pole o jedna vacsie
                Book[] novePole = new Book[books.length + 1];
                // prekopirujeme stare pole do noveho
                System.arraycopy(books, 0, novePole, 0, books.length);

                // pridame novu knihu do noveho pola
                novePole[novePole.length - 1] = book;

                // nech sa referencuje nove pole
                books = novePole;
        }

    // vypise vsetky knihy v kniznici
        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());
                }
        }

    // odstrani zadanu knihu z kniznice
        public void deleteBook(Book book) {
        // overenie ci sa kniha nachadza v kniznici
                int index = -1;
                for (int i = 0; i < books.length; i++) {
                        if (books[i] == book) {
                                index = i;
                                break;
                        }
                }
                // ak je index -1 tak som tam knihu nenasiel
                if (index != -1) {
                        Book[] novePole = new Book[books.length - 1];
            // kopiruju sa knihy od zaciatku po index odstranovaneho
                        System.arraycopy(books, 0, novePole, 0, index);
            // kopiruju sa knihy od odstranovaneho po koniec
                        System.arraycopy(books, index + 1, novePole, index, novePole.length - index);
                        books = novePole;
                }
        }

    // vizualizacia odstranenie
        // a b /C/ d e => a b d e

    // odstranenie knihy podla nazvu - pretazenie metody - rovnaky nazov ako predosla metoda
        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;
                }
        }

    // vypise vsetky knihy ktore maju zadany zaner
        public void printByGenre(String genre) {
                for (int i = 0; i < books.length; i++) {
                        if (books[i].hasGenre(genre)) {
                                System.out.println(books[i]);
                        }
                }
        }

}
package sk.upjs.paz.prednaska09;

import java.util.Arrays;

import sk.upjs.jpaz2.*;

public class Launcher {

        public static void main(String[] args) {
        // 1. kniha vyrobena pomocou bezparametrickeho konstruktora a s pomocou settrov

                Book malyPrinc = new Book();
                //malyPrinc.title = "Maly Princ";
                //malyPrinc.publicationYear = 1943;
                malyPrinc.setTitle("Maly Princ");
                malyPrinc.setPublicationYear(1943);
                malyPrinc.setRating(9.7);
                String[] authorsMalyPrinc = {"Exupery"};
                malyPrinc.setAuthors(authorsMalyPrinc);
                malyPrinc.setGenres(new String[] {"zaner1", "zaner2"});

        // overenie zapuzdrenosti
                String title = malyPrinc.getTitle();
                title = "XXXXXXXXXXX";
                System.out.println(title);
                System.out.println(malyPrinc.getTitle());

        // overenie zapuzdrenosti - polia
                String[] autori = malyPrinc.getAuthors();
                autori[0] = "XXXXX";
                System.out.println(Arrays.toString(autori));
                System.out.println(Arrays.toString(malyPrinc.getAuthors()));

        // 2. kniha vyrobena pomocou konstruktora s 5 parametrami
                Book hp1 = new Book(
                                "Harry Potter 1",
                                new String[] {"Rowling"},
                                2000,
                                new String[] {"zaner3", "zaner1"},
                                8.2     );

                System.out.println(hp1.getPublicationYear());

                //Book hp2 = new Book ("")

        // Objekt kniznice obsahujucej zoznam knih
                Library kniznica = new Library();
                kniznica.addBook(hp1);
                kniznica.addBook(malyPrinc);
                kniznica.printAllBooks();       

                kniznica.deleteBook(hp1);
                kniznica.printAllBooks();

                kniznica.addBook(hp1);
                kniznica.deleteBook("Harry Potter 1");
                kniznica.printAllBooks();

                System.out.println("---------------");
                Library kniznica2 = new Library();
                kniznica2.addBook(hp1);
                kniznica2.addBook(malyPrinc);
                kniznica2.printByGenre("zaner4");






        }
}