From 2b1857e535476da261512977f2123ae9f11a28e7 Mon Sep 17 00:00:00 2001
From: Sasa Jalander <sasa.jalander@gmail.com>
Date: Sat, 1 Apr 2023 21:27:49 +0300
Subject: [PATCH] =?UTF-8?q?Teht=C3=A4v=C3=A4t=20tehty?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../java/fi/utu/tech/ooj/exercise0/Kirja.java |  43 +++++++
 .../utu/tech/ooj/exercise0/KirjaKokoelma.java |  80 ++++++++++++
 .../utu/tech/ooj/exercise0/KirjanTiedot.java  |   6 +-
 .../java/fi/utu/tech/ooj/exercise0/Main.java  | 117 ++++++++++++------
 4 files changed, 204 insertions(+), 42 deletions(-)
 create mode 100644 src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java
 create mode 100644 src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java

diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java
new file mode 100644
index 0000000..61b5d0d
--- /dev/null
+++ b/src/main/java/fi/utu/tech/ooj/exercise0/Kirja.java
@@ -0,0 +1,43 @@
+package fi.utu.tech.ooj.exercise0;
+
+public class Kirja {
+	private String kirjanNimi;
+	private String kirjailijanNimi;
+	private int julkaisuVuosi;
+
+	public Kirja(String kirjanNimi, String kirjailijanNimi, int julkaisuVuosi) {
+		this.kirjanNimi = kirjanNimi;
+		this.kirjailijanNimi = kirjailijanNimi;
+		this.julkaisuVuosi = julkaisuVuosi;
+	}
+
+	@Override
+	public String toString() {
+		return "Kirja: " + kirjanNimi + "\nKirjailija: " + kirjailijanNimi
+		       + "\nJulkaisuvuosi: " + julkaisuVuosi;
+	}
+
+	String getKirjanNimi() {
+		return this.kirjanNimi;
+	}
+
+	String getKirjailijanNimi() {
+		return this.kirjailijanNimi;
+	}
+
+	int getJulkaisuVuosi() {
+		return this.julkaisuVuosi;
+	}
+
+	void setKirjanNimi(String uusiKirjanNimi) {
+		this.kirjanNimi = uusiKirjanNimi;
+	}
+
+	void setKirjailijanNimi(String uusiKirjailijanNimi) {
+		this.kirjailijanNimi = uusiKirjailijanNimi;
+	}
+
+	void setJulkaisuVuosi(int uusiJulkaisuVuosi) {
+		this.julkaisuVuosi = uusiJulkaisuVuosi;
+	}
+}
diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java
new file mode 100644
index 0000000..b4cfa07
--- /dev/null
+++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjaKokoelma.java
@@ -0,0 +1,80 @@
+package fi.utu.tech.ooj.exercise0;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.io.PrintStream;
+
+public class KirjaKokoelma {
+	private String kokoelmanOmistaja;
+	private ArrayList<Kirja> kirjaListaus;
+
+	KirjaKokoelma(String kokoelmanOmistaja) {
+		this.kokoelmanOmistaja = kokoelmanOmistaja;
+		this.kirjaListaus = new ArrayList<Kirja>();
+	}
+
+	String getKokoelmanOmistaja() {
+		return this.kokoelmanOmistaja;
+	}
+
+	ArrayList<Kirja> getKirjaListaus() {
+		return this.kirjaListaus;
+	}
+
+	void setKokoelmanOmistaja(String uusiKokoelmanOmistaja) {
+		this.kokoelmanOmistaja = uusiKokoelmanOmistaja;
+	}
+
+	void lisaaKirja(Kirja uusiKirja) {
+		kirjaListaus.add(uusiKirja);
+	}
+
+	public void tulostaKokoelma(PrintStream out) {
+		if (kirjaListaus.size() < 1) {
+			out.println("Kokoelma on tyhjä");
+
+		} else {
+			for (Kirja elem : kirjaListaus) {
+				out.println(elem.toString());
+			}
+		}
+	}
+
+	public List<Kirja> etsiKirjat(String hakusana, KirjanTiedot kentta) throws IllegalArgumentException {
+		List<Kirja> out = new ArrayList<Kirja>();
+		hakusana = hakusana.toUpperCase();
+
+		if ((hakusana == "") | (hakusana == null)) {
+			throw new IllegalArgumentException();
+		}
+
+		if (kentta.equals(KirjanTiedot.JULKAISUVUOSI)) {
+			for (Kirja elem : kirjaListaus) {
+
+				String vuosi = "" + elem.getJulkaisuVuosi();
+				if (vuosi.contains(hakusana)) {
+					out.add(elem);
+				}
+			}
+
+		} else if (kentta.equals(KirjanTiedot.KIRJAILIJA)) {
+			for (Kirja elem : kirjaListaus) {
+				if (elem.getKirjailijanNimi().toUpperCase().contains(hakusana)) {
+					out.add(elem);
+				}
+			}
+
+		} else if (kentta.equals(KirjanTiedot.NIMI)) {
+			for (Kirja elem : kirjaListaus) {
+				if (elem.getKirjanNimi().toUpperCase().contains(hakusana)) {
+					out.add(elem);
+				}
+			}
+
+		} else {
+			throw new IllegalArgumentException();
+		}
+
+		return out;
+	}
+}
diff --git a/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java b/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java
index 6a6422f..26daa13 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise0/KirjanTiedot.java
@@ -4,7 +4,7 @@ package fi.utu.tech.ooj.exercise0;
  * Literaaliluokka, joka listaa kirjaa liittyvät tietokentät
  */
 public enum KirjanTiedot {
-    NIMI,
-    KIRJAILIJA,
-    JULKAISUVUOSI
+	NIMI,
+	KIRJAILIJA,
+	JULKAISUVUOSI
 }
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..bea4d3a 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise0/Main.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise0/Main.java
@@ -8,43 +8,82 @@ import java.util.Scanner;
 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) {
-
-    }*/
-
-
-    /*
-     * Kirjoita tähän tehtävän 5 ratkaisu. Rutiinin signatuuria ei saa muuttaa. Aloita tehtävä poistamalla
-     * kommenttimerkit alla olevan rutiinin rungon ympäriltä.
-     */
-
-    /*public static KirjaKokoelma luoKokoelma(String lopetusmerkki) {
-
-    }*/
-
-    /**
-     * Main class.
-     *
-     * @param args Command line arguments
-     */
-    public static void main(String[] args) {
-        /*
-         * 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
-
-
-        //Sen jälkeen tulosta kokoelma näyttöön käyttämällä tehtävän 6 rutiinia
-
-
-        //Lopuksi hae jokin kirja kokoelmasta käyttäen tehtävän 7 rutiinia
-        //Tulosta hakutulos. Sen voit tehdä suoraan main-metodissa.
-
-    }
+	public static ArrayList<String> kysyTietoja(String[] kysyttavat, String lopetusmerkki) {
+
+		ArrayList<String> out = new ArrayList<String>();
+		String input;
+		Scanner scan = new Scanner(System.in);
+
+		for (String kysymys : kysyttavat) {
+			System.out.print(kysymys + ": ");
+			input = scan.nextLine();
+
+			if (input.equals(lopetusmerkki)) {
+				break;
+
+			} else {
+				out.add(input);
+			}
+		}
+
+		/* Scannerin sulkeminen sulkee myös System.in ja ohjelma heittää erroria
+		 * kun sitä yritetään avata uudestaan. Jätetään sulkematta sitten...
+		 */
+		// scan.close();
+		return out;
+	}
+
+
+	public static KirjaKokoelma luoKokoelma(String lopetusmerkki) {
+
+		KirjaKokoelma out = new KirjaKokoelma("tuntematon");
+		String[] enumTiedot = new String[3];
+		ArrayList<String> input = new ArrayList<String>();
+
+		int i = 0;
+		for (KirjanTiedot tieto : KirjanTiedot.values()) {
+			enumTiedot[i] = "" + tieto;
+			i++;
+		}
+
+		while(true) {
+			input.clear();
+			input = kysyTietoja(enumTiedot, lopetusmerkki);
+
+			if (input.size() < 3) {
+				return out;
+
+			} else {
+				out.lisaaKirja(new Kirja(input.get(0), input.get(1), Integer.parseInt(input.get(2))));
+			}
+		}
+	}
+
+	/*
+	 * Main class.
+	 *
+	 * @param args Command line arguments
+	 */
+	public static void main(String[] args) {
+		/*
+		 * 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
+		KirjaKokoelma kokoelma = luoKokoelma("lopetus");
+
+		// Sen jälkeen tulosta kokoelma näyttöön käyttämällä tehtävän 6 rutiinia
+		System.out.println("\nKerätty kokoelma:");
+		kokoelma.tulostaKokoelma(System.out);
+
+		// Lopuksi hae jokin kirja kokoelmasta käyttäen tehtävän 7 rutiinia
+		List<Kirja> hakutulokset = kokoelma.etsiKirjat("sas", KirjanTiedot.KIRJAILIJA);
+
+		// Tulosta hakutulos. Sen voit tehdä suoraan main-metodissa.
+		System.out.println("\nHakutulokset:");
+		for (Kirja elem : hakutulokset) {
+			System.out.println(elem.toString());
+		}
+	}
 }
-- 
GitLab