KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > saxon > value > GYearValue


1 package net.sf.saxon.value;
2
3 import net.sf.saxon.om.FastStringBuffer;
4 import net.sf.saxon.trans.DynamicError;
5 import net.sf.saxon.trans.XPathException;
6 import net.sf.saxon.type.BuiltInAtomicType;
7 import net.sf.saxon.type.ItemType;
8 import net.sf.saxon.type.Type;
9 import net.sf.saxon.type.ValidationException;
10 import net.sf.saxon.ConversionContext;
11
12 import java.util.Calendar JavaDoc;
13 import java.util.GregorianCalendar JavaDoc;
14 import java.util.regex.Matcher JavaDoc;
15 import java.util.regex.Pattern JavaDoc;
16
17 /**
18  * Implementation of the xs:gYear data type
19  */

20
21 public class GYearValue extends DateValue {
22
23     private static Pattern JavaDoc regex =
24             Pattern.compile("(-?[0-9]+)(Z|[+-][0-9][0-9]:[0-9][0-9])?");
25
26     public GYearValue(){};
27
28     public GYearValue(CharSequence JavaDoc value) throws XPathException {
29         Matcher JavaDoc m = regex.matcher(value);
30         if (!m.matches()) {
31             throw new DynamicError("Cannot convert '" + value + "' to a gYear");
32         }
33         String JavaDoc base = m.group(1);
34         String JavaDoc tz = m.group(2);
35         String JavaDoc date = base + "-01-01" + (tz==null ? "" : tz);
36         setLexicalValue(date);
37     }
38
39     public GYearValue(GregorianCalendar JavaDoc calendar, boolean timezoneSpecified, int tzoffset) {
40         super(calendar, timezoneSpecified, tzoffset);
41     }
42
43     /**
44     * Determine the data type of the expression
45     * @return Type.G_YEAR_TYPE,
46     */

47
48     public ItemType getItemType() {
49         return Type.G_YEAR_TYPE;
50     }
51
52
53     /**
54     * Convert to target data type
55     * @param requiredType an integer identifying the required atomic type
56     * @param conversion
57      * @return an AtomicValue, a value of the required type; or an ErrorValue
58     */

59
60     public AtomicValue convertPrimitive(BuiltInAtomicType requiredType, boolean validate, ConversionContext conversion) {
61         switch(requiredType.getPrimitiveType()) {
62         case Type.G_YEAR:
63         case Type.ATOMIC:
64         case Type.ITEM:
65             return this;
66
67         case Type.STRING:
68             return new StringValue(getStringValueCS());
69         case Type.UNTYPED_ATOMIC:
70             return new UntypedAtomicValue(getStringValueCS());
71         default:
72             ValidationException err = new ValidationException("Cannot convert gYear to " +
73                                      requiredType.getDisplayName());
74             err.setErrorCode("FORG0001");
75             return new ValidationErrorValue(err);
76         }
77     }
78
79     public String JavaDoc getStringValue() {
80
81         FastStringBuffer sb = new FastStringBuffer(16);
82         int era = calendar.get(GregorianCalendar.ERA);
83         int year = calendar.get(Calendar.YEAR);
84         if (era == GregorianCalendar.BC) {
85             sb.append('-');
86         }
87         DateTimeValue.appendString(sb, year, (year>9999 ? (calendar.get(Calendar.YEAR)+"").length() : 4));
88
89         if (zoneSpecified) {
90             DateTimeValue.appendTimezone(tzOffset, sb);
91         }
92
93         return sb.toString();
94
95     }
96 }
97
98 //
99
// The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
100
// you may not use this file except in compliance with the License. You may obtain a copy of the
101
// License at http://www.mozilla.org/MPL/
102
//
103
// Software distributed under the License is distributed on an "AS IS" basis,
104
// WITHOUT WARRANTY OF ANY KIND, either express or implied.
105
// See the License for the specific language governing rights and limitations under the License.
106
//
107
// The Original Code is: all this file.
108
//
109
// The Initial Developer of the Original Code is Saxonica Limited
110
//
111
// Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved.
112
//
113
// Contributor(s): none
114
//
Popular Tags