Skip to content
Snippets Groups Projects
Commit ab90f2bd authored by tornhale's avatar tornhale
Browse files

Hakeminen toimii

parent 15bf0574
No related branches found
No related tags found
No related merge requests found
No preview for this file type
...@@ -125,7 +125,7 @@ public class GenreRelaatio { ...@@ -125,7 +125,7 @@ public class GenreRelaatio {
/** /**
* Poistaa alkion, jolla on annettu kirjaid * Poistaa alkion, jolla on annettu kirjaid
* @param kirjaid Indeksipaikka, josta alkio poistetaan * @param kirjaid kirjan id
* <pre name="test"> * <pre name="test">
* GenreRelaatio gr = new GenreRelaatio(); * GenreRelaatio gr = new GenreRelaatio();
* Kirja k = Kirja.testiKirja(); * Kirja k = Kirja.testiKirja();
......
package fxKirjalista; package fxKirjalista;
import java.io.PrintStream;
import java.net.URL; import java.net.URL;
import java.util.ArrayList;
import java.util.Optional; import java.util.Optional;
import java.util.ResourceBundle; import java.util.ResourceBundle;
...@@ -10,18 +10,18 @@ import Kirjalista.Kirja; ...@@ -10,18 +10,18 @@ import Kirjalista.Kirja;
import Kirjalista.Kirjasto; import Kirjalista.Kirjasto;
import fi.jyu.mit.fxgui.Dialogs; import fi.jyu.mit.fxgui.Dialogs;
import fi.jyu.mit.fxgui.ListChooser; import fi.jyu.mit.fxgui.ListChooser;
import fi.jyu.mit.fxgui.TextAreaOutputStream;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonBar.ButtonData; import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
import javafx.scene.control.ScrollPane; import javafx.scene.control.MenuItem;
import javafx.scene.control.TextArea; import javafx.scene.control.SplitMenuButton;
import javafx.scene.text.Font; import javafx.scene.control.TextField;
import javafx.stage.Modality; import javafx.stage.Modality;
import javafx.stage.Stage; import javafx.stage.Stage;
...@@ -32,7 +32,20 @@ import javafx.stage.Stage; ...@@ -32,7 +32,20 @@ import javafx.stage.Stage;
public class KirjalistaGUIController implements Initializable { public class KirjalistaGUIController implements Initializable {
@FXML private ListChooser<Kirja> chooserKirjat; @FXML private ListChooser<Kirja> chooserKirjat;
@FXML private ScrollPane paneKirja; @FXML private GridPane gridTiedot;
@FXML private TextField textNimi;
@FXML private TextField textKirjailija;
@FXML private TextField textSarja;
@FXML private TextField textGenre;
@FXML private TextField textVuosi;
@FXML private TextField textSivu;
@FXML private TextField hakuKentta;
@FXML private SplitMenuButton hakuehtoMenu;
@FXML private MenuItem menuGenre;
@FXML private MenuItem menuNimi;
@FXML private MenuItem menuKirjailija;
/** /**
* Kirjan lisäys * Kirjan lisäys
...@@ -128,15 +141,34 @@ public class KirjalistaGUIController implements Initializable { ...@@ -128,15 +141,34 @@ public class KirjalistaGUIController implements Initializable {
} }
@FXML void handleHaku() { @FXML void handleHaku() {
Dialogs.showMessageDialog("Vielä ei osata hakea"); //Dialogs.showMessageDialog("Vielä ei osata hakea");
hae(0);
} }
// ============================================================================ // ============================================================================
private Kirjasto kirjasto; private Kirjasto kirjasto;
private Kirja valittuKirja; private Kirja valittuKirja;
private TextArea areaKirja = new TextArea(); private String hakuEhto = "nimi";
/**
* Vaihtaa hakuehdon valittuun
* @param valittu Valittu hakuehto
*/
public void hakuEhto(MenuItem valittu) {
String ehto = valittu.getText();
if (hakuehtoMenu.getText().toLowerCase().contentEquals(ehto.toLowerCase())) {
hakuehtoMenu.setText("Hakuehto");
this.hakuEhto = "nimi";
return;
}
hakuehtoMenu.setText(ehto);
this.hakuEhto = ehto.toLowerCase();
}
/** /**
* Luo näytölle dialogin, joka kysyy vahvistusta kirjan poistamiseksi * Luo näytölle dialogin, joka kysyy vahvistusta kirjan poistamiseksi
...@@ -167,53 +199,89 @@ public class KirjalistaGUIController implements Initializable { ...@@ -167,53 +199,89 @@ public class KirjalistaGUIController implements Initializable {
/** /**
* Hakee lisätyn kirjan sen id:n perusteella ja lisää sen näyttöön * Hakee kirjat listchooseriin hakuehdon perusteella.
* @param idnro Kirjan id * Näyttää ylimmän kirjan tiedot.
* @param indeksi yleensä 0, paitsi jos halutaan näyttää tietyn kirjan tiedot
*/ */
public void hae(int idnro) { public void hae(int indeksi) {
chooserKirjat.clear(); chooserKirjat.clear();
int index = 0; int hakuIndeksi = 0;
switch (hakuEhto) {
case "genre":
hakuIndeksi = -1;
break;
case "nimi":
hakuIndeksi = 0;
break;
case "kirjailija":
hakuIndeksi = 1;
break;
default:
break;
}
// Haku muille ehdoille kuin genreille
if (hakuIndeksi >= 0) {
for (int i = 0; i < kirjasto.getKirjaLkm(); i++) { for (int i = 0; i < kirjasto.getKirjaLkm(); i++) {
Kirja kirja = kirjasto.haeKirjaIndeksilla(i); Kirja kirja = kirjasto.haeKirjaIndeksilla(i);
if (kirja.getId() == idnro) index = i; ArrayList<String> kentat = kirja.getTiedot();
if (kentat.get(hakuIndeksi).contains(hakuKentta.getText())) {
chooserKirjat.add(kirja.getNimi(), kirja); chooserKirjat.add(kirja.getNimi(), kirja);
} }
chooserKirjat.setSelectedIndex(index);
}
}
chooserKirjat.setSelectedIndex(indeksi);
naytaJasen();
} }
/** /**
* Näyttää listasta valitun kirjan tiedot, * Näyttää listasta valitun kirjan tiedot
* tilapäisesti yhteen isoon edit-kenttään
*/ */
protected void naytaJasen() { protected void naytaJasen() {
valittuKirja = chooserKirjat.getSelectedObject(); valittuKirja = chooserKirjat.getSelectedObject();
if (valittuKirja == null) return; if (valittuKirja == null) return;
areaKirja.setText(""); TextField[] tekstit = { textNimi, textKirjailija, textSarja, textVuosi, textSivu };
try (PrintStream os = TextAreaOutputStream.getTextPrintStream(areaKirja)) { ArrayList<String> tiedot = valittuKirja.getTiedot();
valittuKirja.tulosta(os);
os.println("========================================="); for (int i = 0; i < tekstit.length; i++) {
for (Genre g : kirjasto.haeGenret(valittuKirja.getId())) { tekstit[i].setText(tiedot.get(i));
g.tulosta(os);
} }
StringBuilder genreText = new StringBuilder("");
for (Genre g : kirjasto.haeGenret(valittuKirja.getId())) {
genreText.append(g.getNimi());
genreText.append(", ");
} }
genreText.delete(genreText.length() - 2, genreText.length());
textGenre.setText(genreText.toString());
} }
/** /**
* Tekee tarvittavat muut alustukset, nyt vaihdetaan GridPanen tilalle * Tekee tarvittavat muut alustukset
* yksi iso tekstikenttä, johon voidaan tulostaa jäsenten tiedot.
* Alustetaan myös jäsenlistan kuuntelija
*/ */
protected void alusta() { protected void alusta() {
paneKirja.setContent(areaKirja);
areaKirja.setFont(new Font("Courier New", 12));
paneKirja.setFitToHeight(true);
chooserKirjat.clear(); chooserKirjat.clear();
chooserKirjat.addSelectionListener(_ -> naytaJasen()); chooserKirjat.addSelectionListener(_ -> naytaJasen());
menuGenre.setOnAction( _ -> hakuEhto(menuGenre) );
menuNimi.setOnAction( _ -> hakuEhto(menuNimi) );
menuKirjailija.setOnAction( _ -> hakuEhto(menuKirjailija) );
} }
@Override @Override
......
...@@ -27,13 +27,13 @@ ...@@ -27,13 +27,13 @@
<Insets bottom="7.0" left="7.0" right="7.0" top="7.0" /> <Insets bottom="7.0" left="7.0" right="7.0" top="7.0" />
</VBox.margin> </VBox.margin>
</Label> </Label>
<ScrollPane fx:id="paneKirja" prefHeight="383.0" prefWidth="274.0"> <ScrollPane prefHeight="383.0" prefWidth="274.0">
<content> <content>
<AnchorPane prefHeight="303.0" prefWidth="237.0"> <AnchorPane prefHeight="295.0" prefWidth="237.0">
<children> <children>
<GridPane layoutX="-1.0" layoutY="1.0" prefHeight="235.0" prefWidth="238.0"> <GridPane fx:id="gridTiedot" layoutX="-1.0" layoutY="1.0" prefHeight="235.0" prefWidth="238.0">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="50.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
...@@ -47,60 +47,60 @@ ...@@ -47,60 +47,60 @@
<children> <children>
<Label text="Nimi:"> <Label text="Nimi:">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="7.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Label text="Kirjailija:" GridPane.rowIndex="1"> <Label text="Kirjailija:" GridPane.rowIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="7.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Label text="Kirjasarja:" GridPane.rowIndex="2"> <Label text="Kirjasarja:" GridPane.rowIndex="2">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="7.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Label text="Genre:" GridPane.rowIndex="3"> <Label text="Genre:" GridPane.rowIndex="3">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="7.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Label text="Julkaisuvuosi:" GridPane.rowIndex="4"> <Label text="Julkaisuvuosi:" GridPane.rowIndex="4">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="7.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<TextField text="Hobitti" GridPane.columnIndex="1"> <TextField fx:id="textNimi" editable="false" GridPane.columnIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </TextField>
<TextField text="J.R.R. Tolkien" GridPane.columnIndex="1" GridPane.rowIndex="1"> <TextField fx:id="textKirjailija" editable="false" GridPane.columnIndex="1" GridPane.rowIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </TextField>
<TextField text="-" GridPane.columnIndex="1" GridPane.rowIndex="2"> <TextField fx:id="textSarja" editable="false" GridPane.columnIndex="1" GridPane.rowIndex="2">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </TextField>
<TextField text="Fantasia" GridPane.columnIndex="1" GridPane.rowIndex="3"> <TextField fx:id="textGenre" editable="false" GridPane.columnIndex="1" GridPane.rowIndex="3">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </TextField>
<TextField text="1937" GridPane.columnIndex="1" GridPane.rowIndex="4"> <TextField fx:id="textVuosi" editable="false" GridPane.columnIndex="1" GridPane.rowIndex="4">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </TextField>
<Label text="Sivumäärä" GridPane.rowIndex="5"> <Label text="Sivumäärä" GridPane.rowIndex="5">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="7.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<TextField text="336" GridPane.columnIndex="1" GridPane.rowIndex="5"> <TextField fx:id="textSivu" editable="false" GridPane.columnIndex="1" GridPane.rowIndex="5">
<GridPane.margin> <GridPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</GridPane.margin> </GridPane.margin>
...@@ -118,12 +118,12 @@ ...@@ -118,12 +118,12 @@
<children> <children>
<HBox prefHeight="38.0" prefWidth="250.0"> <HBox prefHeight="38.0" prefWidth="250.0">
<children> <children>
<TextField onAction="#handleHaku" opacity="0.58" promptText="Haku🔍" /> <TextField fx:id="hakuKentta" onKeyReleased="#handleHaku" opacity="0.58" promptText="Haku🔍" />
<SplitMenuButton mnemonicParsing="false" text="Hakuehto"> <SplitMenuButton fx:id="hakuehtoMenu" mnemonicParsing="false" text="Hakuehto">
<items> <items>
<MenuItem mnemonicParsing="false" text="Nimi" /> <MenuItem fx:id="menuNimi" mnemonicParsing="false" text="Nimi" />
<MenuItem mnemonicParsing="false" text="Kirjailija" /> <MenuItem fx:id="menuKirjailija" mnemonicParsing="false" text="Kirjailija" />
<MenuItem mnemonicParsing="false" text="Genre" /> <MenuItem fx:id="menuGenre" mnemonicParsing="false" text="Genre" />
</items> </items>
<HBox.margin> <HBox.margin>
<Insets left="7.0" /> <Insets left="7.0" />
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
<content> <content>
<AnchorPane prefHeight="336.0" prefWidth="267.0"> <AnchorPane prefHeight="336.0" prefWidth="267.0">
<children> <children>
<ListChooser fx:id="chooserKirjat" prefHeight="254.0" prefWidth="284.0" rivit="Hobitti&#10;Taru sormusten herrasta&#10;Java-ohjelmointi&#10;" /> <ListChooser fx:id="chooserKirjat" prefHeight="336.0" prefWidth="284.0" rivit="Hobitti&#10;Taru sormusten herrasta&#10;Java-ohjelmointi&#10;" />
</children> </children>
</AnchorPane> </AnchorPane>
</content> </content>
......
...@@ -60,7 +60,7 @@ public class LisaaController { ...@@ -60,7 +60,7 @@ public class LisaaController {
/** /**
* Asettaa olion "isännäksi" kirjalistan pääikkunan kontrollerin, jotta * Asettaa olion "isännäksi" kirjalistan pääikkunan kontrollerin, jotta
* keskustelu kontrollerien välillä helpompaa * keskustelu kontrollerien välillä toimii
* @param isanta Pääikkunan kontrolleri * @param isanta Pääikkunan kontrolleri
*/ */
public void setIsanta(KirjalistaGUIController isanta) { public void setIsanta(KirjalistaGUIController isanta) {
...@@ -69,8 +69,7 @@ public class LisaaController { ...@@ -69,8 +69,7 @@ public class LisaaController {
/** /**
* Luo kirjan ja antaa sille id:n. Pyrkii lisäämään sen kirjat-olion * Luo uuden kirjan, genret ja relaatiot.
* taulukkoon ja antaa virheen, jos ei onnistu.
*/ */
protected void uusiKirja() { protected void uusiKirja() {
...@@ -115,7 +114,7 @@ public class LisaaController { ...@@ -115,7 +114,7 @@ public class LisaaController {
kirjasto.lisaaGenreRelaatio(uusi, genret); kirjasto.lisaaGenreRelaatio(uusi, genret);
isanta.hae(uusi.getId()); isanta.hae(kirjasto.getKirjaLkm() - 1);
ModalController.closeStage(textNimi); ModalController.closeStage(textNimi);
......
1|1 1|1
2|1 2|1
3|1
4|2 4|2
5|3
5|2
5|1 5|1
3|1
0|4
6|4
0|4
7|4
0|4
8|4
1|fantasia 1|fantasia
2|sci-fi 2|sci-fi
3|kauhu 3|kauhu
4|
...@@ -3,3 +3,6 @@ ...@@ -3,3 +3,6 @@
3|Hobitti 3|J.R.R. Tolkien||1937|187 3|Hobitti 3|J.R.R. Tolkien||1937|187
4|Linnunradan käsikirja liftareille|Douglas Adams|Linnunrata|1979|156 4|Linnunradan käsikirja liftareille|Douglas Adams|Linnunrata|1979|156
5|Hobitti8|J.R.R. Tolkien||1937|3 5|Hobitti8|J.R.R. Tolkien||1937|3
6|Esimerkki|Douglas Adams||0|0
7|testi|tessti||0|0
8|t|t||0|0
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment