Jäsenen ja harrastusten välinen yhteistyö

# vastuut

Vastuut

  • Jasen ei tiedä harrastuksista
  • Harrastus tietää jäsenen tunnusnumeron, mutta ei jäseniä
  • Harrastukset osaa etsiä tietyn jäsenen kaikki harrastukset
  • Kerho osaa pyytää Harrastukset-luokan oliota etsimään tietyn jäsenen harrastukset
  • KerhoGUIController pyytää Kerhoa tekemään hommia.
# vaihe5

Vaihe 5

Tilapäisesti tiedot tulostetaan keskiosaan vaihdettuun TextAreaan:

Harrastus

Harrastus.java

012 public class Harrastus {
013     private int tunnusNro;
014     private int jasenNro;
015     private String ala;
016     private int aloitusvuosi;
017     private int tuntiaViikossa;

...

106     public int getJasenNro() {
107         return jasenNro;
108     }

Harrastukset

Harrastukset.java

016     private final Collection<Harrastus> alkiot        = new ArrayList<Harrastus>();
031     public void lisaa(Harrastus har) {
032         alkiot.add(har);
033     }
136     public List<Harrastus> annaHarrastukset(int tunnusnro) {
137         List<Harrastus> loydetyt = new ArrayList<Harrastus>();
138         for (Harrastus har : alkiot)
139             if (har.getJasenNro() == tunnusnro) loydetyt.add(har);
140         return loydetyt;
141     }

Kerho

Kerho.java

016     private final Jasenet jasenet = new Jasenet();
017     private final Harrastukset harrastukset = new Harrastukset(); 
072     public void lisaa(Harrastus har) {
073         harrastukset.lisaa(har);
074     }
119     public List<Harrastus> annaHarrastukset(Jasen jasen) {
120         return harrastukset.annaHarrastukset(jasen.getTunnusNro());
121     }

KerhoGUIController

263     public void uusiHarrastus() { 
264         if ( jasenKohdalla == null ) return;  
265         Harrastus har = new Harrastus();  
266         har.rekisteroi();  
267         har.vastaaPitsinNyplays(jasenKohdalla.getTunnusNro());  
268         kerho.lisaa(har);  
269         hae(jasenKohdalla.getTunnusNro());          
270     } 

Esimerkiksi Jasenen tulostamista varten haetaan jäsenen harrastukset

303     public void tulosta(PrintStream os, final Jasen jasen) {
304         os.println("----------------------------------------------");
305         jasen.tulosta(os);
306         os.println("----------------------------------------------");
307         List<Harrastus> harrastukset = kerho.annaHarrastukset(jasen);   
308         for (Harrastus har:harrastukset)
309             har.tulosta(os);  
310     }

Vaihe 7

Jäsenen tietojen näyttämiseksi täytetään jäsenen tiedot omiin kenttiinsä ja sitten näytetään harrastuksen tiedot taulukkoon:

KerhoGuiController

228     protected void naytaJasen() {
229         jasenKohdalla = chooserJasenet.getSelectedObject();
230         if (jasenKohdalla == null) return;
231         
232         JasenDialogController.naytaJasen(edits, jasenKohdalla); 
233         naytaHarrastukset(jasenKohdalla);
234     }

JasenDialogController, vaihe 7.1.3

094     public static void naytaJasen(TextField[] edits, Jasen jasen) {
095         if (jasen == null) return;
096         edits[0].setText(jasen.getNimi());
097         edits[1].setText(jasen.getHetu());
098         edits[2].setText(jasen.getKatuosoite());
099         edits[3].setText(jasen.getPostinumero());
100     }

Tässä vaiheessa näyttämiseen käyetään vielä get-metodeja eikä niitä ole jaksettu kirjoittaa kaikille kentille. Yleisemmästä ideasta lue lisää Tiedonsyöttö, Kentät indeksoidusti.

JasenDialogController.java, Vaihe 7.2

181     public static void naytaJasen(TextField[] edits, Jasen jasen) {
182         if (jasen == null) return;
183         for (int k = jasen.ekaKentta(); k < jasen.getKenttia(); k++) {
184             edits[k].setText(jasen.anna(k));
185         }
186     }

Yhden jäsenen harrastuksen näyttäminen:

KerhoGuiController

285     private void naytaHarrastukset(Jasen jasen) {
286         tableHarrastukset.clear();
287         if ( jasen == null ) return;
288         
289         try {
290             List<Harrastus> harrastukset = kerho.annaHarrastukset(jasen);
291             if ( harrastukset.size() == 0 ) return;
292             for (Harrastus har: harrastukset)
293                 naytaHarrastus(har);
294         } catch (SailoException e) {
295             // naytaVirhe(e.getMessage());
296         } 
297     }
298 
299     
300     private void naytaHarrastus(Harrastus har) {
301         String[] rivi = har.toString().split("\\|"); // TODO: huono ja tilapäinen ratkaisu
302         tableHarrastukset.add(har,rivi[2],rivi[3],rivi[4]);
303     }

Harrastuksen lisääminen

KerhoGuiController 7.1.3

309     public void uusiHarrastus() {
310         if ( jasenKohdalla == null ) return; 
311         Harrastus har = new Harrastus(); 
312         har.rekisteroi(); 
313         har.vastaaPitsinNyplays(jasenKohdalla.getTunnusNro()); 
314         try {
315             kerho.lisaa(har);
316         } catch (SailoException e) {
317             Dialogs.showMessageDialog("Ongelmia lisäämisessä! " + e.getMessage());
318         } 
319         hae(jasenKohdalla.getTunnusNro());         
320     }
321 

Myohemmin kun harrastusta voi muokata, tämä tehdään

KerhoGuiController vaihe 7.4

340     private void uusiHarrastus() {
341         if ( jasenKohdalla == null ) return;
342         try {
343             Harrastus uusi = new Harrastus(jasenKohdalla.getTunnusNro());
344             uusi = TietueDialogController.kysyTietue(null, uusi, 0);
345             if ( uusi == null ) return;
346             uusi.rekisteroi();
347             kerho.lisaa(uusi);
348             naytaHarrastukset(jasenKohdalla); 
349             tableHarrastukset.selectRow(1000);  // järjestetään viimeinen rivi valituksi
350         } catch (SailoException e) {
351             Dialogs.showMessageDialog("Lisääminen epäonnistui: " + e.getMessage());
352         }
353     }
354     

Tämän voisi viedä vielä pidemmällekin niin, että jäsenten tunnusnumeroista ei tarvitsisi tietää mitään:

340    public void uusiHarrastus() {
341        if ( jasenKohdalla == null ) return;
342        Harrastus harrastus = kerho.luoUusiHarrastus(jasenKohdalla);
...

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.