001 package market; 002 003 /** 004 * A ValueChecker, which checks if a String is in the format of an Integer (e.g. 1500).<br> 005 * The number must not be negative.<br> 006 * <br> 007 * As this ValueChecker is only used by {@link market.swing.JTFCheckable checkable text fields}, 008 * an identifier is passed via the constructor. This descriptive identifier is used in the error string, 009 * to enable the user to associate an error message with the causative text field. 010 */ 011 public class VCPositiveInteger implements ValueChecker { 012 013 /** 014 * ID for serialization. 015 */ 016 private static final long serialVersionUID = -4216805874516986303L; 017 018 /** 019 * The identifier used by {@link #getErrorString()}. 020 */ 021 protected String identifier; 022 023 /** 024 * Defines if an empty String is considered to be an error or not. 025 */ 026 protected boolean mayBeEmpty; 027 028 /** 029 * Internal error code. Set by {@link #isValidValue(String)}, queried by {@link #getErrorString()}. 030 */ 031 private int error; 032 033 /** 034 * @param identifier the identifier. 035 * @param mayBeEmpty <code>true</code> if an empty should be considered valid, otherwise <code>false</code>. 036 */ 037 public VCPositiveInteger(String identifier, boolean mayBeEmpty) { 038 this.identifier = identifier; 039 this.mayBeEmpty = mayBeEmpty; 040 } 041 042 /** 043 * @param identifier the identifier. 044 */ 045 public VCPositiveInteger(String identifier) { 046 this.identifier = identifier; 047 this.mayBeEmpty = false; 048 } 049 050 /** 051 * Checks String for validity and, if necessary, sets an internal error code according to the 052 * detected error. 053 * @param content the String to be checked. 054 * @return <code>true</code> if the String represents an Integer, otherwise <code>false</code>. 055 */ 056 public boolean isValidValue(String content) { 057 error = 0; 058 if (!mayBeEmpty && content.equals("")) { 059 error = 1; 060 } 061 if (!content.equals("") && error == 0) { 062 try { 063 if (!content.equals("")) { 064 Integer.parseInt(content); 065 } 066 } 067 catch (NumberFormatException e) { 068 error = 2; 069 } 070 } 071 if (!content.equals("") && error == 0) { 072 if (Integer.valueOf(content).intValue() < 0) error = 3; 073 } 074 return error == 0; 075 } 076 077 /** 078 * @return an error message depending on the value of {@link #error}. 079 */ 080 public String getErrorString() { 081 String returnValue = ""; 082 switch (error) { 083 case 1: 084 returnValue = "Fehlerhafte Eingabe im Feld " + identifier + ": Das Feld darf nicht leer sein."; 085 break; 086 case 2: 087 returnValue = "Fehlerhafte Eingabe im Feld " + identifier + ": Es sind nur ganzzahlige Werte erlaubt."; 088 break; 089 case 3: 090 returnValue = "Fehlerhafte Eingabe im Feld " + identifier + ": Es werden positive Zahlen erwartet."; 091 break; 092 } 093 error = 0; 094 return returnValue; 095 } 096 }