diff --git a/.classpath b/.classpath index 8c39f29e9959a5779e6a1afb652cf9c24e3b6990..58a9ee2332b4b2a398cc8d2f134cef942ed850a3 100644 --- a/.classpath +++ b/.classpath @@ -8,5 +8,6 @@ </classpathentry> <classpathentry kind="con" path="org.eclipse.fx.ide.jdt.core.JAVAFX_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/ohj2"/> + <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/Kirjalista.jar b/Kirjalista.jar index 0e11c2c87e52a8234d36bd2609900b569bb8264d..8463797545d1e1cab93946687893a8335db33d9e 100644 Binary files a/Kirjalista.jar and b/Kirjalista.jar differ diff --git a/build.xml b/build.xml index aa59b5363e833fada057bb94b556d67a5bc6164b..3ccde9eee5da3105024fb5cafe85e6e189955cad 100644 --- a/build.xml +++ b/build.xml @@ -13,9 +13,11 @@ <attribute name="Class-Path" value="."/> </manifest> <fileset dir="${dir.jarfile}/bin"/> + <zipfileset excludes="META-INF/*.SF" src="C:/devel/ec2412/eclipse/plugins/org.eclipse.fx.ide.css.jfx8_3.8.0.202204150904.jar"/> <zipfileset excludes="META-INF/*.SF" src="C:/devel/jar/Ali.jar"/> <zipfileset excludes="META-INF/*.SF" src="C:/devel/jar/fxgui.jar"/> <zipfileset excludes="META-INF/*.SF" src="C:/devel/jar/Graphics.jar"/> + <zipfileset excludes="META-INF/*.SF" src="C:/devel/jar/Music.jar"/> </jar> </target> </project> diff --git a/src/Kirjalista/Genre.java b/src/Kirjalista/Genre.java new file mode 100644 index 0000000000000000000000000000000000000000..ce75905182ac803bec0dbc2e0cc9df91888564d9 --- /dev/null +++ b/src/Kirjalista/Genre.java @@ -0,0 +1,68 @@ +package Kirjalista; + + +/** + * Genre-luokka + * - Sisältää genren tiedot + * - Muuttaa merkkijonon genren tiedoiksi + * - Muuttaa genren tiedot merkkijonoksi + */ +public class Genre { + + private int id = 0; + private String nimi = ""; + + private static int seuraavaId = 1; + + /** + * Ottaa merkkijonon ja muuttaa sen genren tiedoiksi, poistaa turhat völilyönnit ja muuttaa + * syötteen pieniksi kirjaimiksi + * @param mjono Merkkijono, josta kirjan tiedot saadaan + * <pre name="test"> + * Genre g = new Genre(); + * g.parse("fantasia"); + * g.toString() === "fantasia"; + * g.parse("FANTASIA"); + * g.toString() === "fantasia"; + * g.parse(" Fantasia "); + * g.toString() === "fantasia"; + * </pre> + */ + public void parse(String mjono) { + this.nimi = mjono.trim().toLowerCase(); + } + + + /** + * Palauttaa genren nimen merkkijonona + */ + @Override + public String toString() { + return (this.nimi); + } + + + /** + * Rekisteröi genren antamalla sille id:n, kasvattaa seuraavaId:tä + * <pre name="test"> + * Genre g1 = new Genre(); + * Genre g2 = new Genre(); + * g1.rekisteroi(); + * g2.rekisteroi(); + * g1.getId() === g2.getId() - 1; + * </pre> + */ + public void rekisteroi() { + this.id = seuraavaId; + seuraavaId++; + } + + + /** + * palauttaa genren id:n + * @return Genren id + */ + public int getId() { + return this.id; + } +} diff --git a/src/Kirjalista/Kirja.java b/src/Kirjalista/Kirja.java new file mode 100644 index 0000000000000000000000000000000000000000..4028e947f01368b57a9736933d10257bb7c19871 --- /dev/null +++ b/src/Kirjalista/Kirja.java @@ -0,0 +1,124 @@ +package Kirjalista; + +import java.io.PrintStream; +import java.util.Random; +import fi.jyu.mit.ohj2.Mjonot; + + +/** + * Kirja-luokka + * - Sisältää kirjan tiedot + * - Muuttaa merkkijonon kirjan tiedoiksi + * - Muuttaa kirjan tiedot merkkijonoksi + */ +public class Kirja { + private int id = 0; + private String nimi = ""; + private String kirjoittaja = ""; + private String kirjasarja = ""; + private int sivumaara = 0; + + private static int seuraavaId = 1; + + + /** + * Ottaa merkkijonon ja muuttaa sen kirjan tiedoiksi, poistaa turhat välilyönnit + * merkkijono muotoa nimi|kirjoittaja|kirjasarja|sivumäärä + * @param mjono Merkkijono, josta kirjan tiedot saadaan + * <pre name="test"> + * Kirja k = new Kirja(); + * k.parse("Hobitti|J.R.R. Tolkien||336"); + * k.toString() === "Hobitti|J.R.R. Tolkien||336"; + * + * Kirja k2 = new Kirja(); + * k2.parse(" Hobitti | J.R.R. Tolkien | |336"); + * k2.toString() === "Hobitti|J.R.R. Tolkien||336"; + * + * + * </pre> + */ + public void parse(String mjono) { + StringBuilder sb = new StringBuilder(mjono); + this.nimi = Mjonot.erota(sb, '|').trim(); + this.kirjoittaja = Mjonot.erota(sb, '|').trim(); + this.kirjasarja = Mjonot.erota(sb, '|').trim(); + this.sivumaara = Mjonot.erotaInt(sb, 0); + } + + + /** + * Palauttaa kirjan tiedot merkkijonona muodossa id|nimi|kirjoittaja|kirjasarja|sivumäärä + */ + @Override + public String toString() { + return (this.id + "|" + this.nimi + "|" + this.kirjoittaja + "|" + this.kirjasarja + "|" + this.sivumaara); + } + + + /** + * Rekisteröi kirjan antamalla sille Id:n. Kasvattaa seuraavaId:tä. + * <pre name="test"> + * Kirja k = new Kirja(); + * Kirja k2 = new Kirja(); + * k.rekisteroi(); + * k2.rekisteroi(); + * k.getId() === k2.getId() - 1; + * </pre> + */ + public void rekisteroi() { + this.id = seuraavaId; + seuraavaId++; + } + + + /** + * Apumetodi, jolla saadaan täytettyä testiarvot kirjalle. + */ + public void esimerkkiKirja() { + Random rand = new Random(); + this.nimi = "Hobitti" + rand.nextInt(10); + this.kirjoittaja = "J.R.R. Tolkien"; + this.kirjasarja = ""; + this.sivumaara = rand.nextInt(1000); + } + + + /** + * @return palauttaa kirjan id:n + */ + public int getId() { + return this.id; + } + + + /** + * @return Kirjan nimi + */ + public String getNimi() { + return this.nimi; + } + + /** + * Tulostaa kirjan tiedot + * @param out Tietovirta, johon tulostetaan + */ + public void tulosta(PrintStream out) { + out.println(this.id + " " + this.nimi + " " + this.kirjoittaja + " " + this.kirjasarja + " " + this.sivumaara); + } + + + /** + * Testausta varten + * @param args ei käytössä + */ + public static void main(String[] args) { + Kirja k = new Kirja(); + k.rekisteroi(); + k.esimerkkiKirja(); + k.tulosta(System.out); + Kirja k1 = new Kirja(); + k1.rekisteroi(); + k1.esimerkkiKirja(); + k1.tulosta(System.out); + } +} diff --git a/src/Kirjalista/KirjanGenre.java b/src/Kirjalista/KirjanGenre.java new file mode 100644 index 0000000000000000000000000000000000000000..8db33122235597cbe656d1a77a59d8ce7f650f60 --- /dev/null +++ b/src/Kirjalista/KirjanGenre.java @@ -0,0 +1,67 @@ +package Kirjalista; + + +/** + * Liimaa kirjan ja genren yhteen id:n perusteella + */ +public class KirjanGenre { + private int kirjaId; + private int genreId; + + + /** + * Luo olion + * @param kirja kirja, jonka id tallennetaan + * @param genre genre, jonka id tallennetaan + * <pre name="test"> + * Kirja k = new Kirja(); + * k.rekisteroi(); + * Kirja k1 = new Kirja(); + * k1.rekisteroi(); + * + * Genre g = new Genre(); + * g.rekisteroi(); + * Genre g1 = new Genre(); + * g1.rekisteroi(); + * + * KirjanGenre kg = new KirjanGenre(k, g); + * KirjanGenre kg1 = new KirjanGenre(k1, g1); + * KirjanGenre kg2 = new KirjanGenre(k, g1); + * + * kg.getKirjaId() === k.getId(); + * kg1.getKirjaId() === k1.getId(); + * kg2.getKirjaId() === k.getId(); + * + * kg.getGenreId() === g.getId(); + * kg1.getGenreId() === g1.getId(); + * kg2.getGenreId() === g1.getId(); + * + * + * </pre> + */ + public KirjanGenre(Kirja kirja, Genre genre) { + this.kirjaId = kirja.getId(); + this.genreId = genre.getId(); + } + + + /** + * Palauttaa kirjan id:n + * @return Kirjan id + */ + public int getKirjaId() { + return this.kirjaId; + } + + + + /** + * Palauttaa genren id:n + * @return Genren id + */ + public int getGenreId() { + return this.genreId; + } +} + + diff --git a/src/Kirjalista/Kirjasto.java b/src/Kirjalista/Kirjasto.java new file mode 100644 index 0000000000000000000000000000000000000000..717b0d442493dde7f388f8aeed4cedadd8f542cc --- /dev/null +++ b/src/Kirjalista/Kirjasto.java @@ -0,0 +1,46 @@ +package Kirjalista; + + + +/** + * Luokka, joka keskustelee käyttöliittymän kanssa + * - Välittää tietoja käyttöliittymän ja kirjojen sekä genrejen välillä + */ +public class Kirjasto { + private Kirjat kirjat = new Kirjat(); + //private GenreRelaatio genreRelaatio; + //private Genret genret; + + + + /** + * @param kirja Lisättävä kirja + * @throws SailoException Jos kirjaa ei voi lisätä + */ + public void lisaaKirja(Kirja kirja) throws SailoException { + kirjat.lisaa(kirja); + } + + + /** + * @param indeksi Indeksipaikka, josta kirja haetaan + * @return Kirja annetussa indeksipaikassa + * @throws IndexOutOfBoundsException Jos indeksi laiton + */ + public Kirja haeKirja(int indeksi) throws IndexOutOfBoundsException { + return kirjat.hae(indeksi); + } + + + /** + * @return Kirjojen lukumäärä + */ + public int getKirjaLkm() { + return this.kirjat.getLkm(); + } + /* + public Genre haeGenre(Kirja kirja) { + GenreRelaatio.haeGenret(); + } + */ +} diff --git a/src/Kirjalista/Kirjat.java b/src/Kirjalista/Kirjat.java new file mode 100644 index 0000000000000000000000000000000000000000..27f9f8941c89fca5edd0c516af0bbef8e57effca --- /dev/null +++ b/src/Kirjalista/Kirjat.java @@ -0,0 +1,50 @@ +package Kirjalista; + + +/** + * Monikkoluokka kirjoille. + * - Sisältää taulukon kirjoista + * - Lisää ja poistaa kirjoja + * - Lukee ja kirjoittaa tiedostoon (sitten joskus) + * - Etsii ja lajittelee (sitten joskus) + */ +public class Kirjat { + private int maxLkm = 8; + private int lkm; + private Kirja[] alkiot = new Kirja[maxLkm]; + + + /** + * @param kirja Lisättävä kirja + * @throws SailoException Heittää, jos lisääminen ei onnistu + */ + public void lisaa(Kirja kirja) throws SailoException { + if (this.lkm >= this.alkiot.length) throw new SailoException("Liikaa alkioita"); + this.alkiot[this.lkm] = kirja; + this.lkm++; + } + + + + /** + * Hakee kirjan indeksipaikassa i + * @param i Halutun kirjan indeksi + * @return viite kirjaan, jonka indeksi on i + * @throws IndexOutOfBoundsException jos indeksi liian suuri tai pieni + */ + public Kirja hae(int i) throws IndexOutOfBoundsException { + if (i < 0 || this.lkm <= i) + throw new IndexOutOfBoundsException("Laiton indeksi: " + i); + return this.alkiot[i]; + } + + + /** + * Palauttaa kirjojen lukumäärän + * @return kirjojen lukumäärä + */ + public int getLkm() { + return this.lkm; + } + +} diff --git a/src/Kirjalista/SailoException.java b/src/Kirjalista/SailoException.java new file mode 100644 index 0000000000000000000000000000000000000000..88aea881a9669a75d321dfe4ff5fca1d866c0349 --- /dev/null +++ b/src/Kirjalista/SailoException.java @@ -0,0 +1,20 @@ +package Kirjalista; + +/** + * Poikkeusluokka tietorakenteesta aiheutuville poikkeuksille. + * @author Vesa Lappalainen + * @version 1.0, 22.02.2003 + */ +public class SailoException extends Exception { + private static final long serialVersionUID = 1L; + + + /** + * Poikkeuksen muodostaja jolle tuodaan poikkeuksessa + * käytettävä viesti + * @param viesti Poikkeuksen viesti + */ + public SailoException(String viesti) { + super(viesti); + } +} diff --git a/src/Kirjalista/test/GenreTest.java b/src/Kirjalista/test/GenreTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0353e3cb64ac3e74ea12509605d41a1478006162 --- /dev/null +++ b/src/Kirjalista/test/GenreTest.java @@ -0,0 +1,42 @@ +package Kirjalista.test; +// Generated by ComTest BEGIN +import static org.junit.Assert.*; +import org.junit.*; + +import Kirjalista.Genre; + +/** + * Test class made by ComTest + * @version 2025.02.24 13:41:02 // Generated by ComTest + * + */ +@SuppressWarnings({ "all" }) +public class GenreTest { + + + + // Generated by ComTest BEGIN + /** testParse22 */ + @Test + public void testParse22() { // Genre: 22 + Genre g = new Genre(); + g.parse("fantasia"); + assertEquals("From: Genre line: 25", "fantasia", g.toString()); + g.parse("FANTASIA"); + assertEquals("From: Genre line: 27", "fantasia", g.toString()); + g.parse(" Fantasia "); + assertEquals("From: Genre line: 29", "fantasia", g.toString()); + } // Generated by ComTest END + + + // Generated by ComTest BEGIN + /** testRekisteroi48 */ + @Test + public void testRekisteroi48() { // Genre: 48 + Genre g1 = new Genre(); + Genre g2 = new Genre(); + g1.rekisteroi(); + g2.rekisteroi(); + assertEquals("From: Genre line: 53", g2.getId() - 1, g1.getId()); + } // Generated by ComTest END +} \ No newline at end of file diff --git a/src/Kirjalista/test/KirjaTest.java b/src/Kirjalista/test/KirjaTest.java new file mode 100644 index 0000000000000000000000000000000000000000..50ed98afd982f7f41891c7ef874d0a225c00a8a1 --- /dev/null +++ b/src/Kirjalista/test/KirjaTest.java @@ -0,0 +1,41 @@ +package Kirjalista.test; +// Generated by ComTest BEGIN +import static org.junit.Assert.*; +import org.junit.*; + +import Kirjalista.Kirja; + +/** + * Test class made by ComTest + * @version 2025.02.24 13:31:16 // Generated by ComTest + * + */ +@SuppressWarnings({ "all" }) +public class KirjaTest { + + + + // Generated by ComTest BEGIN + /** testParse26 */ + @Test + public void testParse26() { // Kirja: 26 + Kirja k = new Kirja(); + k.parse("Hobitti|J.R.R. Tolkien||336"); + assertEquals("From: Kirja line: 29", "Hobitti|J.R.R. Tolkien||336", k.toString()); + Kirja k2 = new Kirja(); + k2.parse(" Hobitti | J.R.R. Tolkien | |336"); + assertEquals("From: Kirja line: 33", "Hobitti|J.R.R. Tolkien||336", k2.toString()); + } // Generated by ComTest END + + + // Generated by ComTest BEGIN + /** testRekisteroi58 */ + @Test + public void testRekisteroi58() { // Kirja: 58 + Kirja k = new Kirja(); + Kirja k2 = new Kirja(); + k.rekisteroi(); + k2.rekisteroi(); + assertEquals("From: Kirja line: 63", k2.getId() - 1, k.getId()); + } // Generated by ComTest END +} \ No newline at end of file diff --git a/src/Kirjalista/test/KirjanGenreTest.java b/src/Kirjalista/test/KirjanGenreTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4034012091d731828d9e31c9df49423712b5f307 --- /dev/null +++ b/src/Kirjalista/test/KirjanGenreTest.java @@ -0,0 +1,42 @@ +package Kirjalista.test; +// Generated by ComTest BEGIN +import static org.junit.Assert.*; +import org.junit.*; + +import Kirjalista.Genre; +import Kirjalista.Kirja; +import Kirjalista.KirjanGenre; + +/** + * Test class made by ComTest + * @version 2025.02.24 13:51:58 // Generated by ComTest + * + */ +@SuppressWarnings({ "all" }) +public class KirjanGenreTest { + + + + // Generated by ComTest BEGIN + /** testKirjanGenre16 */ + @Test + public void testKirjanGenre16() { // KirjanGenre: 16 + Kirja k = new Kirja(); + k.rekisteroi(); + Kirja k1 = new Kirja(); + k1.rekisteroi(); + Genre g = new Genre(); + g.rekisteroi(); + Genre g1 = new Genre(); + g1.rekisteroi(); + KirjanGenre kg = new KirjanGenre(k, g); + KirjanGenre kg1 = new KirjanGenre(k1, g1); + KirjanGenre kg2 = new KirjanGenre(k, g1); + assertEquals("From: KirjanGenre line: 31", k.getId(), kg.getKirjaId()); + assertEquals("From: KirjanGenre line: 32", k1.getId(), kg1.getKirjaId()); + assertEquals("From: KirjanGenre line: 33", k.getId(), kg2.getKirjaId()); + assertEquals("From: KirjanGenre line: 35", g.getId(), kg.getGenreId()); + assertEquals("From: KirjanGenre line: 36", g1.getId(), kg1.getGenreId()); + assertEquals("From: KirjanGenre line: 37", g1.getId(), kg2.getGenreId()); + } // Generated by ComTest END +} \ No newline at end of file diff --git a/src/fxKirjalista/KirjalistaGUIController.java b/src/fxKirjalista/KirjalistaGUIController.java index 928925d85c384561b82fe891edf11527e7c663f1..da9310028357b3dd071858a322e45b5fc717f6e8 100644 --- a/src/fxKirjalista/KirjalistaGUIController.java +++ b/src/fxKirjalista/KirjalistaGUIController.java @@ -1,31 +1,92 @@ package fxKirjalista; +import java.io.PrintStream; +import java.net.URL; import java.util.Optional; +import java.util.ResourceBundle; +import Kirjalista.Kirja; +import Kirjalista.Kirjasto; import fi.jyu.mit.fxgui.Dialogs; -import fi.jyu.mit.fxgui.ModalController; +import fi.jyu.mit.fxgui.ListChooser; +import fi.jyu.mit.fxgui.TextAreaOutputStream; import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.ButtonBar.ButtonData; +import javafx.scene.layout.Pane; import javafx.scene.control.ButtonType; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.TextArea; +import javafx.scene.text.Font; +import javafx.stage.Modality; +import javafx.stage.Stage; + /** * Ohjelman pääikkunan käsittelijä */ -public class KirjalistaGUIController { - +public class KirjalistaGUIController implements Initializable { + + @FXML private ListChooser<Kirja> chooserKirjat; + @FXML private ScrollPane paneKirja; + /** * Kirjan lisäys */ @FXML void handleLisaaKirja() { - ModalController.showModal(KirjalistaGUIController.class.getResource("LisaaView.fxml"), "Kirja", null, ""); + try { + Stage lisaaStage = new Stage(); + lisaaStage.initModality(Modality.APPLICATION_MODAL); + + final FXMLLoader ldr = new FXMLLoader(getClass().getResource("LisaaView.fxml")); + final Pane root = (Pane)ldr.load(); + + final LisaaController lisaaCtrl = (LisaaController) ldr.getController(); + final Scene scene = new Scene(root); + scene.getStylesheets().add(getClass().getResource("kirjalista.css").toExternalForm()); + lisaaStage.setScene(scene); + lisaaStage.setTitle("Lisää kirja"); + + lisaaCtrl.setIsanta(this); + lisaaCtrl.setKirjasto(this.kirjasto); + + lisaaStage.show(); + + } catch(Exception e) { + e.printStackTrace(); + } + } /** * Kirjan muokkaus */ @FXML void handleMuokkaaKirja() { - ModalController.showModal(KirjalistaGUIController.class.getResource("MuokkaaView.fxml"), "Kirja", null, ""); + try { + Stage muokkaaStage = new Stage(); + muokkaaStage.initModality(Modality.APPLICATION_MODAL); + + final FXMLLoader ldr = new FXMLLoader(getClass().getResource("MuokkaaView.fxml")); + final Pane root = (Pane)ldr.load(); + + final MuokkaaController muokkaaCtrl = (MuokkaaController) ldr.getController(); + final Scene scene = new Scene(root); + scene.getStylesheets().add(getClass().getResource("kirjalista.css").toExternalForm()); + muokkaaStage.setScene(scene); + muokkaaStage.setTitle("Muokkaa kirjaa"); + + muokkaaCtrl.setIsanta(this); + muokkaaCtrl.setKirjasto(this.kirjasto); + + muokkaaStage.show(); + + } catch(Exception e) { + e.printStackTrace(); + } + } /** @@ -66,6 +127,11 @@ public class KirjalistaGUIController { } +// ============================================================================ + + private Kirjasto kirjasto; + private Kirja valittuKirja; + private TextArea areaKirja = new TextArea(); /** * Luo näytölle dialogin, joka kysyy vahvistusta kirjan poistamiseksi @@ -84,4 +150,68 @@ public class KirjalistaGUIController { Optional<ButtonType> result = alert.showAndWait(); if ( result.get() == buttonTypeYes ) Dialogs.showMessageDialog("Vielä ei osata poistaa"); } + + + /** + * Asettaa controllerille viitteen kirjasto-olioon + * @param kirjasto Kirjasto-luokan olio, johon viite asetetaan + */ + public void setKirjasto(Kirjasto kirjasto) { + this.kirjasto = kirjasto; + } + + + /** + * Hakee lisätyn kirjan sen id:n perusteella ja lisää sen näyttöön + * @param idnro Kirjan id + */ + public void hae(int idnro) { + chooserKirjat.clear(); + + int index = 0; + for (int i = 0; i < kirjasto.getKirjaLkm(); i++) { + Kirja kirja = kirjasto.haeKirja(i); + if (kirja.getId() == idnro) index = i; + chooserKirjat.add(kirja.getNimi(), kirja); + } + chooserKirjat.setSelectedIndex(index); + } + + + /** + * Näyttää listasta valitun kirjan tiedot, + * tilapäisesti yhteen isoon edit-kenttään + */ + protected void naytaJasen() { + valittuKirja = chooserKirjat.getSelectedObject(); + + if (valittuKirja == null) return; + + areaKirja.setText(""); + try (PrintStream os = TextAreaOutputStream.getTextPrintStream(areaKirja)) { + valittuKirja.tulosta(os); + } + } + + /** + * Tekee tarvittavat muut alustukset, nyt vaihdetaan GridPanen tilalle + * yksi iso tekstikenttä, johon voidaan tulostaa jäsenten tiedot. + * Alustetaan myös jäsenlistan kuuntelija + */ + protected void alusta() { + paneKirja.setContent(areaKirja); + areaKirja.setFont(new Font("Courier New", 12)); + paneKirja.setFitToHeight(true); + + chooserKirjat.clear(); + chooserKirjat.addSelectionListener(e -> naytaJasen()); + } + + @Override + public void initialize(URL arg0, ResourceBundle arg1) { + alusta(); + + } + + } diff --git a/src/fxKirjalista/KirjalistaGUIView.fxml b/src/fxKirjalista/KirjalistaGUIView.fxml index 7d695b9c9a2f7c84f18be0aee1fb2803f89fb5d4..79299c07d0a6094ab045562be5962d1bce7a288b 100644 --- a/src/fxKirjalista/KirjalistaGUIView.fxml +++ b/src/fxKirjalista/KirjalistaGUIView.fxml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> +<?import fi.jyu.mit.fxgui.ListChooser?> <?import javafx.geometry.Insets?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> @@ -26,7 +27,7 @@ <Insets bottom="7.0" left="7.0" right="7.0" top="7.0" /> </VBox.margin> </Label> - <ScrollPane prefHeight="383.0" prefWidth="274.0"> + <ScrollPane fx:id="paneKirja" prefHeight="383.0" prefWidth="274.0"> <content> <AnchorPane prefHeight="303.0" prefWidth="237.0"> <children> @@ -41,6 +42,7 @@ <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> </rowConstraints> <children> <Label text="Nimi:"> @@ -93,6 +95,16 @@ <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> </GridPane.margin> </TextField> + <Label text="Sivumäärä" GridPane.rowIndex="5"> + <GridPane.margin> + <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> + </GridPane.margin> + </Label> + <TextField text="336" GridPane.columnIndex="1" GridPane.rowIndex="5"> + <GridPane.margin> + <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> + </GridPane.margin> + </TextField> </children> </GridPane> </children> @@ -131,21 +143,7 @@ <content> <AnchorPane prefHeight="336.0" prefWidth="267.0"> <children> - <Label text="Hobitti"> - <padding> - <Insets bottom="5.0" left="5.0" right="150.0" top="5.0" /> - </padding> - </Label> - <Label layoutY="28.0" prefHeight="27.0" prefWidth="284.0" text="Taru sormusten herrasta"> - <padding> - <Insets bottom="5.0" left="5.0" right="150.0" top="5.0" /> - </padding> - </Label> - <Label layoutY="56.0" text="Java-ohjelmointi"> - <padding> - <Insets bottom="5.0" left="5.0" right="150.0" top="5.0" /> - </padding> - </Label> + <ListChooser fx:id="chooserKirjat" prefHeight="254.0" prefWidth="284.0" rivit="Hobitti Taru sormusten herrasta Java-ohjelmointi " /> </children> </AnchorPane> </content> diff --git a/src/fxKirjalista/KirjalistaMain.java b/src/fxKirjalista/KirjalistaMain.java index 0fd5821cdc0069d14a89a12af49834416d3fe004..ae34e3f7a1f2afbb8c232babbfd472b46ec68311 100644 --- a/src/fxKirjalista/KirjalistaMain.java +++ b/src/fxKirjalista/KirjalistaMain.java @@ -1,5 +1,6 @@ package fxKirjalista; +import Kirjalista.Kirjasto; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; @@ -12,7 +13,7 @@ import javafx.fxml.FXMLLoader; * @version 23.1.2025 * */ -public class KirjalistaMain extends Application { +public class KirjalistaMain extends Application { @Override public void start(Stage primaryStage) { try { @@ -20,12 +21,16 @@ public class KirjalistaMain extends Application { final FXMLLoader ldr = new FXMLLoader(getClass().getResource("KirjalistaGUIView.fxml")); final Pane root = (Pane)ldr.load(); - // final KirjalistaGUIController kirjalistaCtrl = (KirjalistaGUIController) ldr.getController(); + final KirjalistaGUIController kirjalistaCtrl = (KirjalistaGUIController) ldr.getController(); final Scene scene = new Scene(root); scene.getStylesheets().add(getClass().getResource("kirjalista.css").toExternalForm()); primaryStage.setScene(scene); primaryStage.setTitle("Kirjalista"); + Kirjasto kirjasto = new Kirjasto(); + kirjalistaCtrl.setKirjasto(kirjasto); + + primaryStage.show(); } catch(Exception e) { diff --git a/src/fxKirjalista/LisaaController.java b/src/fxKirjalista/LisaaController.java index dabb379c9a66df45aca1b5f314b907c571bed1f7..7cd6a71d90eb9934681aaf6c92afba05e4b965f6 100644 --- a/src/fxKirjalista/LisaaController.java +++ b/src/fxKirjalista/LisaaController.java @@ -1,5 +1,8 @@ package fxKirjalista; +import Kirjalista.Kirja; +import Kirjalista.Kirjasto; +import Kirjalista.SailoException; import fi.jyu.mit.fxgui.ComboBoxChooser; import javafx.fxml.FXML; import javafx.scene.control.TextField; @@ -13,24 +16,26 @@ import fi.jyu.mit.fxgui.ModalControllerInterface; */ public class LisaaController implements ModalControllerInterface<String> { + @FXML private ComboBoxChooser<?> comboboxGenre; - @FXML private TextField textKirjailija; - @FXML private TextField textNimi; - @FXML private TextField textSarja; - @FXML private TextField textSivu; - @FXML private TextField textVuosi; + + private Kirjasto kirjasto; + + private KirjalistaGUIController isanta; @FXML void handleJasenLisatty() { - // TODO: + uusiKirja(); } - + + @FXML void handleOK() { - Dialogs.showMessageDialog("Vielä ei osata lisätä"); + uusiKirja(); + //Dialogs.showMessageDialog("Vielä ei osata lisätä"); ModalController.closeStage(textNimi); } @@ -44,7 +49,6 @@ public class LisaaController implements ModalControllerInterface<String> { @Override public void handleShown() { // TODO Auto-generated method stub - } @Override @@ -52,6 +56,45 @@ public class LisaaController implements ModalControllerInterface<String> { // TODO Auto-generated method stub } + + + + /** + * Asettaa controllerille viitteen kirjasto-olioon + * @param kirjasto Kirjasto-luokan olio, johon viite asetetaan + */ + public void setKirjasto(Kirjasto kirjasto) { + this.kirjasto = kirjasto; + } + + + /** + * Asettaa olion "isännäksi" kirjalistan pääikkunan kontrollerin, jotta + * keskustelu kontrollerien välillä helpompaa + * @param isanta Pääikkunan kontrolleri + */ + public void setIsanta(KirjalistaGUIController isanta) { + this.isanta = isanta; + } + + + /** + * Luo kirjan ja antaa sille id:n. Pyrkii lisäämään sen kirjat-olion + * taulukkoon ja antaa virheen, jos ei onnistu. + */ + protected void uusiKirja() { + Kirja uusi = new Kirja(); + uusi.esimerkkiKirja(); + uusi.rekisteroi(); + try { + kirjasto.lisaaKirja(uusi); + } catch (SailoException e) { + Dialogs.showMessageDialog("Ongelma " + e.getMessage()); + return; + } + isanta.hae(uusi.getId()); + + } } diff --git a/src/fxKirjalista/MuokkaaController.java b/src/fxKirjalista/MuokkaaController.java index 80a652f4cb224dc3718d9b47631c610b9cd505ec..79b659a44bcb63014a5323fa7d220c76d6b8a241 100644 --- a/src/fxKirjalista/MuokkaaController.java +++ b/src/fxKirjalista/MuokkaaController.java @@ -1,5 +1,6 @@ package fxKirjalista; +import Kirjalista.Kirjasto; import fi.jyu.mit.fxgui.ComboBoxChooser; import javafx.fxml.FXML; import javafx.scene.control.TextField; @@ -8,7 +9,7 @@ import fi.jyu.mit.fxgui.ModalController; import fi.jyu.mit.fxgui.ModalControllerInterface; /** - * + * Kontrolleri muokkausdialogille */ public class MuokkaaController implements ModalControllerInterface<String> { @@ -23,10 +24,10 @@ public class MuokkaaController implements ModalControllerInterface<String> { @FXML private TextField textSivu; @FXML private TextField textVuosi; - - @FXML void handleJasenLisatty() { - // TODO: - } + + private Kirjasto kirjasto; + + private KirjalistaGUIController isanta; @FXML void handleOK() { Dialogs.showMessageDialog("Vielä ei osata muokata"); @@ -58,5 +59,16 @@ public class MuokkaaController implements ModalControllerInterface<String> { } + /** + * Asettaa controllerille viitteen kirjasto-olioon + * @param kirjasto Kirjasto-luokan olio, johon viite asetetaan + */ + public void setKirjasto(Kirjasto kirjasto) { + this.kirjasto = kirjasto; + } + + public void setIsanta(KirjalistaGUIController isanta) { + this.isanta = isanta; + } }