org.apache.xerces.impl.dv.xs

Class AbstractDateTimeDV

Known Direct Subclasses:
DateTimeDV, DayDV, DurationDV, MonthDayDV, MonthDV, TimeDV, YearDV, YearMonthDV

public abstract class AbstractDateTimeDV
extends TypeValidator

This is the base class of all date/time datatype validators. It implements common code for parsing, validating and comparing datatypes. Classes that extend this class, must implement parse() method. REVISIT: There are many instance variables, which would cause problems when we support grammar caching. A grammar is possibly used by two parser instances at the same time, then the same simple type decl object can be used to validate two strings at the same time. -SG
Version:
$Id: AbstractDateTimeDV.java,v 1.40 2005/07/19 04:32:40 mrglavas Exp $
Authors:
Elena Litani
Len Berman
Gopal Sharma, SUN Microsystems Inc.

Field Summary

protected static int
DAY
protected static int
MONTH
protected static int
YEAR
protected DatatypeFactory
factory

Fields inherited from class org.apache.xerces.impl.dv.xs.TypeValidator

EQUAL, GREATER_THAN, INDETERMINATE, LESS_THAN

Method Summary

protected void
append(StringBuffer message, double value)
protected void
append(StringBuffer message, int value, int nch)
int
compare(Object value1, Object value2)
protected short
compareDates(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date1, org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date2, boolean strict)
Compare algorithm described in dateDime (3.2.7).
protected short
compareOrder(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date1, org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date2)
Given normalized values, determines order-relation between give date/time objects.
protected String
dateToString(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
protected int
fQuotient(int a, int b)
protected int
fQuotient(int temp, int low, int high)
protected int
findUTCSign(String buffer, int start, int end)
Return index of UTC char: 'Z', '+', '-'
short
getAllowedFacets()
protected int
getDate(String buffer, int start, int end, org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
Parses date CCYY-MM-DD
protected Duration
getDuration(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
protected void
getTime(String buffer, int start, int end, org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
Parses time hh:mm:ss.sss and time zone if any
protected void
getTimeZone(String buffer, org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data, int sign, int end)
Parses time zone: 'Z' or {+,-} followed by hh:mm
protected XMLGregorianCalendar
getXMLGregorianCalendar(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
protected int
getYearMonth(String buffer, int start, int end, org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
Parses date CCYY-MM
protected int
indexOf(String buffer, int start, int end, char ch)
Computes index of given char within StringBuffer
boolean
isIdentical(Object value1, Object value2)
protected boolean
isNextCharUTCSign(String buffer, int start, int end)
Returns true if the character at start is 'Z', '+' or '-'.
protected int
maxDayInMonthFor(int year, int month)
Given {year,month} computes maximum number of days for given month
protected int
mod(int a, int b, int quotient)
protected int
modulo(int temp, int low, int high)
protected void
normalize(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
If timezone present - normalize dateTime [E Adding durations to dateTimes]
protected int
parseInt(String buffer, int start, int end)
Given start and end position, parses string value
protected int
parseIntYear(String buffer, int end)
protected double
parseSecond(String buffer, int start, int end)
protected void
parseTimeZone(String buffer, int start, int end, org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
Shared code from Date and YearMonth datatypes.
protected void
resetDateObj(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
Resets object representation of date/time
protected void
saveUnnormalized(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
protected void
validateDateTime(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
Validates given date/time object accoring to W3C PR Schema [D.1 ISO 8601 Conventions]

Methods inherited from class org.apache.xerces.impl.dv.xs.TypeValidator

checkExtraRules, compare, getActualValue, getAllowedFacets, getDataLength, getDigit, getFractionDigits, getTotalDigits, isDigit, isIdentical

Field Details

DAY

protected static final int DAY
Field Value:
1

MONTH

protected static final int MONTH
Field Value:
1

YEAR

protected static final int YEAR
Field Value:
2000

factory

protected DatatypeFactory factory

Method Details

append

protected void append(StringBuffer message,
                      double value)

append

protected void append(StringBuffer message,
                      int value,
                      int nch)

compare

public int compare(Object value1,
                   Object value2)
Overrides:
compare in interface TypeValidator

compareDates

protected short compareDates(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date1,
                             org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date2,
                             boolean strict)
Compare algorithm described in dateDime (3.2.7). Duration datatype overwrites this method
Parameters:
date1 - normalized date representation of the first value
date2 - normalized date representation of the second value
strict -
Returns:
less, greater, less_equal, greater_equal, equal

compareOrder

protected short compareOrder(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date1,
                             org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date2)
Given normalized values, determines order-relation between give date/time objects.
Parameters:
date1 - date/time object
date2 - date/time object
Returns:
0 if date1 and date2 are equal, a value less than 0 if date1 is less than date2, a value greater than 0 if date1 is greater than date2

dateToString

protected String dateToString(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)

fQuotient

protected int fQuotient(int a,
                        int b)

fQuotient

protected int fQuotient(int temp,
                        int low,
                        int high)

findUTCSign

protected int findUTCSign(String buffer,
                          int start,
                          int end)
Return index of UTC char: 'Z', '+', '-'
Parameters:
start -
end -
Returns:
index of the UTC character that was found

getAllowedFacets

public short getAllowedFacets()
Overrides:
getAllowedFacets in interface TypeValidator

getDate

protected int getDate(String buffer,
                      int start,
                      int end,
                      org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
            throws RuntimeException
Parses date CCYY-MM-DD
Parameters:
buffer -
start - start position
end - end position
date -

getDuration

protected Duration getDuration(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)

getTime

protected void getTime(String buffer,
                       int start,
                       int end,
                       org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
            throws RuntimeException
Parses time hh:mm:ss.sss and time zone if any
Parameters:
start -
end -
data -

getTimeZone

protected void getTimeZone(String buffer,
                           org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data,
                           int sign,
                           int end)
            throws RuntimeException
Parses time zone: 'Z' or {+,-} followed by hh:mm
Parameters:
data -
sign -

getXMLGregorianCalendar

protected XMLGregorianCalendar getXMLGregorianCalendar(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)

getYearMonth

protected int getYearMonth(String buffer,
                           int start,
                           int end,
                           org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
            throws RuntimeException
Parses date CCYY-MM
Parameters:
buffer -
start - start position
end - end position
date -

indexOf

protected int indexOf(String buffer,
                      int start,
                      int end,
                      char ch)
Computes index of given char within StringBuffer
Parameters:
start -
end -
ch - character to look for in StringBuffer
Returns:
index of ch within StringBuffer

isIdentical

public boolean isIdentical(Object value1,
                           Object value2)
Overrides:
isIdentical in interface TypeValidator

isNextCharUTCSign

protected final boolean isNextCharUTCSign(String buffer,
                                          int start,
                                          int end)
Returns true if the character at start is 'Z', '+' or '-'.

maxDayInMonthFor

protected int maxDayInMonthFor(int year,
                               int month)
Given {year,month} computes maximum number of days for given month
Parameters:
year -
month -
Returns:
integer containg the number of days in a given month

mod

protected int mod(int a,
                  int b,
                  int quotient)

modulo

protected int modulo(int temp,
                     int low,
                     int high)

normalize

protected void normalize(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
If timezone present - normalize dateTime [E Adding durations to dateTimes]
Parameters:
date - CCYY-MM-DDThh:mm:ss+03

parseInt

protected int parseInt(String buffer,
                       int start,
                       int end)
            throws NumberFormatException
Given start and end position, parses string value
Parameters:
buffer - string to parse
start - start position
end - end position
Returns:
return integer representation of characters

parseIntYear

protected int parseIntYear(String buffer,
                           int end)

parseSecond

protected double parseSecond(String buffer,
                             int start,
                             int end)
            throws NumberFormatException

parseTimeZone

protected void parseTimeZone(String buffer,
                             int start,
                             int end,
                             org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
            throws RuntimeException
Shared code from Date and YearMonth datatypes. Finds if time zone sign is present
Parameters:
end -
date -

resetDateObj

protected void resetDateObj(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
Resets object representation of date/time
Parameters:
data - date/time object

saveUnnormalized

protected void saveUnnormalized(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
Parameters:
date -

validateDateTime

protected void validateDateTime(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
Validates given date/time object accoring to W3C PR Schema [D.1 ISO 8601 Conventions]
Parameters:
data -

Copyright B) 1999-2005 Apache XML Project. All Rights Reserved.