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 }