org.apache.xerces.impl.dv.xs

## Class AbstractDateTimeDV

- java.lang.Object
- - org.apache.xerces.impl.dv.xs.TypeValidator
  - - org.apache.xerces.impl.dv.xs.AbstractDateTimeDV

Direct Known 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 965250 2010-07-18 16:04:58Z mrglavas $
Author:
  Elena Litani, Len Berman, Gopal Sharma, SUN Microsystems Inc.

# INTERNAL:

  Usage of this class is not supported. It may be altered or removed at any time.

### Field Summary

Fields
`protected static javax.xml.datatype.DatatypeFactory` `datatypeFactory`
`protected static int` `DAY`
`protected static int` `MONTH`
`protected static int` `YEAR`

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

`EQUAL, GREATER_THAN, INDETERMINATE, LESS_THAN`

### Constructor Summary

Constructors
Constructor and Description
`AbstractDateTimeDV()`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected void` `append(java.lang.StringBuffer message, double value)`
`protected void` `append(java.lang.StringBuffer message, int value, int nch)`
`protected void` `append2(java.lang.StringBuffer message, double value)`
`int` `compare(java.lang.Object value1, java.lang.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 java.lang.String` `dateToString(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)`
`protected int` `findUTCSign(java.lang.String buffer, int start, int end)` Return index of UTC char: 'Z', '+', '-'
`protected int` `fQuotient(int a, int b)`
`protected int` `fQuotient(int temp, int low, int high)`
`short` `getAllowedFacets()`
`protected int` `getDate(java.lang.String buffer, int start, int end, org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)` Parses date CCYY-MM-DD
`protected javax.xml.datatype.Duration` `getDuration(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)`
`protected java.math.BigDecimal` `getFractionalSecondsAsBigDecimal(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)`
`protected void` `getTime(java.lang.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(java.lang.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 javax.xml.datatype.XMLGregorianCalendar` `getXMLGregorianCalendar(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)`
`protected int` `getYearMonth(java.lang.String buffer, int start, int end, org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)` Parses date CCYY-MM
`protected int` `indexOf(java.lang.String buffer, int start, int end, char ch)` Computes index of given char within StringBuffer
`boolean` `isIdentical(java.lang.Object value1, java.lang.Object value2)`
`protected boolean` `isNextCharUTCSign(java.lang.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(java.lang.String buffer, int start, int end)` Given start and end position, parses string value
`protected int` `parseIntYear(java.lang.String buffer, int end)`
`protected double` `parseSecond(java.lang.String buffer, int start, int end)`
`protected void` `parseTimeZone(java.lang.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, getActualValue, getDataLength, getDigit, getFractionDigits, getTotalDigits, isDigit`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### YEAR

    protected static final int YEAR

See Also:
  Constant Field Values

#### MONTH

    protected static final int MONTH

See Also:
  Constant Field Values

#### DAY

    protected static final int DAY

See Also:
  Constant Field Values

#### datatypeFactory

    protected static final javax.xml.datatype.DatatypeFactory datatypeFactory

### Constructor Detail

#### AbstractDateTimeDV

    public AbstractDateTimeDV()

### Method Detail

#### getAllowedFacets

    public short getAllowedFacets()

Specified by:
  `getAllowedFacets` in class `TypeValidator`

#### isIdentical

    public boolean isIdentical(java.lang.Object value1,
                               java.lang.Object value2)

Overrides:
  `isIdentical` in class `TypeValidator`

#### compare

    public int compare(java.lang.Object value1,
                       java.lang.Object value2)

Overrides:
  `compare` in class `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

#### getTime

    protected void getTime(java.lang.String buffer,
                           int start,
                           int end,
                           org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
                    throws java.lang.RuntimeException

Parses time hh:mm:ss.sss and time zone if any

Parameters:
  `start` -
  `end` -
  `data` -
Throws:
  `java.lang.RuntimeException`

#### getDate

    protected int getDate(java.lang.String buffer,
                          int start,
                          int end,
                          org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
                   throws java.lang.RuntimeException

Parses date CCYY-MM-DD

Parameters:
  `buffer` -
  `start` - start position
  `end` - end position
  `date` -
Throws:
  `java.lang.RuntimeException`

#### getYearMonth

    protected int getYearMonth(java.lang.String buffer,
                               int start,
                               int end,
                               org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
                        throws java.lang.RuntimeException

Parses date CCYY-MM

Parameters:
  `buffer` -
  `start` - start position
  `end` - end position
  `date` -
Throws:
  `java.lang.RuntimeException`

#### parseTimeZone

    protected void parseTimeZone(java.lang.String buffer,
                                 int start,
                                 int end,
                                 org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
                          throws java.lang.RuntimeException

Shared code from Date and YearMonth datatypes. Finds if time zone sign is present

Parameters:
  `end` -
  `date` -
Throws:
  `java.lang.RuntimeException`

#### getTimeZone

    protected void getTimeZone(java.lang.String buffer,
                               org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data,
                               int sign,
                               int end)
                        throws java.lang.RuntimeException

Parses time zone: 'Z' or {+,-} followed by hh:mm

Parameters:
  `data` -
  `sign` -
Throws:
  `java.lang.RuntimeException`

#### indexOf

    protected int indexOf(java.lang.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

#### 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` -

#### findUTCSign

    protected int findUTCSign(java.lang.String buffer,
                              int start,
                              int end)

Return index of UTC char: 'Z', '+', '-'

Parameters:
  `start` -
  `end` -
Returns:
  index of the UTC character that was found

#### isNextCharUTCSign

    protected final boolean isNextCharUTCSign(java.lang.String buffer,
                                              int start,
                                              int end)

Returns `true` if the character at start is 'Z', '+' or '-'.

#### parseInt

    protected int parseInt(java.lang.String buffer,
                           int start,
                           int end)
                    throws java.lang.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
Throws:
  `java.lang.NumberFormatException`

#### parseIntYear

    protected int parseIntYear(java.lang.String buffer,
                               int end)

#### 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

#### saveUnnormalized

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

Parameters:
  `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

#### 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)

#### fQuotient

    protected int fQuotient(int a,
                            int b)

#### modulo

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

#### fQuotient

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

#### dateToString

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

#### append

    protected final void append(java.lang.StringBuffer message,
                                int value,
                                int nch)

#### append

    protected final void append(java.lang.StringBuffer message,
                                double value)

#### append2

    protected final void append2(java.lang.StringBuffer message,
                                 double value)

#### parseSecond

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

Throws:
  `java.lang.NumberFormatException`

#### getXMLGregorianCalendar

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

#### getDuration

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

#### getFractionalSecondsAsBigDecimal

    protected final java.math.BigDecimal getFractionalSecondsAsBigDecimal(org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)