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