1   package kerho;
2   import java.io.*;
3   import fi.jyu.mit.ohj2.*;
4   /**
5    * Kerhon jäsenen yksi kenttä
6    *
7    * Muutokset:  02.04.2003, kenttien indeksointi<br>
8    *
9    * @author Vesa Lappalainen
10   * @version 1.0, 22.02.2003
11   * @version 1.3, 02.04.2003
12   */
13  public class Kentta {
14    private String kysymys = "???";
15    protected Tarkistaja tarkistaja = null;
16  
17    public Kentta(String kysymys)  { this.kysymys = kysymys; }
18    public Kentta(String kysymys,Tarkistaja tarkistaja) {
19      this.kysymys = kysymys;
20      this.tarkistaja = tarkistaja;
21    }
22  
23    public String toString() { return ""; }
24    public String getAvain() { return toString().toUpperCase(); }
25    public String getKysymys() { return kysymys; }
26    public String aseta(String jono) { return null; }
27  
28    /**
29     * Testiohjelma jäsenelle.
30     * @param args ei käytössä
31     */
32    public static void main(String args[]) {
33    }
34  
35  }
36  
37  class JonoKentta extends Kentta {
38    String jono = "";
39  
40    public JonoKentta(String kysymys) { super(kysymys); }
41  
42    public JonoKentta(String kysymys,Tarkistaja tarkistaja) {
43      super(kysymys,tarkistaja);
44    }
45  
46    public String toString() { return jono; }
47  
48    public String aseta(String jono) {
49      if ( tarkistaja == null ) {
50        this.jono = jono; return null;
51      }
52      String virhe = tarkistaja.tarkista(jono);
53      if ( virhe == null ) {
54        this.jono = jono; return null;
55      }
56      return virhe;
57    }
58  
59  }
60  
61  class HetuKentta extends JonoKentta {
62    public HetuKentta(String kysymys) { super(kysymys); }
63  
64    public HetuKentta(String kysymys,Tarkistaja tarkistaja) {
65      super(kysymys,tarkistaja);
66    }
67    public String getAvain() {
68      StringBuffer sb = new StringBuffer(jono);
69      char c = sb.charAt(4);
70      sb.setCharAt(4,sb.charAt(0));
71      sb.setCharAt(0,c);
72      c = sb.charAt(5);
73      sb.setCharAt(5,sb.charAt(1));
74      sb.setCharAt(1,c);
75      return sb.toString();  // pitäisi siirtää - jonon alkuun
76                             // ja järkätä + < - < A
77    }
78  }
79  
80  class IntKentta extends Kentta {
81    int arvo;
82    public IntKentta(String kysymys) { super(kysymys); }
83  
84    public int getValue() { return arvo; }
85    public void setValue(int value) { arvo = value; }
86  
87    public String toString() { return ""+arvo; }
88    public String aseta(String jono) {
89      StringBuffer sb = new StringBuffer(jono);
90      try {
91        this.arvo = Mjonot.erotaEx(sb,' ',0);
92        return null;
93      }
94      catch (NumberFormatException ex) {
95      return "Virhe: " + ex.getMessage(); }
96    }
97    public String getAvain() {
98      return Mjonot.fmt(arvo,11,'0'); // Etumerkki...
99    }
100 }
101 
102 class DoubleKentta extends Kentta {
103   double arvo;
104 
105   public DoubleKentta(String kysymys) { super(kysymys); }
106 
107   public double getValue() { return arvo; }
108   public void setValue(int value) { arvo = value; }
109 
110   public String toString() { return ""+arvo; }
111   public String aseta(String jono) {
112     this.arvo = Mjonot.erotaDouble(jono,0.0);
113 
114 //    StringBuffer s = new StringBuffer("1 3");
115 //    if ( s.equals("1 3") );
116 
117     return null;
118   }
119   public String getAvain() {
120     return Mjonot.fmt(arvo,11,'0');
121   }
122 
123 }
124 
125 class RahaKentta extends DoubleKentta {
126   public RahaKentta(String kysymys) { super(kysymys); }
127   public String toString() { return Mjonot.fmt(getValue(),4,2); }
128 }
129 
130 
131 interface Tarkistaja {
132   public String tarkista(String jono);
133 }
134 
135 class HetuTarkistus implements Tarkistaja {
136 
137   public String tarkista(String jono) {
138     if ( jono == null || jono.length() < 1 ) return "Hetu liian lyhyt";
139     if ( !Character.isDigit(jono.charAt(0)) ) return "Ei ala numerolla";
140     return null;
141   }
142 
143 }
144