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