Skip to content
Snippets Groups Projects
Commit cea081f3 authored by Vesa Lappalainen's avatar Vesa Lappalainen :bicyclist:
Browse files

JasenControllerDialog geneeriseksi

parent 14695f4f
No related branches found
No related tags found
No related merge requests found
......@@ -10,14 +10,14 @@ import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ScrollPane;
import javafx.stage.Stage;
import kerho.Jasen;
import kanta.Tietue;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.Node;
import javafx.scene.control.Label;
@SuppressWarnings("javadoc")
public class JasenDialogController implements ModalControllerInterface<Jasen>, Initializable {
public class JasenDialogController<TYPE extends Tietue> implements ModalControllerInterface<TYPE>, Initializable {
@FXML private TextField editNimi;
@FXML private TextField editHetu;
......@@ -26,17 +26,17 @@ public class JasenDialogController implements ModalControllerInterface<Jasen>, I
@FXML private GridPane gridJasen;
@FXML private Label labelVirhe;
@FXML
ScrollPane panelJasen;
@FXML private ScrollPane panelJasen;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
alusta();
// alusta();
// Ei voi täällä vielä alustaa kun ei ole jasenKohdalle ei ole olemassa, siirretty setDefault
}
@FXML private void handleOK() {
if ( jasenKohdalla != null && jasenKohdalla.getNimi().trim().equals("") ) {
if ( jasenKohdalla != null && jasenKohdalla.anna(jasenKohdalla.ekaKentta()).trim().equals("") ) {
naytaVirhe("Nimi ei saa olla tyhjä");
return;
}
......@@ -63,13 +63,14 @@ public class JasenDialogController implements ModalControllerInterface<Jasen>, I
@Override
public Jasen getResult() {
public TYPE getResult() {
return jasenKohdalla;
}
@Override
public void setDefault(Jasen oletus) {
public void setDefault(TYPE oletus) {
jasenKohdalla = oletus;
alusta();
naytaJasen(edits, jasenKohdalla);
}
......@@ -77,14 +78,13 @@ public class JasenDialogController implements ModalControllerInterface<Jasen>, I
@Override
public void handleShown() {
// TODO Auto-generated method stub
kentta = Math.max(apujasen.ekaKentta(), Math.min(kentta, apujasen.getKenttia()-1));
kentta = Math.max(jasenKohdalla.ekaKentta(), Math.min(kentta, jasenKohdalla.getKenttia()-1));
edits[kentta].requestFocus();
}
private Jasen jasenKohdalla;
private TYPE jasenKohdalla;
private TextField[] edits;
private static Jasen apujasen = new Jasen();
private int kentta;
......@@ -93,7 +93,7 @@ public class JasenDialogController implements ModalControllerInterface<Jasen>, I
* @param gridJasen mihin tiedot luodaan
* @return luodut tekstikentät
*/
public static TextField[] luoKentat(GridPane gridJasen) {
public static<TYPE extends Tietue> TextField[] luoKentat(GridPane gridJasen, TYPE apujasen) {
gridJasen.getChildren().clear();
TextField[] edits = new TextField[apujasen.getKenttia()];
......@@ -112,7 +112,7 @@ public class JasenDialogController implements ModalControllerInterface<Jasen>, I
private void alusta() {
// edits = new TextField[]{editNimi, editHetu, editKatuosoite, editPostinumero};
edits = luoKentat(gridJasen);
edits = luoKentat(gridJasen, jasenKohdalla);
for (TextField edit : edits)
if ( edit != null )
edit.setOnKeyReleased( e -> kasitteleMuutosJaseneen(edit));
......@@ -145,19 +145,14 @@ public class JasenDialogController implements ModalControllerInterface<Jasen>, I
*/
private void kasitteleMuutosJaseneen(TextField edit) {
if (jasenKohdalla == null) return;
int k = getFieldId(edit,apujasen.ekaKentta());
int k = getFieldId(edit,jasenKohdalla.ekaKentta());
String s = edit.getText();
String virhe = null;
virhe = jasenKohdalla.aseta(k, s);
if (virhe == null) {
naytaVirhe(virhe);
} else {
naytaVirhe(virhe);
}
String virhe = jasenKohdalla.aseta(k, s);
naytaVirhe(virhe);
}
public static void naytaJasen(TextField[] edits, Jasen jasen) {
public static<TYPE extends Tietue> void naytaJasen(TextField[] edits, TYPE jasen) {
if (jasen == null) return;
for (int k = jasen.ekaKentta(); k < jasen.getKenttia(); k++) {
edits[k].setText(jasen.anna(k));
......@@ -173,9 +168,9 @@ public class JasenDialogController implements ModalControllerInterface<Jasen>, I
* @param kentta mikä kenttä saa fokuksen kun näytetään
* @return null jos painetaan Cancel, muuten täytetty tietue
*/
public static Jasen kysyJasen(Stage modalityStage, Jasen oletus, int kentta) {
return ModalController.<Jasen, JasenDialogController>showModal(
KerhoGUIController.class.getResource("JasenDialogView.fxml"),
public static<TYPE extends Tietue> TYPE kysyJasen(Stage modalityStage, TYPE oletus, int kentta) {
return ModalController.<TYPE, JasenDialogController<TYPE>>showModal(
JasenDialogController.class.getResource("JasenDialogView.fxml"),
"Jäsen",
modalityStage,
oletus,
......
......@@ -151,7 +151,7 @@ public class KerhoGUIController implements Initializable {
chooserJasenet.clear();
chooserJasenet.addSelectionListener(e -> naytaJasen());
edits = JasenDialogController.luoKentat(gridJasen);
edits = JasenDialogController.luoKentat(gridJasen, new Jasen());
for (TextField edit: edits)
if ( edit != null ) {
edit.setEditable(false);
......
package kanta;
/**
* Rajapinta tietueelle johon voidaan taulukon avulla rakentaa
* "attribuutit".
* @author vesal
* @version Mar 23, 2012
* @example
*/
public interface Tietue {
/**
* @return tietueen kenttien lukumäärä
* @example
* <pre name="test">
* #import kerho.Harrastus;
* Harrastus har = new Harrastus();
* har.getKenttia() === 5;
* </pre>
*/
int getKenttia();
/**
* @return ensimmäinen käyttäjän syötettävän kentän indeksi
* @example
* <pre name="test">
* Harrastus har = new Harrastus();
* har.ekaKentta() === 2;
* </pre>
*/
int ekaKentta();
/**
* @param k minkä kentän kysymys halutaan
* @return valitun kentän kysymysteksti
* @example
* <pre name="test">
* Harrastus har = new Harrastus();
* har.getKysymys(2) === "ala";
* </pre>
*/
String getKysymys(int k);
/**
* @param k Minkä kentän sisältö halutaan
* @return valitun kentän sisältö
* @example
* <pre name="test">
* Harrastus har = new Harrastus();
* har.parse(" 2 | 10 | Kalastus | 1949 | 22 t ");
* har.anna(0) === "2";
* har.anna(1) === "10";
* har.anna(2) === "Kalastus";
* har.anna(3) === "1949";
* har.anna(4) === "22";
* </pre>
*/
String anna(int k);
/**
* Asetetaan valitun kentän sisältö. Mikäli asettaminen onnistuu,
* palautetaan null, muutoin virheteksti.
* @param k minkä kentän sisältö asetetaan
* @param s asetettava sisältö merkkijonona
* @return null jos ok, muuten virheteksti
* @example
* <pre name="test">
* Harrastus har = new Harrastus();
* har.aseta(3,"kissa") === "aloitusvuosi: Ei kokonaisluku (kissa)";
* har.aseta(3,"1940") === null;
* har.aseta(4,"kissa") === "h/vko: Ei kokonaisluku (kissa)";
* har.aseta(4,"20") === null;
* </pre>
*/
String aseta(int k, String s);
/**
* Tehdään identtinen klooni tietueesta
* @return kloonattu tietue
* @throws CloneNotSupportedException jos kloonausta ei tueta
* @example
* <pre name="test">
* #THROWS CloneNotSupportedException
* Harrastus har = new Harrastus();
* har.parse(" 2 | 10 | Kalastus | 1949 | 22 t ");
* Object kopio = har.clone();
* kopio.toString() === har.toString();
* har.parse(" 1 | 11 | Uinti | 1949 | 22 t ");
* kopio.toString().equals(har.toString()) === false;
* kopio instanceof Harrastus === true;
* </pre>
*/
Tietue clone() throws CloneNotSupportedException;
/**
* Palauttaa tietueen tiedot merkkijonona jonka voi tallentaa tiedostoon.
* @return tietue tolppaeroteltuna merkkijonona
* @example
* <pre name="test">
* Harrastus harrastus = new Harrastus();
* harrastus.parse(" 2 | 10 | Kalastus | 1949 | 22 t ");
* harrastus.toString() =R= "2\\|10\\|Kalastus\\|1949\\|22.*";
* </pre>
*/
@Override
String toString();
}
......@@ -4,6 +4,7 @@ import java.io.*;
import fi.jyu.mit.ohj2.Mjonot;
import kanta.HetuTarkistus;
import kanta.Tietue;
import static kanta.HetuTarkistus.*;
......@@ -13,7 +14,7 @@ import static kanta.HetuTarkistus.*;
* @author Vesa Lappalainen
* @version 1.0, 22.02.2003
*/
public class Jasen implements Cloneable {
public class Jasen implements Tietue, Cloneable {
private int tunnusNro;
private String nimi = "";
private String hetu = "";
......@@ -232,7 +233,7 @@ public class Jasen implements Cloneable {
* @param out tietovirta johon tulostetaan
*/
public void tulosta(PrintStream out) {
out.println(String.format("%03d", tunnusNro, 3) + " " + nimi + " "
out.println(String.format("%03d", tunnusNro) + " " + nimi + " "
+ hetu);
out.println(" " + katuosoite + " " + postinumero + " " + postiosoite);
out.println(" k: " + kotipuhelin +
......@@ -402,7 +403,7 @@ public class Jasen implements Cloneable {
* Testiohjelma jäsenelle.
* @param args ei käytössä
*/
public static void main(String args[]) {
public static void main(String[] args) {
Jasen aku = new Jasen(), aku2 = new Jasen();
aku.rekisteroi();
aku2.rekisteroi();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment