| 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