1   package kerho;
2   
3   import java.util.Iterator;
4   
5   /**
6    * Kerho-luokka, joka huolehtii jäsenistöstä.  Pääosin kaikki metodit
7    * ovat vain "välittäjämetodeja" jäsenistöön.
8    *
9    * @author Vesa Lappalainen
10   * @version 1.0, 09.02.2003
11   * @version 1.1, 23.02.2003
12   * @version 1.2, 07.01.2008 / testit
13   */
14  public class Kerho implements Iterable<Jasen> {
15    private final Jasenet jasenet = new Jasenet();
16    private final Harrastukset harrastukset = new Harrastukset();
17  
18    
19    /**
20     * Palauttaa kerhon nimen
21     * @return kerhon nimi
22     */
23    public String getNimi() { return jasenet.getKokoNimi(); }
24  
25    
26    /**
27     * Palautaa kerhon jäsenmäärän
28     * @return jäsenmäärä
29     */
30    public int getJasenia() { return jasenet.getLkm();       }
31  
32    
33    /**
34     * Poistaa jäsenistöstä ja harrasteista ne joilla on nro. Kesken.
35     * @param nro viitenumero, jonka mukaan poistetaan
36     * @return montako jäsentä poistettiin
37     */
38    public int poista(int nro)             { return 0;                          }
39  
40    
41    /**
42     * Tekee varakopion kerhosta
43     * @param bakTark tarkennin varakopioille
44     * @return onnistuiko kopioiden tekeminen 
45     */
46    public boolean teeBak(String bakTark)  { return jasenet.teeBak(bakTark);   }
47    
48    
49    /**
50     * Palauttaa tiedoston nimen 
51     * @return tiedoston nimi
52     */
53    public String getTiedostonNimi()       { return jasenet.getTiedostonNimi();}
54    
55    
56    /**
57     * Palauttaa varkopion nimen
58     * @return varakopion nimi
59     */
60    public String getBakNimi()             { return jasenet.getBakNimi();      }
61  
62    
63    /**
64     * Lisää kerhoon uuden jäsenen
65     * @param jasen
66     * @throws SailoException
67     * @example
68     * <pre name="test">
69     * #THROWS SailoException
70     * #PACKAGEIMPORT
71     * #import java.util.*;
72     * 
73     * Kerho kerho = new Kerho();
74     * Jasen aku1 = new Jasen(), aku2 = new Jasen();
75     * kerho.getJasenia() === 0;
76     * kerho.lisaa(aku1); kerho.getJasenia() === 1;
77     * kerho.lisaa(aku2); kerho.getJasenia() === 2;
78     * kerho.lisaa(aku1); kerho.getJasenia() === 3;
79     * 
80     * Iterator<Jasen>  i=kerho.iterator();
81     * i.next() == aku1  === true;
82     * i.next() == aku2  === true;
83     * i.next() == aku1  === true;
84     * i.next();  #THROWS NoSuchElementException
85     *
86     * kerho.lisaa(aku1); kerho.getJasenia() === 4;
87     * kerho.lisaa(aku1); kerho.getJasenia() === 5;
88     * kerho.lisaa(aku1);            #THROWS SailoException
89     * </pre>
90     * 
91     */
92    public void lisaa(Jasen jasen) throws SailoException { 
93      jasenet.lisaa(jasen);            
94    }
95    
96    
97    /**
98     * Listään uusi harrastus kerhoon
99     * @param har 
100    */
101   public void lisaa(Harrastus har)  { 
102       harrastukset.lisaa(har);              
103   }
104   
105   
106   /**
107    * Kaikien jäsenten iteraattori
108    * @return jäseniteraattori
109    */
110   public Iterator<Jasen> iterator() { 
111       return jasenIterator();       
112   }
113 
114   
115   /**
116    * Kaikien jäsenten iteraattori
117    * @return jäseniteraattori
118    */
119   public Iterator<Jasen> jasenIterator() { 
120       return jasenet.iterator();       
121   }
122 
123   
124   /**
125    * Kaikkien harrastusten iteraattori
126    * @return harrastusiteraattori
127    */
128   public Iterator<Harrastus> harrastusIterator() { 
129       return harrastukset.iterator();  
130   }
131   
132   
133   /**
134    * Tietyn jäsenen iteraattori
135    * @param jid jäsenen viitenumero
136    * @return harrastusiteraattori yhdelle jäsenelle
137    */
138   public Iterator<Harrastus> harrastusIterator(int jid) { 
139       return harrastukset.iterator(jid);
140   }
141 
142   
143   /**
144    * Palauttaa i:n jäsenen
145    * @param i monesko jäsen palautetaan
146    * @return viite i:teen jäseneen
147    * @throws IndexOutOfBoundsException jos i väärin
148    * @deprecated
149    */
150   @Deprecated
151   public Jasen annaJasen(int i) throws IndexOutOfBoundsException { 
152     return jasenet.anna(i);           
153   }
154 
155   /**
156    * Lukee kerhon tiedot tiedostosta
157    * @param nimi jota käyteään lukemisessa
158    * @throws SailoException jos lukeminen epäonnistuu
159    */
160   public void lueTiedostosta(String nimi) throws SailoException {
161     jasenet.lueTiedostosta(nimi);
162   }
163 
164   
165   /**
166    * Tallettaa kerhon tiedot tiedostoon
167    * @throws SailoException jos tallettamisessa ongelmia
168    */
169   public void talleta() throws SailoException {
170     jasenet.talleta();
171   }
172 
173   
174   /**
175    * Testiohjelma kerhosta
176    * @param args ei käytössä
177    */
178   public static void main(String args[]) {
179     Kerho kerho = new Kerho();
180 
181     try {
182       kerho.lueTiedostosta("kelmit");
183 
184       Jasen aku = new Jasen(), aku2 = new Jasen();
185       aku.rekisteroi();    aku.vastaaAkuAnkka();
186       aku2.rekisteroi();   aku2.vastaaAkuAnkka();
187 
188       kerho.lisaa(aku);
189       kerho.lisaa(aku2);
190 
191       System.out.println("============= Kerhon testi =================");
192 
193       for (int i=0; i<kerho.getJasenia(); i++) {
194         Jasen jasen = kerho.annaJasen(i);
195         System.out.println("Jäsen nro: " + i);
196         jasen.tulosta(System.out);
197       }
198 
199     } catch ( SailoException ex ) {
200       System.out.println(ex.getMessage());
201     }
202   }
203 
204 
205 }
206 
207 
208