KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > org > apache > xerces > internal > impl > dv > xs > MonthDayDV


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
6  * reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Apache Software Foundation (http://www.apache.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Xerces" and "Apache Software Foundation" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation and was
52  * originally based on software copyright (c) 2001, International
53  * Business Machines, Inc., http://www.apache.org. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  */

57
58 package com.sun.org.apache.xerces.internal.impl.dv.xs;
59
60 import com.sun.org.apache.xerces.internal.impl.dv.InvalidDatatypeValueException;
61 import com.sun.org.apache.xerces.internal.impl.dv.ValidationContext;
62
63 /**
64  * Validator for <gMonthDay> datatype (W3C Schema Datatypes)
65  *
66  * @author Elena Litani
67  * @author Gopal Sharma, SUN Microsystem Inc.
68  *
69  * @version $Id: MonthDayDV.java,v 1.7 2003/01/16 18:34:04 sandygao Exp $
70  */

71
72 public class MonthDayDV extends AbstractDateTimeDV {
73
74     //size without time zone: --MM-DD
75
private final static int MONTHDAY_SIZE = 7;
76
77     /**
78      * Convert a string to a compiled form
79      *
80      * @param content The lexical representation of gMonthDay
81      * @return a valid and normalized gMonthDay object
82      */

83     public Object JavaDoc getActualValue(String JavaDoc content, ValidationContext context) throws InvalidDatatypeValueException {
84         try{
85             return new DateTimeData(parse(content), this);
86         } catch(Exception JavaDoc ex){
87             throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1", new Object JavaDoc[]{content, "gMonthDay"});
88         }
89     }
90
91     /**
92      * Parses, validates and computes normalized version of gMonthDay object
93      *
94      * @param str The lexical representation of gMonthDay object --MM-DD
95      * with possible time zone Z or (-),(+)hh:mm
96      * @param date uninitialized date object
97      * @return normalized date representation
98      * @exception SchemaDateTimeException Invalid lexical representation
99      */

100     protected int[] parse(String JavaDoc str) throws SchemaDateTimeException{
101         int len = str.length();
102         int[] date=new int[TOTAL_SIZE];
103         int[] timeZone = new int[2];
104
105         //initialize
106
date[CY]=YEAR;
107
108         if (str.charAt(0)!='-' || str.charAt(1)!='-') {
109             throw new SchemaDateTimeException("Invalid format for gMonthDay: "+str);
110         }
111         date[M]=parseInt(str, 2, 4);
112         int start=4;
113
114         if (str.charAt(start++)!='-') {
115             throw new SchemaDateTimeException("Invalid format for gMonthDay: " + str);
116         }
117
118         date[D]=parseInt(str, start, start+2);
119
120         if ( MONTHDAY_SIZE<len ) {
121             int sign = findUTCSign(str, MONTHDAY_SIZE, len);
122             if ( sign<0 ) {
123                 throw new SchemaDateTimeException ("Error in month parsing:" +str);
124             }
125             else {
126                 getTimeZone(str, date, sign, len, timeZone);
127             }
128         }
129         //validate and normalize
130

131         validateDateTime(date, timeZone);
132
133         if ( date[utc]!=0 && date[utc]!='Z' ) {
134             normalize(date, timeZone);
135         }
136         return date;
137     }
138
139     /**
140      * Converts gMonthDay object representation to String
141      *
142      * @param date gmonthDay object
143      * @return lexical representation of month: --MM-DD with an optional time zone sign
144      */

145     protected String JavaDoc dateToString(int[] date) {
146         StringBuffer JavaDoc message = new StringBuffer JavaDoc(8);
147         message.append('-');
148         message.append('-');
149         append(message, date[M], 2);
150         message.append('-');
151         append(message, date[D], 2);
152         append(message, (char)date[utc], 0);
153         return message.toString();
154     }
155
156 }
157
158
Popular Tags