Jasenet.java |
1 package kerho; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.PrintWriter; 6 7 import kanta.PerusTietueet; 8 import kanta.SailoException; 9 10 /** 11 * Kerhon jäsenistö, joka osaa mm. lisätä uuden jäsenen 12 * 13 * @author Vesa Lappalainen 14 * @version 1.0, 22.02.2003 15 * @version 1.1, 19.02.2012 16 * @version 1.2, 15.03.2012 17 * @version 1.3, 24.03.2012 - Tietueet 18 * 19 * @example 20 * <pre name="test_lisaa"> 21 * // lisaa(Jasen) 22 * #PACKAGEIMPORT 23 * #import kanta.SailoException; 24 * #import java.util.*; 25 * Jasenet jasenet = new Jasenet(); 26 * Jasen aku1 = new Jasen(), aku2 = new Jasen(); 27 * jasenet.getLkm() === 0; 28 * jasenet.lisaa(aku1); jasenet.getLkm() === 1; 29 * jasenet.lisaa(aku2); jasenet.getLkm() === 2; 30 * jasenet.lisaa(aku1); jasenet.getLkm() === 3; 31 * Iterator<Jasen> iter = jasenet.iterator(); 32 * Jasen jasen0 = iter.next(); 33 * Jasen jasen1 = iter.next(); 34 * jasen0 === aku1; 35 * jasen1 === aku2; 36 * iter.next() === aku1; 37 * jasen1 == aku1 === false; 38 * jasen1 == aku2 === true; 39 * jasenet.lisaa(aku1); jasenet.getLkm() === 4; 40 * jasenet.lisaa(aku1); jasenet.getLkm() === 5; 41 * 42 * jasenet = new Jasenet(); 43 * for (int i=0; i<200; i++) { 44 * jasenet.lisaa(aku1); jasenet.getLkm() === 2*i+1; 45 * jasenet.lisaa(aku2); jasenet.getLkm() === 2*i+2; 46 * } 47 * </pre> 48 * 49 * @example 50 * <pre name="test_poista"> 51 * // poista(int) 52 * Jasenet jasenet = new Jasenet(); 53 * Jasen aku1 = new Jasen(), aku2 = new Jasen(), aku3 = new Jasen(); 54 * aku1.rekisteroi(); aku2.rekisteroi(); aku3.rekisteroi(); 55 * int id1 = aku1.getTunnusNro(); 56 * jasenet.lisaa(aku1); jasenet.lisaa(aku2); jasenet.lisaa(aku3); 57 * jasenet.poista(id1+1) === 1; 58 * jasenet.annaId(id1+1) === null; jasenet.getLkm() === 2; 59 * jasenet.poista(id1) === 1; jasenet.getLkm() === 1; 60 * jasenet.poista(id1+3) === 0; jasenet.getLkm() === 1; 61 * </pre> 62 * 63 * @exmpale 64 * <pre name="test_iterator"> 65 * #THROWS CloneNotSupportedException 66 * // iterator() 67 * #PACKAGEIMPORT 68 * Jasenet jasenet = new Jasenet(); 69 * Jasen aku1 = new Jasen(), aku2 = new Jasen(); 70 * aku1.rekisteroi(); aku2.rekisteroi(); 71 * jasenet.getLkm() === 0; 72 * jasenet.korvaaTaiLisaa(aku1); jasenet.getLkm() === 1; 73 * jasenet.korvaaTaiLisaa(aku2); jasenet.getLkm() === 2; 74 * Jasen aku3 = aku1.clone(); 75 * aku3.aseta(3,"kkk"); 76 * Iterator<Jasen> iter = jasenet.iterator(); 77 * Jasen jasen0 = iter.next(); 78 * jasenet.korvaaTaiLisaa(aku3); jasenet.getLkm() === 2; 79 * iter = jasenet.iterator(); 80 * jasen0 = iter.next(); 81 * jasen0 === aku3; 82 * jasen0 == aku3 === true; 83 * jasen0 == aku1 === false; 84 * </pre> 85 * 86 * @example 87 * <pre name="test_tiedosto"> 88 * #THROWS SailoException 89 * // lueTiedosto(String), talleta() 90 * #import java.io.File; 91 * 92 * Jasenet jasenet = new Jasenet(); 93 * Jasen aku1 = new Jasen(), aku2 = new Jasen(); 94 * aku1.vastaaAkuAnkka(); 95 * aku2.vastaaAkuAnkka(); 96 * String tiedNimi = "testikelmit"; 97 * File ftied = new File(tiedNimi+".dat"); 98 * ftied.delete(); 99 * jasenet.lueTiedostosta(tiedNimi); #THROWS SailoException 100 * jasenet.lisaa(aku1); 101 * jasenet.lisaa(aku2); 102 * jasenet.talleta(); 103 * jasenet = new Jasenet(); // Poistetaan vanhat luomalla uusi 104 * jasenet.lueTiedostosta(tiedNimi); // johon ladataan tiedot tiedostosta. 105 * Iterator<Jasen> i = jasenet.iterator(); 106 * i.next().toString() === aku1.toString(); 107 * i.next().toString() === aku2.toString(); 108 * i.hasNext() === false; 109 * jasenet.lisaa(aku2); 110 * jasenet.talleta(); 111 * ftied.delete() === true; 112 * File fbak = new File(tiedNimi+".bak"); 113 * fbak.delete() === true; 114 * </pre> 115 * 116 * @example 117 * <pre name="test_etsi"> 118 * // etsi(String,int) 119 * Jasenet jasenet = new Jasenet(); 120 * Jasen jasen1 = new Jasen(); jasen1.parse("1|Ankka Aku|030201-115H|Ankkakuja 6|"); 121 * Jasen jasen2 = new Jasen(); jasen2.parse("2|Ankka Tupu||030552-123B|"); 122 * Jasen jasen3 = new Jasen(); jasen3.parse("3|Susi Sepe|121237-121V||131313|Perämetsä"); 123 * Jasen jasen4 = new Jasen(); jasen4.parse("4|Ankka Iines|030245-115V|Ankkakuja 9"); 124 * Jasen jasen5 = new Jasen(); jasen5.parse("5|Ankka Roope|091007-408U|Ankkakuja 12"); 125 * jasenet.lisaa(jasen1); jasenet.lisaa(jasen2); jasenet.lisaa(jasen3); jasenet.lisaa(jasen4); jasenet.lisaa(jasen5); 126 * List<Jasen> loytyneet; 127 * loytyneet = (List<Jasen>)jasenet.etsi("*s*",1); 128 * loytyneet.size() === 2; 129 * loytyneet.get(0) == jasen4 === true; 130 * loytyneet.get(1) == jasen3 === true; 131 * 132 * loytyneet = (List<Jasen>)jasenet.etsi("*7-*",2); 133 * loytyneet.size() === 2; 134 * loytyneet.get(0) == jasen5 === true; 135 * loytyneet.get(1) == jasen3 === true; 136 * </pre> 137 * @exmpale 138 * 139 * <pre name="test_annaId"> 140 * // annaId(int) 141 * Jasenet jasenet = new Jasenet(); 142 * Jasen aku1 = new Jasen(), aku2 = new Jasen(), aku3 = new Jasen(); 143 * aku1.rekisteroi(); aku2.rekisteroi(); aku3.rekisteroi(); 144 * int id1 = aku1.getTunnusNro(); 145 * jasenet.lisaa(aku1); jasenet.lisaa(aku2); jasenet.lisaa(aku3); 146 * jasenet.annaId(id1 ) == aku1 === true; 147 * jasenet.annaId(id1+1) == aku2 === true; 148 * jasenet.annaId(id1+2) == aku3 === true; 149 * </pre> 150 */ 151 public class Jasenet extends PerusTietueet<Jasen> { 152 private String kokoNimi = ""; 153 154 155 /** 156 * Oletusmuodostaja jolla tulee täysin dynaaminen koko. 157 */ 158 public Jasenet() { 159 super(new Jasen()); 160 } 161 162 163 164 165 166 /** 167 * Palauttaa viitteen i:teen jäseneen. 168 * @param i monennenko jäsenen viite halutaan 169 * @return viite jäseneen, jonka indeksi on i 170 * @throws IndexOutOfBoundsException jos i ei ole sallitulla alueella 171 public Jasen anna(int i) throws IndexOutOfBoundsException { 172 if (i < 0 || lkm <= i) throw new IndexOutOfBoundsException("Laiton indeksi: " + i); 173 return alkiot[i]; 174 } 175 */ 176 177 /** 178 * Lukee rivit tiedoston alusta 179 * @param fi virta josta luetaan 180 * @throws IOException jos jokin menee vikaan 181 * @throws SailoException jos tieto virheellistä 182 */ 183 @Override 184 protected void lueAlkurivit(BufferedReader fi) throws IOException, SailoException { 185 kokoNimi = fi.readLine(); 186 if (kokoNimi == null) throw new SailoException("Kerhon nimi puuttuu"); 187 String rivi = fi.readLine(); 188 if (rivi == null) throw new SailoException("Maksimikoko puuttuu"); 189 } 190 191 192 /** 193 * Tiedoston alkuun tulevat rivit 194 * @param fo virta johon talletetaan 195 */ 196 @Override 197 protected void teeAlkutalletus(PrintWriter fo) { 198 fo.println(getKokoNimi()); 199 fo.println(getLkm()); 200 } 201 202 203 /** 204 * Palauttaa Kerhon koko nimen 205 * @return Kerhon koko nimi merkkijononna 206 */ 207 public String getKokoNimi() { 208 return kokoNimi; 209 } 210 211 212 /** 213 * Testiohjelma jäsenistölle 214 * @param args ei käytössä 215 */ 216 public static void main(String args[]) { 217 Jasenet jasenet = new Jasenet(); 218 219 Jasen aku = new Jasen(), aku2 = new Jasen(); 220 aku.rekisteroi(); 221 aku.vastaaAkuAnkka(); 222 aku2.rekisteroi(); 223 aku2.vastaaAkuAnkka(); 224 225 jasenet.lisaa(aku); 226 jasenet.lisaa(aku2); 227 228 System.out.println("============= Jäsenet testi ================="); 229 230 int i = 0; 231 for (Jasen jasen:jasenet) { 232 System.out.println("Jäsen paikassa: " + i++); 233 jasen.tulosta(System.out); 234 } 235 236 } 237 238 } 239