diff --git a/Ohj2HT/src/Luokat/Reissut.java b/Ohj2HT/src/Luokat/Reissut.java index 1d005ad1a96906e312be7f5ae028ae5ed25ef21a..6ae9f98b7482d4d008c831540bf269cbf9a0c55d 100644 --- a/Ohj2HT/src/Luokat/Reissut.java +++ b/Ohj2HT/src/Luokat/Reissut.java @@ -1,5 +1,7 @@ package Luokat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; @@ -66,20 +68,45 @@ public class Reissut { } /** - * etsii reissun päivämäärän perusteella + * etsii reissun päivämäärän perusteella, jokerina toimii * merkki * @param paivamaara mikä päivä - * @return em. päivän reissun + * @return listan reissuista joilla on haluttu päivämäärä */ - public static Reissu etsi(String paivamaara, Reissut reissut) { - - for (Reissu t : reissut.getReissut()) { - if (t.getPaivamaara().equals(paivamaara)) { - return t; - } - } - return null; - } + public static List<Reissu> etsi(String paivamaara, Reissut reissut) { + List<Reissu> re = new ArrayList<>(); + + paivamaara = paivamaara.replace('.', '-').replace('/', '-').replace(',', '-').replace(' ', '-').trim(); + String[] osat = paivamaara.split("-"); + + String paiva = "*", kuukausi = "*", vuosi = "*"; + + if (osat.length > 0) paiva = osat[0]; + if (osat.length > 1) kuukausi = osat[1]; + if (osat.length > 2) vuosi = osat[2]; + + if (!paiva.equals("*") && paiva.length() == 1) paiva = "0" + paiva; + if (!kuukausi.equals("*") && kuukausi.length() == 1) kuukausi = "0" + kuukausi; + + + for (Reissu t : reissut.getReissut()) { + LocalDate date = t.getPaivamaara(); + + String reissuPaiva = String.format("%02d", date.getDayOfMonth()); + String reissuKuukausi = String.format("%02d", date.getMonthValue()); + String reissuVuosi = String.valueOf(date.getYear()); + + + if (!paiva.equals("*") && !paiva.equals(reissuPaiva)) continue; + if (!kuukausi.equals("*") && !kuukausi.equals(reissuKuukausi)) continue; + if (!vuosi.equals("*") && !vuosi.equals(reissuVuosi)) continue; + + re.add(t); + } + + return re; + } + public void sort() { reissut.sort(Comparator.comparing(Reissu::getPaivamaara).reversed()); @@ -136,32 +163,38 @@ public class Reissut { * * test.removeReissu(); * test.getReissut().size() === 3; + * * </pre> */ - // Testi + public static void main(String[] args) { + Saaliit saaliita = new Saaliit(8); + Reissut test = new Reissut(saaliita); + test.getReissut().clear(); + + Reissu t0 = new Reissu(Reissu.sToDate("1.12.2323"), "ka", "pilvi", new ArrayList<>(), false); + Reissu t1 = new Reissu(Reissu.sToDate("12.12.2023"), "jk", "sade", new ArrayList<>(), false); + Reissu t2 = new Reissu(Reissu.sToDate("12.12.1223"), "sk", "aurinko", new ArrayList<>(), false); + Reissu t3 = new Reissu(Reissu.sToDate("15.11.2024"), "ka", "pilvi", new ArrayList<>(), false); + test.lisaaListaan(t1); + test.lisaaListaan(t2); + test.lisaaListaan(t3); + test.lisaaListaan(t0); + test.getReissut().size(); + t1.poistetaan(); + + test.removeReissu(); + test.getReissut().size(); + + List<Reissu> a = new ArrayList<>(); + a = etsi("*,*,1223", test); + a.size(); + System.out.println(a); + } + //todo: //tallenna() - - // kesken... - public int[] paivamaaraToInt(String pm) { - String[] osat = pm.split("."); - if (osat.length < 3) { - return null; - } - int[] pv = new int[3]; - - pv[0] = Integer.parseInt(osat[0]); - pv[1] = Integer.parseInt(osat[1]); - pv[2] = Integer.parseInt(osat[2]); - return pv; - - } -//todo: -// tallenna() - - } diff --git a/Ohj2HT/src/Luokat/test/ReissutTest.java b/Ohj2HT/src/Luokat/test/ReissutTest.java index a2b7ed780f2abc3007cbd847d149fd958688ca09..d1beb35aaa93882468304d3e5c588357cc111595 100644 --- a/Ohj2HT/src/Luokat/test/ReissutTest.java +++ b/Ohj2HT/src/Luokat/test/ReissutTest.java @@ -11,12 +11,12 @@ import Luokat.Tulkki; import Luokat.Saaliit; import static org.junit.Assert.*; import org.junit.*; -import Luokat.*; +import static Luokat.Reissut.*; // Generated by ComTest END /** * Test class made by ComTest - * @version 2025.03.28 08:58:48 // Generated by ComTest + * @version 2025.03.31 16:23:35 // Generated by ComTest * */ @SuppressWarnings({ "all" }) @@ -25,9 +25,9 @@ public class ReissutTest { // Generated by ComTest BEGIN - /** testPaivamaaraToInt108 */ + /** testMain131 */ @Test - public void testPaivamaaraToInt108() { // Reissut: 108 + public void testMain131() { // Reissut: 131 Saaliit saaliita = new Saaliit(8); Reissut test = new Reissut(saaliita); test.getReissut().clear(); @@ -39,9 +39,12 @@ public class ReissutTest { test.lisaaListaan(t2); test.lisaaListaan(t3); test.lisaaListaan(t0); - assertEquals("From: Reissut line: 134", 4, test.getReissut().size()); + assertEquals("From: Reissut line: 157", 4, test.getReissut().size()); t1.poistetaan(); test.removeReissu(); - assertEquals("From: Reissut line: 138", 3, test.getReissut().size()); + assertEquals("From: Reissut line: 161", 3, test.getReissut().size()); + List<Reissu> a = new ArrayList<>(); + a = etsi("*,*,1223", test); + assertEquals("From: Reissut line: 165", 1, a.size()); } // Generated by ComTest END } \ No newline at end of file diff --git a/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java b/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java index 857c9bef3f63db99f1363e245723505e69d97038..bab86739766334a77b7dfb4570d4d06e94465e6f 100644 --- a/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java +++ b/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java @@ -1,5 +1,4 @@ package fxKalenteri; -import java.awt.*; import fi.jyu.mit.fxgui.*; import javafx.application.Platform; @@ -7,10 +6,14 @@ import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.input.KeyEvent; +import java.awt.Desktop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -39,6 +42,9 @@ public class KalenteriGUIController implements Initializable { private int aluksi; private boolean onkoPoistettu = false; private ObservableList<StringAndObject<String>> lista; + + @FXML + private TextField PvmHaku; @FXML private void handleTallenna() { tallenna(); @@ -55,11 +61,42 @@ public class KalenteriGUIController implements Initializable { } @FXML private void handleNollaa(){nollaaKartta();} + + + @FXML + private void handleEtsi(ActionEvent event) { + haku(); + } /* * <------------------------------ TÄSTÄ ETEENPÄIN EI ENÄÄN HANDLEREITA ------------------------------> */ + + /** + * hakee ja kirjoittaa reissuja + * todo: paikan mukaan kanssa. + */ + + public void haku() { + String haluttuPvm = PvmHaku.getText(); + if (haluttuPvm.isEmpty()) { + kirjoitaReissut(); + return; + } + + List<Reissu> halutut = Reissut.etsi(haluttuPvm, kalenteri.getReissut()); + + if (halutut != null) { + reissutLista.getItems().clear(); + for (Reissu reissu : halutut) { + reissutLista.add(reissu.getPvmString() + " " + reissu.getSijainti(),reissu); + } + } + + } + + /** * Nollaa kartan diff --git a/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml b/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml index e2c99b7ccbad2d862a41de383779e8bd99ef66ca..cdd9107d523229eeddb3908b133f8304f134beb1 100644 --- a/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml +++ b/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml @@ -51,15 +51,34 @@ </top> <left> <BorderPane prefHeight="320.0" prefWidth="190.0" BorderPane.alignment="CENTER"> - <top> - <Label prefHeight="24.0" prefWidth="38.0" text="Reissut" BorderPane.alignment="CENTER" /> - </top> <center> <ListChooser fx:id="reissutLista" onMouseClicked="#handleReissu" prefHeight="302.0" prefWidth="199.0" rivit="" BorderPane.alignment="CENTER" /> </center> <bottom> <Button mnemonicParsing="false" onAction="#handleLisaaReissu" text="Lisää Reissu" BorderPane.alignment="CENTER" /> </bottom> + <top> + <GridPane prefHeight="30.0" prefWidth="168.0" BorderPane.alignment="CENTER"> + <columnConstraints> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="91.0" minWidth="10.0" prefWidth="79.0" /> + <ColumnConstraints hgrow="SOMETIMES" maxWidth="123.0" minWidth="10.0" prefWidth="111.0" /> + </columnConstraints> + <rowConstraints> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + </rowConstraints> + <children> + <Label text="Hae reissu: "> + <GridPane.margin> + <Insets /> + </GridPane.margin> + <padding> + <Insets left="10.0" /> + </padding> + </Label> + <TextField fx:id="PvmHaku" onAction="#handleEtsi" promptText="PVM" GridPane.columnIndex="1" /> + </children> + </GridPane> + </top> </BorderPane> </left> <center>