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