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