From 68d9712063e9c33af43eed1decea0bc28ffad3ec Mon Sep 17 00:00:00 2001
From: aichinos <aichinos@jyu.fi>
Date: Wed, 12 Mar 2025 10:26:18 +0200
Subject: [PATCH] nyt toString toimii

---
 mmkurssit/src/mmkurssit/Kurssi.java          | 117 ++++++++++++++-----
 mmkurssit/src/mmkurssit/Kurssit.java         |  60 +++++++++-
 mmkurssit/src/mmkurssit/test/KurssiTest.java |  21 +++-
 3 files changed, 162 insertions(+), 36 deletions(-)

diff --git a/mmkurssit/src/mmkurssit/Kurssi.java b/mmkurssit/src/mmkurssit/Kurssi.java
index f7d94ae..51754fd 100644
--- a/mmkurssit/src/mmkurssit/Kurssi.java
+++ b/mmkurssit/src/mmkurssit/Kurssi.java
@@ -1,7 +1,9 @@
 package mmkurssit;
 
-import java.io.OutputStream;
-import apumetodit.RandomNumero;
+//import java.io.OutputStream;
+//import apumetodit.RandomNumero;
+import fi.jyu.mit.ohj2.Mjonot;
+
 import java.io.PrintStream;
 
 /**
@@ -31,12 +33,14 @@ public class Kurssi {
     
     
     /**
+     * TODO myöhemmin: ota käyttöön!
+     * 
      * Tulostetaan kurssin tiedot
      * @param os teitovirta johon tulostetaan 
      */
-    public void tulosta(OutputStream os) {
-        //tulsota(new PrintStream(os));
-    }
+    //public void tulosta(OutputStream os) {
+    //    //tulsota(new PrintStream(os));
+    //}
     
     
     /**
@@ -52,7 +56,7 @@ public class Kurssi {
     
     
     /**
-     * Palauttaa kurssin tunnusnumeron.
+     * Palauttaa kurssin ID
      * @return kurssin tunnusnumero
      */
     public int getID() {
@@ -60,22 +64,6 @@ public class Kurssi {
     }
     
     
-    /**
-     * @return kurssin nimi
-     */
-    public String getNimi() {
-        return this.nimi;
-    }
-    
-    
-    /**
-     * @return kurssin opettajan sukunimi + etunimi
-     */
-    public String openNimet() {
-        return this.opeSukunimi + " " + this.opeEtunimi;
-    }
-    
-    
     /**
      * Antaa kurssille seuraavan tunnusnumeron
      * @example
@@ -87,13 +75,40 @@ public class Kurssi {
      *      ohjelmointi.rekisteroi();
      *    int n1 = saksa.getID();
      *    int n2 = ohjelmointi.getID();
-     *    n1 === 1;
-     *    n2 === 2;
+     *    n2 === n1+1;
      * </pre>
      */
     public void rekisteroi() {
-        this.kurssiID = nextID;
-        nextID++;
+        //this.kurssiID = nextID;
+        //nextID++;
+        this.setID(nextID);
+    }
+    
+    
+    /**
+     * Asettaa kurssin ID ja samalla varmista, että 
+     * seuraava numero on aina suurempi kuin tähän mennessä suurin.
+     * @param nro asetettava kurssi ID
+     */
+    public void setID(int nro) {  // TODO: ristiriita rekisteroi()-metodin kanssa??????
+        this.kurssiID = nro;
+        if (this.kurssiID >= nextID) nextID = this.kurssiID+1;
+    }
+    
+    
+    /**
+     * @return kurssin nimi
+     */
+    public String getNimi() {
+        return this.nimi;
+    }
+    
+    
+    /**
+     * @return kurssin opettajan sukunimi + etunimi
+     */
+    public String openNimet() {
+        return this.opeSukunimi + " " + this.opeEtunimi;
     }
     
     
@@ -102,13 +117,59 @@ public class Kurssi {
      * TODO: POISTA, kun kaikki toimii!!
      * 
      */
-    void tayta() {
-        this.nimi = "Esimerkkikurssi: " + RandomNumero.rand(1,100);
+    public void tayta() {
+        this.nimi = "Esimerkkikurssi"; //+ RandomNumero.rand(1,100);
         this.opeEtunimi = "Vesa";
         this.opeSukunimi = "Kokko";
         
     }
     
+    
+    /**
+     * Tilanne: 11.3. yritin luennon videon kanssa yritin tehdä 
+     *   tiedoston tallentaminen, lukeminen, Kurssi.toString() metodi, parse(), setID()
+     *   --ei toimi. Ennen sitä testi oli ok.
+     *   
+     * !!HUOM
+     *     Tämä metodi tarvitsee parantaa, nyt ei ole hyvin käyttökelpoinen.
+     *     toString-metodin testaamista varten tehty
+     * syötetään kurssi-oiliolle tiedot
+     * @param rivi tiedot string-muotona
+     */
+    public void parse(String rivi) {
+        
+        StringBuilder tiedot = new StringBuilder(rivi);
+        setID(Mjonot.erota(tiedot, '|', getID()));
+        nimi = Mjonot.erota(tiedot, '|', nimi);
+        opeSukunimi = Mjonot.erota(tiedot, '|', opeSukunimi);
+        opeEtunimi = Mjonot.erota(tiedot, '|', opeEtunimi);
+    }
+    
+
+    /**
+     * TODO ??? Testi ei mene läpi, Kurssi-olion alustaminen ei onnistu ????
+     * 
+     * Palauttaa kurssin tiedot Stringina, jonka voi tallentaa tiedostoon
+     * @return kurssin tiedot String-muotona
+     * @example
+     *  <pre name="test">
+     *     Kurssi hollanti = new Kurssi();
+     *     hollanti.parse("1|Esimerkkikurssi|Kokko |Vesa");
+     *     hollanti.toString() === "1|Esimerkkikurssi|Kokko Vesa";
+     *  </pre>
+     */
+    @Override
+    public String toString() {
+        
+        return ""+
+               this.getID()+"|"+
+               this.nimi+"|"+
+               this.openNimet();
+        
+        //TODO myöhemmin mieti: voisi olla suku + etu, kumpi olisi parempi muoto tallentaa jatkossa       
+    }
+    
+    
     //MAIN========================================================
     
     /**
diff --git a/mmkurssit/src/mmkurssit/Kurssit.java b/mmkurssit/src/mmkurssit/Kurssit.java
index cc30c47..117e30e 100644
--- a/mmkurssit/src/mmkurssit/Kurssit.java
+++ b/mmkurssit/src/mmkurssit/Kurssit.java
@@ -1,5 +1,12 @@
 package mmkurssit;
 
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileInputStream;
+import java.io.PrintStream;
+import java.util.Scanner;
+
 /**
  * Kopioi CRC-kortin tietoa tähän
  * @author aichinos
@@ -10,15 +17,16 @@ public class Kurssit {
 
     private Kurssi[] kurssit;
     private int kpl = 0;
+    private static String tiedostonNimi = "";
     
-    private static final int maxKpl = 5;//montako kurssia yhdelle taulukolle
+    private static final int MAX_KPL = 5;//montako kurssia yhdelle taulukolle
     
     
     /**
      * Alustetaan kurssit, johon säilytetään rekisteroiityjen kurssien viitteet
      */
     public Kurssit() {
-        this.kurssit = new Kurssi[maxKpl];
+        this.kurssit = new Kurssi[MAX_KPL];
     }
     
     
@@ -58,6 +66,54 @@ public class Kurssit {
     }
     
     
+ /**
+     * HUOM!!   Tee loppuun asti!!! 12.3.
+     * Lukee kurssi-lista tiedostosta. 
+     * @param hakemisto tiedoston hakemisto
+     * @throws SailoException jos lukeminen ei onnistu
+     */
+    public void lueTiedostosta(String hakemisto) throws SailoException {
+        tiedostonNimi = hakemisto + "/kurssit.dat";
+        
+        File ftied = new File(tiedostonNimi);
+        
+        try (Scanner fileIn = new Scanner(new FileInputStream(ftied))){
+            while ( fileIn.hasNext() ) {
+                String s = fileIn.nextLine();
+                if( s == null || "".equals(s) || s.charAt(0) == ';') {
+                    continue;
+                }
+                Kurssi kurssi = new Kurssi();
+                kurssi.parse(s);//parse pitää muokata!!
+                lisaa(kurssi);
+            }
+        } catch (FileNotFoundException e) {
+            throw new SailoException("Ei saa luettua tiedostoa" + tiedostonNimi);
+        }
+    }
+    
+    
+    /**
+     * Tallentaa kurssi-data tiedostoon.
+     * @param hakemisto mihin tallennetaan
+     * @throws SailoException jos tallennus ei onnistu
+     */
+    public void tallenna(String hakemisto) throws SailoException{
+        //TODO: hakemiston luominen tähän
+        File ftied = new File(hakemisto + "/kurssit.dat");
+        try (PrintStream fileOut = new PrintStream(new FileOutputStream(ftied, true))){ 
+                                                                    // true = uusi text appendoidaan vanhan tekstin perälle
+            for(int i=0; i<this.getKpl(); i++) {
+                Kurssi kurssi = this.anna(i);
+                fileOut.println(kurssi.toString());
+            }
+        } catch (FileNotFoundException e) {
+            throw new SailoException("Tiedosto " + ftied.getAbsolutePath());
+        }
+        
+    }
+    
+    
     /**
      * Palauttaa rekisteroityjen kurssien kpl
      * @return kurssien lukuäärä
diff --git a/mmkurssit/src/mmkurssit/test/KurssiTest.java b/mmkurssit/src/mmkurssit/test/KurssiTest.java
index 00ce85a..3fdea14 100644
--- a/mmkurssit/src/mmkurssit/test/KurssiTest.java
+++ b/mmkurssit/src/mmkurssit/test/KurssiTest.java
@@ -7,7 +7,7 @@ import mmkurssit.*;
 
 /**
  * Test class made by ComTest
- * @version 2025.02.25 20:00:59 // Generated by ComTest
+ * @version 2025.03.12 10:15:28 // Generated by ComTest
  *
  */
 @SuppressWarnings("all")
@@ -16,17 +16,26 @@ public class KurssiTest {
 
 
   // Generated by ComTest BEGIN
-  /** testRekisteroi67 */
+  /** testRekisteroi97 */
   @Test
-  public void testRekisteroi67() {    // Kurssi: 67
+  public void testRekisteroi97() {    // Kurssi: 97
     Kurssi saksa = new Kurssi(); 
-    assertEquals("From: Kurssi line: 69", 0, saksa.getID()); 
+    assertEquals("From: Kurssi line: 99", 0, saksa.getID()); 
     saksa.rekisteroi(); 
     Kurssi ohjelmointi = new Kurssi(); 
     ohjelmointi.rekisteroi(); 
     int n1 = saksa.getID(); 
     int n2 = ohjelmointi.getID(); 
-    assertEquals("From: Kurssi line: 75", 1, n1); 
-    assertEquals("From: Kurssi line: 76", 2, n2); 
+    assertEquals("From: Kurssi line: 105", n1+1, n2); 
+  } // Generated by ComTest END
+
+
+  // Generated by ComTest BEGIN
+  /** testToString156 */
+  @Test
+  public void testToString156() {    // Kurssi: 156
+    Kurssi hollanti = new Kurssi(); 
+    hollanti.parse("1|Esimerkkikurssi|Kokko |Vesa"); 
+    assertEquals("From: Kurssi line: 159", "1|Esimerkkikurssi|Kokko Vesa", hollanti.toString()); 
   } // Generated by ComTest END
 }
\ No newline at end of file
-- 
GitLab