1   package kanta;
2   
3   
4   import kanta.Kentta;
5   import kanta.PerusTietue;
6   
7   /**
8    * PohjaTietue joka osaa mm. itse huolehtia tunnus_nro:staan.
9    * Jos tätä peritään, niin kaikilla perityillä on juokseva
10   * id-numero keskenään.  
11   * 
12   * Voidaan käyttää myös suoraan luomalla
13   * kenttätaulukko ennen olion luomista, ks, muodostajan esimerkki.
14   * Tällöin taulukko pitää muistaa luoda jokaista luotavaa tietuetta kohti
15   * erikseen.
16   *
17   * @author Vesa Lappalainen
18   * @version 1.0, 22.02.2003
19   * @version 1.1, 23.02.2012 - tietueena
20   * @example
21   * <pre name="testJAVA">
22   * public static class Harrastus extends PohjaTietue {
23   *     public Harrastus() { 
24   *       super(new Kentta[]{
25   *                  new IntKentta("id"),
26   *                  new IntKentta("jäsenId"),
27   *                  new JonoKentta("ala"),
28   *                  new IntKentta("aloitusvuosi"),
29   *                  new IntKentta("h/vko")
30   *            },2); 
31   *     }
32   *     public int getJasenNro() { return ((IntKentta)getKentta(1)).getValue(); }
33   * }    
34   * </pre>
35   * 
36   * @example
37   * <pre name="test_getOtsikot">
38   * #import java.util.Arrays;
39   * // getOtsikot()
40   *   Harrastus har = new Harrastus();
41   *   Arrays.toString(har.getOtsikot()) =R= "\\[ala, aloitusvuosi, h/vko.*";
42   * </pre>
43   * 
44   * @example
45   * <pre name="test_anna">
46   * // anna(int)
47   *   Harrastus har = new Harrastus();
48   *   har.parse("   2   |  10  |   Kalastus  | 1949 | 22 t ");
49   *   har.anna(0) === "2";   
50   *   har.anna(1) === "10";   
51   *   har.anna(2) === "Kalastus";   
52   *   har.anna(3) === "1949";   
53   *   har.anna(4) === "22";   
54   * </pre>
55   * 
56   * @example
57   * <pre name="test_aseta">
58   * // aseta(int,String)
59   *   Harrastus har = new Harrastus();
60   *   har.aseta(3,"kissa") === "aloitusvuosi: Ei kokonaisluku (kissa)";
61   *   har.aseta(3,"1940")  === null;
62   *   har.aseta(4,"kissa") === "h/vko: Ei kokonaisluku (kissa)";
63   *   har.aseta(4,"20")    === null;
64   * </pre>
65   * 
66   * @example
67   * <pre name="test_rekisteroi">
68   * // rekisteroi() 
69   *   Harrastus pitsi1 = new Harrastus();
70   *   pitsi1.getTunnusNro() === 0;
71   *   pitsi1.rekisteroi();
72   *   Harrastus pitsi2 = new Harrastus();
73   *   pitsi2.rekisteroi();
74   *   int n1 = pitsi1.getTunnusNro();
75   *   int n2 = pitsi2.getTunnusNro();
76   *   n1 === n2-1;
77   * </pre>
78   * 
79   * @example
80   * <pre name="test_parse">
81   * // parse()
82   *   Harrastus harrastus = new Harrastus();
83   *   harrastus.parse("   2   |  10  |   Kalastus  | 1949 | 22 t ");
84   *   harrastus.getJasenNro() === 10;
85   *   harrastus.toString()     =R= "2\\|10\\|Kalastus\\|1949\\|22.*";
86   *   
87   *   harrastus.rekisteroi();
88   *   int n = harrastus.getTunnusNro();
89   *   harrastus.parse(""+(n+20));
90   *   harrastus.rekisteroi();
91   *   harrastus.getTunnusNro() === n+20+1;
92   *   harrastus.toString()     =R= "" + (n+20+1) + "\\|10\\|\\|1949\\|22.*";
93   * </pre>
94   */
95  public class PohjaTietue extends PerusTietue {
96      /**
97       */
98      private Kentta     kentat[]    = null;
99      int eka;
100        
101     private static int seuraavaNro = 1;
102 
103 
104     @Override
105     public Kentta[] getKentat() {
106         return kentat;
107     }
108 
109 
110     @Override
111     protected void setKentat(Kentta[] uudetKentat) {
112         kentat = uudetKentat;
113     }
114 
115 
116     /**
117      * @return seuraava numero joka tullaan antamaan rekisteröinnissä
118      * @example
119      * <pre name="test">
120      *   Harrastus harrastus = new Harrastus();
121      *   harrastus.parse("   2   |  10  |   Kalastus  | 1949 | 22 t ");
122      *   harrastus.rekisteroi();
123      *   harrastus.getSeuraavaNro() === harrastus.getTunnusNro()+1;
124      * </pre>
125      */
126     @Override
127     public int getSeuraavaNro() {
128         return seuraavaNro;
129     }
130 
131 
132     @Override
133     protected void setSeuraavaNro(int i) {
134         seuraavaNro = i;
135     }
136     
137 
138     /**
139      * Alustetaan pohjatietue uusilla kentillä
140      * @param kentat kenttätaulukko, jota jatkossa käytetään
141      * @param eka mikä on ekan kentän indeksi
142      * @example
143      * <pre name="test">
144      * #THROWS CloneNotSupportedException 
145      *   Kentta kentat[] = { 
146      *     new IntKentta("id"),
147      *     new IntKentta("jäsenId"),
148      *     new JonoKentta("ala"),
149      *     new IntKentta("aloitusvuosi"),
150      *     new IntKentta("h/vko")
151      *   };
152      *   PohjaTietue har = new PohjaTietue(kentat,2);
153      *   har.getKysymys(2) === "ala";  
154      *   har.parse("   2   |  10  |   Kalastus  | 1949 | 22 t ");
155      *   Tietue kopio = har.clone();
156      *   kopio.toString() === har.toString();
157      *   har.parse("   1   |  11  |   Uinti  | 1949 | 22 t ");
158      *   kopio.toString().equals(har.toString()) === false;
159      *   kopio instanceof PohjaTietue === true;
160      * </pre>
161      */
162     public PohjaTietue(Kentta[] kentat, int eka) {
163         this.kentat = kentat;
164         this.eka = eka;
165     }
166     
167     
168     /**
169      * @return ensimmäinen käyttäjän syötettävän kentän indeksi
170      * @example
171      * <pre name="test">
172      *   Harrastus har = new Harrastus();
173      *   har.ekaKentta() === 2;
174      * </pre>
175      */
176     @Override
177     public int ekaKentta() {
178         return eka;
179     }
180 
181     
182     /**
183      * Tehdään identtinen klooni tietueesta
184      * @return kloonattu tietue
185      * @example
186      * <pre name="test">
187      * #THROWS CloneNotSupportedException 
188      *   Harrastus har = new Harrastus();
189      *   har.parse("   2   |  10  |   Kalastus  | 1949 | 22 t ");
190      *   Tietue kopio = har.clone();
191      *   kopio.toString() === har.toString();
192      *   har.parse("   1   |  11  |   Uinti  | 1949 | 22 t ");
193      *   kopio.toString().equals(har.toString()) === false;
194      *   kopio instanceof Harrastus === true;
195      * </pre>
196      */
197     @Override
198     public PohjaTietue clone() throws CloneNotSupportedException { 
199         return (PohjaTietue)super.clone();
200     }
201 
202     
203     /**
204      * Testiohjelma pohjatietueelle
205      * @param args ei käytössä
206      */
207     public static void main(String[] args) {
208         //
209     }
210 
211 }
212