| Kerho.java |
1 package kerho;
2
3 import java.util.Collection;
4 import java.util.Iterator;
5
6 /**
7 * Kerho-luokka, joka huolehtii jäsenistöstä. Pääosin kaikki metodit
8 * ovat vain "välittäjämetodeja" jäsenistöön.
9 *
10 * @author Vesa Lappalainen
11 * @version 1.0, 09.02.2003
12 * @version 1.1, 23.02.2003
13 * @version 1.2, 07.01.2008 / testit
14 */
15 public class Kerho implements Iterable<Jasen> {
16 private final Jasenet jasenet = new Jasenet();
17 private final Harrastukset harrastukset = new Harrastukset();
18
19
20 /**
21 * Palauttaa kerhon nimen
22 * @return kerhon nimi
23 */
24 public String getNimi() { return jasenet.getKokoNimi(); }
25
26
27 /**
28 * Palautaa kerhon jäsenmäärän
29 * @return jäsenmäärä
30 */
31 public int getJasenia() { return jasenet.getLkm(); }
32
33
34 /**
35 * Poistaa jäsenistöstä ja harrasteista ne joilla on nro. Kesken.
36 * @param nro viitenumero, jonka mukaan poistetaan
37 * @return montako jäsentä poistettiin
38 */
39 public int poista(int nro) { return 0; }
40
41
42 /**
43 * Palauttaa tiedoston nimen
44 * @return tiedoston nimi
45 */
46 public String getTiedostonNimi() { return jasenet.getTiedostonNimi();}
47
48
49 /**
50 * Palauttaa varkopion nimen
51 * @return varakopion nimi
52 */
53 public String getBakNimi() { return jasenet.getBakNimi(); }
54
55
56 /**
57 * Lisää kerhoon uuden jäsenen
58 * @param jasen lisättävä jäsen
59 * @throws SailoException jos lisääminen ei onnistu
60 * @example
61 * <pre name="test">
62 * #THROWS SailoException
63 * #PACKAGEIMPORT
64 * #import java.util.*;
65 *
66 * Kerho kerho = new Kerho();
67 * Jasen aku1 = new Jasen(), aku2 = new Jasen();
68 * kerho.getJasenia() === 0;
69 * kerho.lisaa(aku1); kerho.getJasenia() === 1;
70 * kerho.lisaa(aku2); kerho.getJasenia() === 2;
71 * kerho.lisaa(aku1); kerho.getJasenia() === 3;
72 *
73 * Iterator<Jasen> i=kerho.iterator();
74 * i.next() == aku1 === true;
75 * i.next() == aku2 === true;
76 * i.next() == aku1 === true;
77 * i.next(); #THROWS NoSuchElementException
78 *
79 * kerho.lisaa(aku1); kerho.getJasenia() === 4;
80 * kerho.lisaa(aku1); kerho.getJasenia() === 5;
81 * kerho.lisaa(aku1); #THROWS SailoException
82 * </pre>
83 *
84 */
85 public void lisaa(Jasen jasen) throws SailoException {
86 jasenet.lisaa(jasen);
87 }
88
89
90 /**
91 * Korvaa jäsenen tietorakenteessa. Ottaa jäsenen omistukseensa.
92 * Etsitään samalla tunnusnumerolla oleva jäsen. Jos ei löydy,
93 * niin lisätään uutena jäsenenä.
94 * @param jasen lisätäävän jäsenen viite. Huom tietorakenne muuttuu omistajaksi
95 * @throws SailoException jos tietorakennen on jo täynnä
96 */
97 public void korvaa(Jasen jasen) throws SailoException {
98 jasenet.korvaa(jasen);
99 }
100
101
102 /**
103 * Listään uusi harrastus kerhoon
104 * @param har lisättävä harrastus
105 */
106 public void lisaa(Harrastus har) {
107 harrastukset.lisaa(har);
108 }
109
110
111 /**
112 * Kaikien jäsenten iteraattori
113 * @return jäseniteraattori
114 */
115 public Iterator<Jasen> iterator() {
116 return jasenIterator();
117 }
118
119
120 /**
121 * Kaikien jäsenten iteraattori
122 * @return jäseniteraattori
123 */
124 public Iterator<Jasen> jasenIterator() {
125 return jasenet.iterator();
126 }
127
128
129 /**
130 * Kaikkien harrastusten iteraattori
131 * @return harrastusiteraattori
132 */
133 public Iterator<Harrastus> harrastusIterator() {
134 return harrastukset.iterator();
135 }
136
137
138 /**
139 * Tietyn jäsenen iteraattori
140 * @param jid jäsenen viitenumero
141 * @return harrastusiteraattori yhdelle jäsenelle
142 */
143 public Iterator<Harrastus> harrastusIterator(int jid) {
144 return harrastukset.iterator(jid);
145 }
146
147
148 /**
149 * Palauttaa i:n jäsenen
150 * @param i monesko jäsen palautetaan
151 * @return viite i:teen jäseneen
152 * @throws IndexOutOfBoundsException jos i väärin
153 * @deprecated ei ole hyvä käyttää, käytä iteraattoria mieluummin
154 */
155 @Deprecated
156 public Jasen annaJasen(int i) throws IndexOutOfBoundsException {
157 return jasenet.anna(i);
158 }
159
160 /**
161 * Lukee kerhon tiedot tiedostosta
162 * @param nimi jota käyteään lukemisessa
163 * @throws SailoException jos lukeminen epäonnistuu
164 *
165 * @example
166 * <pre name="test">
167 * #THROWS SailoException
168 * #import java.io.File;
169 *
170 * Kerho kerho = new Kerho();
171 *
172 * Jasen aku1 = new Jasen(); aku1.vastaaAkuAnkka(); aku1.rekisteroi();
173 * Jasen aku2 = new Jasen(); aku2.vastaaAkuAnkka(); aku2.rekisteroi();
174 * Harrastus pitsi21 = new Harrastus(); pitsi21.vastaaPitsinNyplays(aku2.getTunnusnro());
175 * Harrastus pitsi11 = new Harrastus(); pitsi11.vastaaPitsinNyplays(aku1.getTunnusnro());
176 * Harrastus pitsi22 = new Harrastus(); pitsi22.vastaaPitsinNyplays(aku2.getTunnusnro());
177 * Harrastus pitsi12 = new Harrastus(); pitsi12.vastaaPitsinNyplays(aku1.getTunnusnro());
178 * Harrastus pitsi23 = new Harrastus(); pitsi23.vastaaPitsinNyplays(aku2.getTunnusnro());
179 *
180 * String tiedNimi = "testikelmit";
181 * File ftied = new File(tiedNimi+".dat");
182 * File fhtied = new File(tiedNimi+".har");
183 * ftied.delete();
184 * fhtied.delete();
185 * kerho.lueTiedostosta(tiedNimi); #THROWS SailoException
186 * kerho.lisaa(aku1);
187 * kerho.lisaa(aku2);
188 * kerho.lisaa(pitsi21);
189 * kerho.lisaa(pitsi11);
190 * kerho.lisaa(pitsi22);
191 * kerho.lisaa(pitsi12);
192 * kerho.lisaa(pitsi23);
193 * kerho.talleta();
194 * kerho = new Kerho();
195 * kerho.lueTiedostosta(tiedNimi);
196 * Iterator<Jasen> i = kerho.iterator();
197 * i.next().toString() === aku1.toString();
198 * i.next().toString() === aku2.toString();
199 * i.hasNext() === false;
200 * Iterator<Harrastus> ih = kerho.harrastusIterator();
201 * ih.next().toString() === pitsi21.toString();
202 * ih.next().toString() === pitsi11.toString();
203 * ih.next().toString() === pitsi22.toString();
204 * ih.next().toString() === pitsi12.toString();
205 * ih.next().toString() === pitsi23.toString();
206 * ih.hasNext() === false;
207 * kerho.lisaa(aku2);
208 * kerho.lisaa(pitsi23);
209 * kerho.talleta();
210 * ftied.delete() === true;
211 * fhtied.delete() === true;
212 * File fbak = new File(tiedNimi+".bak");
213 * File fhbak = new File(tiedNimi+".hbak");
214 * fbak.delete() === true;
215 * fhbak.delete() === true;
216 * </pre>
217 */
218 public void lueTiedostosta(String nimi) throws SailoException {
219 jasenet.setTiedostonPerusNimi(nimi);
220 harrastukset.setTiedostonPerusNimi(nimi);
221 jasenet.lueTiedostosta(nimi);
222 harrastukset.lueTiedostosta(nimi);
223 }
224
225
226 /**
227 * Tallettaa kerhon tiedot tiedostoon.
228 * Vaikka jäsenten tallettamien epäonistuisi, niin yritetään silti tallettaa
229 * harrastuksia ennen poikkeuksen heittämistä.
230 * @throws SailoException jos tallettamisessa ongelmia
231 */
232 public void talleta() throws SailoException {
233 String virhe = "";
234 try {
235 jasenet.talleta();
236 } catch ( SailoException ex ) {
237 virhe = ex.getMessage();
238 }
239
240 try {
241 harrastukset.talleta();
242 } catch ( SailoException ex ) {
243 virhe += ex.getMessage();
244 }
245 if ( !"".equals(virhe) ) throw new SailoException(virhe);
246 }
247
248
249 /**
250 * Palauttaa "taulukossa" hakuehtoon vastaavien jäsenten viitteet
251 * @param hakuehto hakuehto
252 * @param k etsittävän kentän indeksi
253 * @return tietorakenteen löytyneistä jäsenistä
254 */
255 public Collection<Jasen> etsi(String hakuehto,int k) {
256 return jasenet.etsi(hakuehto,k);
257 }
258
259
260 /**
261 * Etsii jäsenen id:n perusteella
262 * @param id tunnusnumero, jonka mukaan etsitään
263 * @return jäsen jolla etsittävä id tai null
264 */
265 public Jasen annaJasenId(int id) {
266 return jasenet.annaId(id);
267 }
268
269
270
271 /**
272 * Testiohjelma kerhosta
273 * @param args ei käytössä
274 */
275 public static void main(String args[]) {
276 Kerho kerho = new Kerho();
277
278 try {
279 kerho.lueTiedostosta("kelmit");
280
281 Jasen aku = new Jasen(), aku2 = new Jasen();
282 aku.rekisteroi(); aku.vastaaAkuAnkka();
283 aku2.rekisteroi(); aku2.vastaaAkuAnkka();
284
285 kerho.lisaa(aku);
286 kerho.lisaa(aku2);
287
288 System.out.println("============= Kerhon testi =================");
289
290 for (int i=0; i<kerho.getJasenia(); i++) {
291 Jasen jasen = kerho.annaJasen(i);
292 System.out.println("Jäsen nro: " + i);
293 jasen.tulosta(System.out);
294 }
295
296 } catch ( SailoException ex ) {
297 System.out.println(ex.getMessage());
298 }
299 }
300
301
302 /**
303 * Haetaan kaikki jäsen harrastukset
304 * @param jasen jäsen jolle harrastuksia haetaan
305 * @return tietorakenne jossa viiteet löydetteyihin harrastuksiin
306 */
307 public Collection<Harrastus> annaHarrastukset(Jasen jasen) {
308 return harrastukset.annaHarrastukset(jasen.getTunnusnro());
309 }
310
311
312 }
313
314
315