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