From 17967bb458bea0b389ff2521e0a3a4d40810462f Mon Sep 17 00:00:00 2001
From: Matias Kokko <matias.v.kokko@utu.fi>
Date: Sun, 21 May 2023 20:50:16 +0300
Subject: [PATCH] 2 done

---
 .../java/fi/utu/tech/ooj/exercise3/Kirja.java | 32 +++++++++++++-
 .../utu/tech/ooj/exercise3/KirjaKokoelma.java | 28 ++++++++++++
 .../fi/utu/tech/ooj/exercise3/Kirjasto.java   | 43 ++++++++++++++++---
 .../java/fi/utu/tech/ooj/exercise3/Main.java  | 37 +++++++++++++++-
 4 files changed, 133 insertions(+), 7 deletions(-)

diff --git a/src/main/java/fi/utu/tech/ooj/exercise3/Kirja.java b/src/main/java/fi/utu/tech/ooj/exercise3/Kirja.java
index 13d735c..c1270d4 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise3/Kirja.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise3/Kirja.java
@@ -1,5 +1,7 @@
 package fi.utu.tech.ooj.exercise3;
 
+import java.util.Objects;
+
 public class Kirja {
     private String kirjanNimi;
     private String kirjailijanNimi;
@@ -35,5 +37,33 @@ public class Kirja {
         this.julkaisuVuosi = julkaisuVuosi;
     }
 
-
+    public Kirja clone(){
+        return new Kirja(
+                kirjanNimi,
+                kirjailijanNimi,
+                julkaisuVuosi
+        );
+    }
+    @Override
+    public String toString() {
+        return "Kirja {" +
+                "kirjan nimi: " + kirjanNimi + '\'' +
+                ", kirjailijan nimi: " + kirjailijanNimi + '\'' +
+                ", julkaisuvuosi: " + julkaisuVuosi +
+                '}';
+    }
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        Kirja kirja = (Kirja) o;
+        return julkaisuVuosi == kirja.julkaisuVuosi && kirjanNimi.equals(kirja.kirjanNimi) && kirjailijanNimi.equals(kirja.kirjailijanNimi);
+    }
+    @Override
+    public int hashCode() {
+        return Objects.hash(kirjanNimi, kirjailijanNimi, julkaisuVuosi);
+    }
 }
+
diff --git a/src/main/java/fi/utu/tech/ooj/exercise3/KirjaKokoelma.java b/src/main/java/fi/utu/tech/ooj/exercise3/KirjaKokoelma.java
index 285fd40..28b2a1c 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise3/KirjaKokoelma.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise3/KirjaKokoelma.java
@@ -3,6 +3,7 @@ package fi.utu.tech.ooj.exercise3;
 import java.io.PrintStream;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 public class KirjaKokoelma {
 
@@ -30,4 +31,31 @@ public class KirjaKokoelma {
         kirjaListaus.add(teos);
     }
 
+    public KirjaKokoelma clone(){
+        KirjaKokoelma output =  new KirjaKokoelma(kokoelmanNimi);
+        for(Kirja kirja : kirjaListaus){
+            output.lisaaKirja(kirja.clone());
+        }
+        return output;
+    }
+    @Override
+    public String toString() {
+        return "Kirjakokoelma {" +
+                "kokoelman nimi: " + kokoelmanNimi + '\'' +
+                ", kirjalistaus: " + kirjaListaus.toString() +
+                '}';
+    }
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        KirjaKokoelma that = (KirjaKokoelma) o;
+        return kokoelmanNimi.equals(that.kokoelmanNimi) && kirjaListaus.equals(that.kirjaListaus);
+    }
+    @Override
+    public int hashCode() {
+        return Objects.hash(kokoelmanNimi, kirjaListaus);
+    }
 }
diff --git a/src/main/java/fi/utu/tech/ooj/exercise3/Kirjasto.java b/src/main/java/fi/utu/tech/ooj/exercise3/Kirjasto.java
index 2478ff6..e3e4e97 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise3/Kirjasto.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise3/Kirjasto.java
@@ -1,9 +1,6 @@
 package fi.utu.tech.ooj.exercise3;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 public class Kirjasto {
 
@@ -11,6 +8,7 @@ public class Kirjasto {
     private String osoite;
     private List<KirjaKokoelma> kokoelmat = new ArrayList<>();
     private Set<Kirjasto> sivukirjastot = new HashSet<>();
+    private java.util.Objects Objects;
 
     public Kirjasto(String kirjastonNimi, String osoite) {
         this.kirjastonNimi = kirjastonNimi;
@@ -57,5 +55,40 @@ public class Kirjasto {
         sivukirjastot.add(input);
     }
 
-
+    public Kirjasto clone(){
+        Kirjasto output = new Kirjasto(
+                kirjastonNimi,
+                osoite
+        );
+        for(Kirjasto kirjasto : sivukirjastot){
+            output.lisaaSivukirjasto(kirjasto.clone());
+        }
+        for(KirjaKokoelma kokoelma : kokoelmat){
+            output.lisaaKokoelma(kokoelma.clone());
+        }
+        return output;
+    }
+    @Override
+    public String toString() {
+        return "Kirjasto {" +
+                "kirjaston nimi: " + kirjastonNimi + '\'' +
+                ", osoite: " + osoite + '\'' +
+                ", kokoelmat: " + kokoelmat.toString() +
+                ", sivukirjastot: " + sivukirjastot.toString() +
+                '}';
+    }
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        Kirjasto kirjasto = (Kirjasto) o;
+        return kirjastonNimi.equals(kirjasto.kirjastonNimi) && osoite.equals(kirjasto.osoite) && kokoelmat.equals(kirjasto.kokoelmat) && sivukirjastot.equals(kirjasto.sivukirjastot);
+    }
+    @Override
+    public int hashCode() {
+        return Objects.hash(kirjastonNimi, osoite, kokoelmat, sivukirjastot);
+    }
 }
+
diff --git a/src/main/java/fi/utu/tech/ooj/exercise3/Main.java b/src/main/java/fi/utu/tech/ooj/exercise3/Main.java
index 0c5fb2a..9865586 100644
--- a/src/main/java/fi/utu/tech/ooj/exercise3/Main.java
+++ b/src/main/java/fi/utu/tech/ooj/exercise3/Main.java
@@ -18,7 +18,42 @@ public class Main {
         /*
          * Testin jälkeen alla olevan rivin voi joko kommentoida tai poistaa.
          */
-        System.out.println("*** Harjoitustyöpohja käynnistyy ***");
+
+        Kirja ekaKirja = new Kirja(
+                "Kirja1",
+                "kirjailija1",
+                2023
+        );
+        Kirja tokaKirja = new Kirja(
+                "Kirja2",
+                "kirjailija2",
+                2022
+        );
+        KirjaKokoelma kokoelma = new KirjaKokoelma(
+                "kirjaKokoelma"
+        );
+        Kirjasto ekaKirjasto = new Kirjasto(
+                "ekaKirjasto",
+                "lahella"
+        );
+        Kirjasto tokaKirjasto = new Kirjasto(
+                "tokaKirjasto",
+                "suhteellisen lahella"
+        );
+        Kirjasto kolmasKirjasto = new Kirjasto(
+                "kolmasKirjasto",
+                "kaukana"
+        );
+
+        kokoelma.lisaaKirja(ekaKirja);
+        kokoelma.lisaaKirja(tokaKirja);
+        ekaKirjasto.lisaaKokoelma(kokoelma);
+        tokaKirjasto.lisaaKokoelma(kokoelma);
+        ekaKirjasto.lisaaSivukirjasto(tokaKirjasto);
+        ekaKirjasto.lisaaSivukirjasto(kolmasKirjasto);
+
+        System.out.println(ekaKirjasto.equals(ekaKirjasto.clone()));
+        System.out.println(ekaKirjasto.toString());
 
         HashSet<Ajoneuvo> ajoneuvot = new HashSet<Ajoneuvo>();
         HashSet<HenkiloAuto> henkiloautot = new HashSet<HenkiloAuto>();
-- 
GitLab