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