| Harrastus.java |
1 package kerho;
2
3
4 import kanta.IntKentta;
5 import kanta.JonoKentta;
6 import kanta.Kentta;
7 import kanta.PerusTietue;
8 import kanta.RegExpTarkistaja;
9
10 import static kanta.HetuTarkistus.rand;
11
12 /**
13 * Harrastus joka osaa mm. itse huolehtia tunnus_nro:staan.
14 *
15 * @author Vesa Lappalainen
16 * @version 1.0, 22.02.2003
17 * @version 1.1, 23.02.2012 - tietueena
18 *
19 * @example
20 * <pre name="test_getOtsikot">
21 * // getOtsikot()
22 * #import java.util.Arrays;
23 * Harrastus har = new Harrastus();
24 * Arrays.toString(har.getOtsikot()) =R= "\\[ala, aloitusvuosi, h/vko.*";
25 * </pre>
26 *
27 * @example
28 * <pre name="test_anna">
29 * // anna(int)
30 * Harrastus har = new Harrastus();
31 * har.parse(" 2 | 10 | Kalastus | 1949 | 22 t ");
32 * har.anna(0) === "2";
33 * har.anna(1) === "10";
34 * har.anna(2) === "Kalastus";
35 * har.anna(3) === "1949";
36 * har.anna(4) === "22";
37 * </pre>
38 *
39 * @example
40 * <pre name="test_aseta">
41 * // aseta(int)
42 * Harrastus har = new Harrastus();
43 * har.aseta(3,"kissa") === "aloitusvuosi: Ei kokonaisluku (kissa)";
44 * har.aseta(3,"1940") === null;
45 * har.aseta(4,"kissa") === "h/vko: Ei kokonaisluku (kissa)";
46 * har.aseta(4,"20") === null;
47 * </pre>
48 *
49 * @example
50 * <pre name="test_rekisteroi">
51 * // rekisteroi()
52 * Harrastus pitsi1 = new Harrastus();
53 * pitsi1.getTunnusNro() === 0;
54 * pitsi1.rekisteroi();
55 * Harrastus pitsi2 = new Harrastus();
56 * pitsi2.rekisteroi();
57 * int n1 = pitsi1.getTunnusNro();
58 * int n2 = pitsi2.getTunnusNro();
59 * n1 === n2-1;
60 * </pre>
61 *
62 *
63 * @example
64 * <pre name="test_parse">
65 * // parse(String)
66 * Harrastus harrastus = new Harrastus();
67 * harrastus.parse(" 2 | 10 | Kalastus | 1949 | 22 t ");
68 * harrastus.getJasenNro() === 10;
69 * harrastus.toString() =R= "2\\|10\\|Kalastus\\|1949\\|22.*";
70 *
71 * harrastus.rekisteroi();
72 * int n = harrastus.getTunnusNro();
73 * harrastus.parse(""+(n+20));
74 * harrastus.rekisteroi();
75 * harrastus.getTunnusNro() === n+20+1;
76 * harrastus.toString() =R= "" + (n+20+1) + "\\|10\\|\\|1949\\|22.*";
77 * </pre>
78 */
79 public class Harrastus extends PerusTietue {
80 private Kentta kentat[] = {
81 new IntKentta("id"),
82 new IntKentta("jäsenId"),
83 new JonoKentta("ala", new RegExpTarkistaja(".+","Ala annettava")),
84 new IntKentta("aloitusvuosi"),
85 new IntKentta("h/vko")
86 // new RahaKentta("kulut")
87 };
88
89 private static int seuraavaNro = 1;
90
91
92 @Override
93 public Kentta[] getKentat() {
94 return kentat;
95 }
96
97
98 @Override
99 protected void setKentat(Kentta[] uudetKentat) {
100 kentat = uudetKentat;
101 }
102
103
104 @Override
105 public int getSeuraavaNro() {
106 return seuraavaNro;
107 }
108
109
110 @Override
111 protected void setSeuraavaNro(int i) {
112 seuraavaNro = i;
113 }
114
115
116 /**
117 * Alustetaan harrastus. Toistaiseksi ei tarvitse tehdä mitään
118 */
119 public Harrastus() {
120 // Vielä ei tarvita mitään
121 }
122
123
124 private IntKentta getJasenNroKentta() {
125 return (IntKentta)(kentat[1]);
126 }
127
128
129 /**
130 * Palautetaan mille jäsenelle harrastus kuuluu
131 * @return jäsenen id
132 * @example
133 * <pre name="test">
134 * Harrastus har = new Harrastus(5);
135 * har.getJasenNro() === 5;
136 * </pre>
137 */
138 public int getJasenNro() {
139 return getJasenNroKentta().getValue();
140 }
141
142
143 /**
144 * Alustetaan tietyn jäsenen harrastus.
145 * @param jasenNro jäsenen viitenumero
146 * @example
147 * <pre name="test">
148 * Harrastus har = new Harrastus(5);
149 * har.getJasenNro() === 5;
150 * </pre>
151 */
152 public Harrastus(int jasenNro) {
153 getJasenNroKentta().setValue(jasenNro);
154 }
155
156
157 /**
158 * @return ensimmäinen käyttäjän syötettävän kentän indeksi
159 * @example
160 * <pre name="test">
161 * Harrastus har = new Harrastus(5);
162 * har.ekaKentta() === 2;
163 * </pre>
164 */
165 @Override
166 public int ekaKentta() {
167 return 2;
168 }
169
170
171
172 /**
173 * Tehdään identtinen klooni harrastuksesta
174 * @return kloonattu harrastus
175 * @example
176 * <pre name="test">
177 * #THROWS CloneNotSupportedException
178 * Harrastus har = new Harrastus();
179 * har.parse(" 2 | 10 | Kalastus | 1949 | 22 t ");
180 * Harrastus kopio = har.clone();
181 * kopio.toString() === har.toString();
182 * har.parse(" 1 | 11 | Uinti | 1949 | 22 t ");
183 * kopio.toString().equals(har.toString()) === false;
184 * kopio instanceof Harrastus === true;
185 * </pre>
186 */
187 @Override
188 public Harrastus clone() throws CloneNotSupportedException {
189 return (Harrastus)super.clone();
190 }
191
192
193 /**
194 * Apumetodi, jolla saadaan täytettyä testiarvot Harrastukselle.
195 * Aloitusvuosi arvotaan, jotta kahdella harrastuksella ei olisi
196 * samoja tietoja.
197 * @param nro viite henkilöön, jonka harrastuksesta on kyse
198 */
199 public void vastaaPitsinNyplays(int nro) {
200 aseta(1,""+nro);
201 aseta(2,"Pitsin nypläys");
202 aseta(3,""+ rand(1900, 2000));
203 aseta(4,""+rand(0, 60));
204 }
205
206
207 /**
208 * Testiohjelma Harrastukselle.
209 * @param args ei käytössä
210 */
211 public static void main(String[] args) {
212 Harrastus har = new Harrastus();
213 har.vastaaPitsinNyplays(2);
214 har.tulosta(System.out);
215 }
216
217 }
218