Jasen.java |
1 package kerho; 2 3 import java.io.*; 4 5 import kanta.HetuKentta; 6 import kanta.HetuTarkistus; 7 import kanta.IntKentta; 8 import kanta.JonoKentta; 9 import kanta.Kentta; 10 import kanta.PerusTietue; 11 import kanta.PuhelinKentta; 12 import kanta.RahaKentta; 13 import kanta.RegExpTarkistaja; 14 import kanta.SisaltaaTarkistaja; 15 16 import fi.jyu.mit.ohj2.Mjonot; 17 18 import static kanta.HetuTarkistus.*; 19 20 /** 21 * Kerhon jäsen joka osaa mm. itse huolehtia tunnusNro:staan. 22 * 23 * @author Vesa Lappalainen 24 * @version 1.0, 22.02.2003 25 * @version 2.0, 09.01.2011 - kentät indeksoituna 26 * @version 2.1, 23.03.2012 - peritty tietueesta 27 * 28 * @example 29 * <pre name="test_getAvain"> 30 * // getAvain() 31 * Jasen aku = new Jasen(); 32 * aku.parse(" 1 | Ankka Aku | 030201-111C"); 33 * aku.getAvain(0) === " 1"; 34 * aku.getAvain(1) === "ANKKA AKU"; 35 * aku.getAvain(2) === "010203-111C"; 36 * aku.getAvain(20) === ""; 37 * </pre> 38 * 39 * @example 40 * <pre name="test_aseta"> 41 * // aseta(String) 42 * Jasen jasen = new Jasen(); 43 * jasen.aseta(1,"Ankka Aku") === null; 44 * jasen.aseta(2,"kissa") =R= ".*Hetu liian lyhyt" 45 * jasen.aseta(2,"030201-1111") === "hetu: Tarkistusmerkin kuuluisi olla C"; 46 * jasen.aseta(2,"030201-111C") === null; 47 * jasen.aseta(9,"kissa") === "liittymisvuosi: Ei kokonaisluku (kissa)"; 48 * jasen.aseta(9,"1940") === null; 49 * </pre> 50 * 51 * @example 52 * <pre name="test_getOtsikot"> 53 * // getOtsikot() 54 * #import java.util.Arrays; 55 * Jasen jasen = new Jasen(); 56 * Arrays.toString(jasen.getOtsikot()) =R= "\\[nimi, hetu, katuosoite.*"; 57 * </pre> 58 * 59 * @example 60 * <pre name="test_rekisteroi"> 61 * // rekisteroi() 62 * Jasen aku1 = new Jasen(); 63 * aku1.getTunnusNro() === 0; 64 * aku1.rekisteroi(); 65 * Jasen aku2 = new Jasen(); 66 * aku2.rekisteroi(); 67 * int n1 = aku1.getTunnusNro(); 68 * int n2 = aku2.getTunnusNro(); 69 * n1 === n2-1; 70 * </pre> 71 * 72 * @example 73 * <pre name="test_parse"> 74 * // parse(String) 75 * Jasen jasen = new Jasen(); 76 * jasen.parse(" 3 | Ankka Aku | 030201-111C"); 77 * jasen.getTunnusNro() === 3; 78 * jasen.toString().startsWith("3|Ankka Aku|030201-111C|") === true; // on enemmäkin kuin 3 kenttää, siksi loppu | 79 * 80 * jasen.rekisteroi(); 81 * int n = jasen.getTunnusNro(); 82 * jasen.parse(""+(n+20)); // Otetaan merkkijonosta vain tunnusnumero 83 * jasen.rekisteroi(); // ja tarkistetaan että seuraavalla kertaa tulee yhtä isompi 84 * jasen.getTunnusNro() === n+20+1; 85 * </pre> 86 * 87 * @example 88 * <pre name="test_equals"> 89 * // equals(Jasen) 90 * Jasen jasen1 = new Jasen(); 91 * jasen1.parse(" 3 | Ankka Aku | 030201-111C"); 92 * Jasen jasen2 = new Jasen(); 93 * jasen2.parse(" 3 | Ankka Aku | 030201-111C"); 94 * Jasen jasen3 = new Jasen(); 95 * jasen3.parse(" 3 | Ankka Aku | 030201-115H"); 96 * 97 * jasen1.equals(jasen2) === true; 98 * jasen2.equals(jasen1) === true; 99 * jasen1.equals(jasen3) === false; 100 * jasen3.equals(jasen2) === false; 101 * </pre> 102 */ 103 public class Jasen extends PerusTietue { 104 private Kentta kentat[] = { // valitettavasti ei voi olla final 105 // vaikka pitäisi, clone estää tämän :-( 106 new IntKentta("id"), 107 new JonoKentta("nimi"), 108 new HetuKentta("hetu", new HetuTarkistus()), 109 new JonoKentta("katuosoite"), 110 new JonoKentta("postinumero", new SisaltaaTarkistaja(SisaltaaTarkistaja.NUMEROT)), 111 new JonoKentta("postiosoite"), 112 new PuhelinKentta("kotipuhelin"), 113 new PuhelinKentta("työpuhelin"), 114 new JonoKentta("autopuhelin", new RegExpTarkistaja("[- 0-9]*")), 115 new IntKentta("liittymisvuosi"), 116 new RahaKentta("jäsenmaksu"), 117 new RahaKentta("maksettumaksu"), 118 new JonoKentta("lisätietoja") 119 }; 120 121 private static int seuraavaNro = 1; 122 123 124 @Override 125 public Kentta[] getKentat() { 126 return kentat; 127 } 128 129 130 @Override 131 protected void setKentat(Kentta[] uudetKentat) { 132 kentat = uudetKentat; 133 } 134 135 136 @Override 137 public int getSeuraavaNro() { 138 return seuraavaNro; 139 } 140 141 142 @Override 143 protected void setSeuraavaNro(int i) { 144 seuraavaNro = i; 145 } 146 147 148 149 /** 150 * Eka kenttä joka on mielekäs kysyttäväksi 151 * @return eknn kentän indeksi 152 */ 153 @Override 154 public int ekaKentta() { 155 return 1; 156 } 157 158 159 /** 160 * Alustetaan jäsenen merkkijono-attribuuti tyhjiksi jonoiksi 161 * ja tunnusnro = 0. 162 */ 163 public Jasen() { 164 // Toistaiseksi ei tarvita mitään 165 } 166 167 168 /** 169 * @return jäsenen nimi 170 * @example 171 * <pre name="test"> 172 * Jasen aku = new Jasen(); 173 * aku.vastaaAkuAnkka(); 174 * aku.getNimi() =R= "Ankka Aku .*"; 175 * </pre> 176 */ 177 public String getNimi() { 178 return anna(1); 179 } 180 181 182 /** 183 * Apumetodi, jolla saadaan täytettyä testiarvot jäsenelle. 184 * @param apuhetu hetu joka annetaan henkilölle 185 */ 186 public void vastaaAkuAnkka(String apuhetu) { 187 aseta(1,"Ankka Aku " + kanta.HetuTarkistus.rand(1000, 9999)); 188 aseta(2,apuhetu); 189 aseta(3,"Ankkakuja 6"); 190 aseta(4,"12345"); 191 aseta(5,"ANKKALINNA"); 192 aseta(6,"12-1234"); 193 aseta(7,""); 194 aseta(8,""); 195 aseta(9,"1996"); 196 aseta(10,"50"); 197 aseta(11,"30"); 198 aseta(12,"Velkaa Roopelle"); 199 } 200 201 202 203 /** 204 * Apumetodi, jolla saadaan täytettyä testiarvot jäsenelle. 205 * Henkilötunnus arvotaan, jotta kahdella jäsenellä ei olisi 206 * samoja tietoja. 207 */ 208 public void vastaaAkuAnkka() { 209 String apuhetu = arvoHetu(); 210 vastaaAkuAnkka(apuhetu); 211 } 212 213 214 /** 215 * Tulostetaan henkilön tiedot 216 * @param out tietovirta johon tulostetaan 217 */ 218 @Override 219 public void tulosta(PrintWriter out) { 220 int pisin = 0; 221 for (Kentta kentta : kentat) 222 if (kentta.getKysymys().length() > pisin) 223 pisin = kentta.getKysymys().length(); 224 225 for (Kentta kentta : kentat) 226 out.println(Mjonot.fmt(kentta.getKysymys(), -pisin - 1) + 227 ": " + kentta.toString()); 228 } 229 230 231 /** 232 * Tehdään identtinen klooni jäsenestä 233 * @return Object kloonattu jäsen 234 * @example 235 * <pre name="test"> 236 * #THROWS CloneNotSupportedException 237 * Jasen jasen = new Jasen(); 238 * jasen.parse(" 3 | Ankka Aku | 123"); 239 * Jasen kopio = jasen.clone(); 240 * kopio.toString() === jasen.toString(); 241 * jasen.parse(" 4 | Ankka Tupu | 123"); 242 * kopio.toString().equals(jasen.toString()) === false; 243 * kopio instanceof Jasen === true; 244 * </pre> 245 */ 246 @Override 247 public Jasen clone() throws CloneNotSupportedException { 248 return (Jasen)super.clone(); 249 } 250 251 252 /** 253 * Testiohjelma jäsenelle. 254 * @param args ei käytössä 255 */ 256 public static void main(String args[]) { 257 Jasen aku = new Jasen(), aku2 = new Jasen(); 258 aku.rekisteroi(); 259 aku2.rekisteroi(); 260 aku.tulosta(System.out); 261 aku.vastaaAkuAnkka(); 262 aku.tulosta(System.out); 263 264 aku2.vastaaAkuAnkka(); 265 aku2.tulosta(System.out); 266 267 aku2.vastaaAkuAnkka(); 268 aku2.tulosta(System.out); 269 } 270 271 } 272