|  |  | 
|  |  | 
|  |  | 
|  |  */ | 
|  | /* | 
|  |  * Licensed to the Apache Software Foundation (ASF) under one or more | 
|  |  * contributor license agreements.  See the NOTICE file distributed with | 
|  |  * this work for additional information regarding copyright ownership. | 
|  |  * The ASF licenses this file to You under the Apache License, Version 2.0 | 
|  |  * (the "License"); you may not use this file except in compliance with | 
|  |  * the License.  You may obtain a copy of the License at | 
|  |  * | 
|  |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  |  * | 
|  |  * Unless required by applicable law or agreed to in writing, software | 
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | 
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  |  * See the License for the specific language governing permissions and | 
|  |  * limitations under the License. | 
|  |  */ | 
|  |  | 
|  | package com.sun.org.apache.xerces.internal.impl.dv.xs; | 
|  |  | 
|  | import javax.xml.datatype.DatatypeConstants; | 
|  | import javax.xml.datatype.XMLGregorianCalendar; | 
|  |  | 
|  | import com.sun.org.apache.xerces.internal.impl.dv.InvalidDatatypeValueException; | 
|  | import com.sun.org.apache.xerces.internal.impl.dv.ValidationContext; | 
|  |  | 
|  | /** | 
|  |  * Validator for <gMonthDay> datatype (W3C Schema Datatypes) | 
|  |  * | 
|  |  * @xerces.internal | 
|  |  * | 
|  |  * @author Elena Litani | 
|  |  * @author Gopal Sharma, SUN Microsystem Inc. | 
|  |  * | 
|  |  */ | 
|  |  | 
|  | public class MonthDayDV extends AbstractDateTimeDV { | 
|  |  | 
|  |      | 
|  |     private final static int MONTHDAY_SIZE = 7; | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     public Object getActualValue(String content, ValidationContext context) throws InvalidDatatypeValueException { | 
|  |         try{ | 
|  |             return parse(content); | 
|  |         } catch(Exception ex){ | 
|  |             throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object[]{content, "gMonthDay"}); | 
|  |         } | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     protected DateTimeData parse(String str) throws SchemaDateTimeException{ | 
|  |         DateTimeData date = new DateTimeData(str, this); | 
|  |         int len = str.length(); | 
|  |  | 
|  |          | 
|  |         date.year=YEAR; | 
|  |  | 
|  |         if (str.charAt(0)!='-' || str.charAt(1)!='-') { | 
|  |             throw new SchemaDateTimeException("Invalid format for gMonthDay: "+str); | 
|  |         } | 
|  |         date.month=parseInt(str, 2, 4); | 
|  |         int start=4; | 
|  |  | 
|  |         if (str.charAt(start++)!='-') { | 
|  |             throw new SchemaDateTimeException("Invalid format for gMonthDay: " + str); | 
|  |         } | 
|  |  | 
|  |         date.day=parseInt(str, start, start+2); | 
|  |  | 
|  |         if ( MONTHDAY_SIZE<len ) { | 
|  |             if (!isNextCharUTCSign(str, MONTHDAY_SIZE, len)) { | 
|  |                 throw new SchemaDateTimeException ("Error in month parsing:" +str); | 
|  |             } | 
|  |             else { | 
|  |                 getTimeZone(str, date, MONTHDAY_SIZE, len); | 
|  |             } | 
|  |         } | 
|  |         //validate and normalize | 
|  |  | 
|  |         validateDateTime(date); | 
|  |  | 
|  |          | 
|  |         saveUnnormalized(date); | 
|  |  | 
|  |         if ( date.utc!=0 && date.utc!='Z' ) { | 
|  |             normalize(date); | 
|  |         } | 
|  |         date.position = 1; | 
|  |         return date; | 
|  |     } | 
|  |  | 
|  |      | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |      */ | 
|  |     protected String dateToString(DateTimeData date) { | 
|  |         StringBuffer message = new StringBuffer(8); | 
|  |         message.append('-'); | 
|  |         message.append('-'); | 
|  |         append(message, date.month, 2); | 
|  |         message.append('-'); | 
|  |         append(message, date.day, 2); | 
|  |         append(message, (char)date.utc, 0); | 
|  |         return message.toString(); | 
|  |     } | 
|  |  | 
|  |     protected XMLGregorianCalendar getXMLGregorianCalendar(DateTimeData date) { | 
|  |         return datatypeFactory.newXMLGregorianCalendar(DatatypeConstants.FIELD_UNDEFINED, date.unNormMonth, date.unNormDay, | 
|  |                 DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, | 
|  |                 DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, | 
|  |                 date.hasTimeZone() ? date.timezoneHr * 60 + date.timezoneMin : DatatypeConstants.FIELD_UNDEFINED); | 
|  |     } | 
|  | } |