From 3b1433d4c38e852880af623923cc979918911add Mon Sep 17 00:00:00 2001
From: Jaakko Nurminen <jaajnu@utu.fi>
Date: Thu, 16 Mar 2023 19:53:15 +0200
Subject: [PATCH] Add initial exercise implementation

---
 .../java/fi/utu/tech/ooj/exercise0/Kirja.java |  7 +++
 .../utu/tech/ooj/exercise0/KirjaKokoelma.java | 50 +++++++++++++++++++
 .../java/fi/utu/tech/ooj/exercise0/Main.java  | 47 ++++++++++++++---
 3 files changed, 96 insertions(+), 8 deletions(-)

diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java
index 0b3f5f9..ffc06c6 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java
@@ -34,4 +34,11 @@ public class Kirja {
     public void setJulkaisuVuosi(int julkaisuVuosi) {
         this.julkaisuVuosi = julkaisuVuosi;
     }
+
+    @Override
+    public String toString() {
+        return "Kirja: " + kirjanNimi + "\n"
+        + "Kirjailija: " + kirjailijanNimi + "\n"
+        + "Julkaisuvuosi: " + julkaisuVuosi;
+    }
 }
diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java
index 1e41bf7..baaff67 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java
@@ -1,6 +1,8 @@
 package fi.utu.tech.ooj.exercise0;
 
+import java.io.PrintStream;
 import java.util.ArrayList;
+import java.util.List;
 
 public class KirjaKokoelma {
     private String kokoelmanOmistaja;
@@ -22,4 +24,52 @@ public class KirjaKokoelma {
     public void setKokoelmanOmistaja(String kokoelmanOmistaja) {
         this.kokoelmanOmistaja = kokoelmanOmistaja;
     }
+
+    public void lisaaKirja(Kirja kirja) {
+        kirjaListaus.add(kirja);
+    }
+
+    public void tulostaKokoelma(PrintStream out) {
+        if (kirjaListaus.size() == 0) {
+            out.println("Kirjakokoelma on tyhjä");
+        }
+
+        for (Kirja kirja : kirjaListaus) {
+            out.println(kirja.toString());
+        }
+    }
+
+    public List<Kirja> etsiKirjat(String hakusana, KirjanTiedot kentta) throws IllegalArgumentException {
+        if (hakusana == null || hakusana == "") {
+            throw new IllegalArgumentException("Hakusana ei voi olla tyhjä tai null!");
+        }
+
+        if (kentta == null) {
+            throw new IllegalArgumentException("Kenttä ei voi olla null!");
+        }
+
+        List<Kirja> hakutulokset = new ArrayList<>();
+
+        for (Kirja kirja : kirjaListaus) {
+            if (kentta.equals(KirjanTiedot.NIMI)) {
+                if (kirja.getKirjanNimi().contains(hakusana)) {
+                    hakutulokset.add(kirja);
+                }
+            }
+
+            if (kentta.equals(KirjanTiedot.KIRJAILIJA)) {
+                if (kirja.getKirjailijanNimi().contains(hakusana)) {
+                    hakutulokset.add(kirja);
+                }
+            }
+
+            if (kentta.equals(KirjanTiedot.JULKAISUVUOSI)) {
+                if (Integer.toString(kirja.getJulkaisuVuosi()).contains(hakusana)) {
+                    hakutulokset.add(kirja);
+                }
+            }
+        }
+
+        return hakutulokset;
+    }
 }
diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/Main.java b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java
index 783d3d0..9cf3cea 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise0/Main.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java
@@ -12,9 +12,21 @@ public class Main {
      * Kirjoita tähän tehtävän 4 ratkaisu. Rutiinin signatuuria ei saa muuttaa. Aloita tehtävä poistamalla
      * kommenttimerkit alla olevan rutiinin rungon ympäriltä.
      */
-    /*public static ArrayList<String> kysyTietoja(String[] kysyttavat, String lopetusmerkki) {
-
-    }*/
+    public static ArrayList<String> kysyTietoja(String[] kysyttavat, String lopetusmerkki) {
+        Scanner lukija = new Scanner(System.in);
+        ArrayList<String> vastaukset = new ArrayList<>();
+
+        for (String kysymys : kysyttavat) {
+            System.out.print(kysymys + ": ");
+            String vastaus = lukija.nextLine();
+
+            if (vastaus.equals(lopetusmerkki)) {
+                break;
+            }
+            vastaukset.add(vastaus);
+        }
+        return vastaukset;
+    }
 
 
     /*
@@ -22,9 +34,26 @@ public class Main {
      * kommenttimerkit alla olevan rutiinin rungon ympäriltä.
      */
 
-    /*public static KirjaKokoelma luoKokoelma(String lopetusmerkki) {
+    public static KirjaKokoelma luoKokoelma(String lopetusmerkki) {
+        String[] kokoelmanOmistaja = new String[] {"Kirjakokoelman omistaja"};
+        ArrayList<String> omistaja = kysyTietoja(kokoelmanOmistaja, lopetusmerkki);
+
+        KirjaKokoelma kirjaKokoelma = new KirjaKokoelma(omistaja.get(0));
+        String[] kirjanKysyttavat = new String[] {"Kirjan nimi", "Kirjailijan nimi", "Ilmestymisvuosi"};
 
-    }*/
+        while (true) {
+            ArrayList<String> kirjanTiedot = kysyTietoja(kirjanKysyttavat, lopetusmerkki);
+
+            if (kirjanTiedot.size() != 3) {
+                break;
+            }
+
+            Kirja kirja = new Kirja(kirjanTiedot.get(0), kirjanTiedot.get(1), Integer.valueOf(kirjanTiedot.get(2)));
+            kirjaKokoelma.lisaaKirja(kirja);
+        }
+
+        return kirjaKokoelma;
+    }
 
     /**
      * Main class.
@@ -35,16 +64,18 @@ public class Main {
         /*
          * Testin jälkeen alla olevan rivin voi joko kommentoida tai poistaa.
          */
-        System.out.println("*** Harjoitustyöpohja käynnistyy ***");
 
-        //Luo ensin uusi KirjaKokoelma olio, Käytä tehtävän 5 rutiinia
 
+        //Luo ensin uusi KirjaKokoelma olio, Käytä tehtävän 5 rutiinia
+        KirjaKokoelma omaKokoelma = luoKokoelma("!lopeta");
 
         //Sen jälkeen tulosta kokoelma näyttöön käyttämällä tehtävän 6 rutiinia
-
+        omaKokoelma.tulostaKokoelma(System.out);
 
         //Lopuksi hae jokin kirja kokoelmasta käyttäen tehtävän 7 rutiinia
         //Tulosta hakutulos. Sen voit tehdä suoraan main-metodissa.
 
+        System.out.println(omaKokoelma.etsiKirjat("1337", KirjanTiedot.JULKAISUVUOSI));
+
     }
 }
-- 
GitLab