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