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