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 }