001    import java.io.*;
002    import fi.jyu.mit.ohj2.*;
003    /**
004     * Kerhon jäsenen yksi kenttä
005     *
006     * Muutokset:  02.04.2003, kenttien indeksointi<br>
007     *
008     * @author Vesa Lappalainen
009     * @version 1.0, 22.02.2003
010     * @version 1.3, 02.04.2003
011     */
012    public class Kentta {
013      private String kysymys = "???";
014      protected Tarkistaja tarkistaja = null;
015    
016      public Kentta(String kysymys)  { this.kysymys = kysymys; }
017      public Kentta(String kysymys,Tarkistaja tarkistaja) {
018        this.kysymys = kysymys;
019        this.tarkistaja = tarkistaja;
020      }
021    
022      public String toString() { return ""; }
023      public String getAvain() { return toString().toUpperCase(); }
024      public String getKysymys() { return kysymys; }
025      public String aseta(String jono) { return null; }
026    
027      /**
028       * Testiohjelma jäsenelle.
029       * @param args ei käytössä
030       */
031      public static void main(String args[]) {
032      }
033    
034    }
035    
036    class JonoKentta extends Kentta {
037      String jono = "";
038    
039      public JonoKentta(String kysymys) { super(kysymys); }
040    
041      public JonoKentta(String kysymys,Tarkistaja tarkistaja) {
042        super(kysymys,tarkistaja);
043      }
044    
045      public String toString() { return jono; }
046    
047      public String aseta(String jono) {
048        if ( tarkistaja == null ) {
049          this.jono = jono; return null;
050        }
051        String virhe = tarkistaja.tarkista(jono);
052        if ( virhe == null ) {
053          this.jono = jono; return null;
054        }
055        return virhe;
056      }
057    
058    }
059    
060    class HetuKentta extends JonoKentta {
061      public HetuKentta(String kysymys) { super(kysymys); }
062    
063      public HetuKentta(String kysymys,Tarkistaja tarkistaja) {
064        super(kysymys,tarkistaja);
065      }
066      public String getAvain() {
067        StringBuffer sb = new StringBuffer(jono);
068        char c = sb.charAt(4);
069        sb.setCharAt(4,sb.charAt(0));
070        sb.setCharAt(0,c);
071        c = sb.charAt(5);
072        sb.setCharAt(5,sb.charAt(1));
073        sb.setCharAt(1,c);
074        return sb.toString();  // pitäisi siirtää - jonon alkuun
075                               // ja järkätä + < - < A
076      }
077    }
078    
079    class IntKentta extends Kentta {
080      int arvo;
081      public IntKentta(String kysymys) { super(kysymys); }
082    
083      public int getValue() { return arvo; }
084      public void setValue(int value) { arvo = value; }
085    
086      public String toString() { return ""+arvo; }
087      public String aseta(String jono) {
088        StringBuffer sb = new StringBuffer(jono);
089        try {
090          this.arvo = Mjonot.erotaEx(sb,' ',0);
091          return null;
092        }
093        catch (NumberFormatException ex) {
094        return "Virhe: " + ex.getMessage(); }
095      }
096      public String getAvain() {
097        return Mjonot.fmt(arvo,11,'0'); // Etumerkki...
098      }
099    }
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    }