1 57 58 package org.enhydra.apache.xerces.validators.datatype; 59 60 import java.util.Hashtable ; 61 62 68 69 public class MonthDatatypeValidator extends DateTimeValidator { 70 71 public MonthDatatypeValidator() throws InvalidDatatypeFacetException{ 72 super(); 73 } 74 75 public MonthDatatypeValidator ( DatatypeValidator base, Hashtable facets, 76 boolean derivedByList ) throws InvalidDatatypeFacetException { 77 super(base, facets, derivedByList); 78 } 79 80 89 protected int[] parse(String str, int[] date) throws SchemaDateTimeException{ 90 91 resetBuffer(str); 92 93 if ( date== null ) { 95 date=new int[TOTAL_SIZE]; 96 } 97 resetDateObj(date); 98 99 date[CY]=YEAR; 101 date[D]=DAY; 102 if (fBuffer.charAt(0)!='-' || fBuffer.charAt(1)!='-') { 103 throw new SchemaDateTimeException("Invalid format for gMonth: "+str); 104 } 105 int stop = fStart +4; 106 date[M]=parseInt(fStart+2,stop); 107 108 if (fBuffer.charAt(stop++)!='-' || fBuffer.charAt(stop)!='-') { 109 throw new SchemaDateTimeException("Invalid format for gMonth: "+str); 110 } 111 if ( MONTH_SIZE<fEnd ) { 112 int sign = findUTCSign(MONTH_SIZE, fEnd); 113 if ( sign<0 ) { 114 throw new SchemaDateTimeException ("Error in month parsing: "+str); 115 } 116 else { 117 getTimeZone(date, sign); 118 } 119 } 120 122 validateDateTime(date); 124 125 if ( date[utc]!=0 && date[utc]!='Z' ) { 126 normalize(date); 127 } 128 return date; 129 } 130 131 138 protected short compareDates(int[] date1, int[] date2) { 139 140 if ( date1[utc]==date2[utc] ) { 141 return (date1[M]>=date2[M])?(date1[M]>date2[M])?LESS_THAN:EQUAL:GREATER_THAN; 142 } 143 144 if ( date1[utc]=='Z' || date2[utc]=='Z' ) { 145 146 if ( date1[M]==date2[M] ) { 147 return INDETERMINATE; 149 } 150 if ( (date1[M]+1 == date2[M] || date1[M]-1 == date2[M]) ) { 151 return INDETERMINATE; 156 } 157 } 158 159 if ( date1[M]<date2[M] ) { 160 return LESS_THAN; 161 } 162 else { 163 return GREATER_THAN; 164 } 165 166 } 167 168 174 protected String dateToString(int[] date) { 175 176 message.setLength(0); 177 message.append('-'); 178 message.append('-'); 179 message.append(date[M]); 180 message.append('-'); 181 message.append('-'); 182 message.append((char)date[utc]); 183 return message.toString(); 184 } 185 186 } 187 | Popular Tags |