1 import java.io.*;
2 import fi.jyu.mit.ohj2.*;
3
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
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(); }
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'); }
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
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