Class AbstractDateTimeDV
- java.lang.Object
-
- org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.TypeValidator
-
- org.smooks.engine.delivery.sax.ng.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$
- Author:
- Elena Litani, Len Berman, Gopal Sharma, SUN Microsystems Inc.
-
-
Field Summary
Fields Modifier and Type Field Description protected static DatatypeFactory
datatypeFactory
protected static int
DAY
protected static int
MONTH
protected static int
YEAR
-
Fields inherited from class org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.TypeValidator
EQUAL, GREATER_THAN, INDETERMINATE, LESS_THAN
-
-
Constructor Summary
Constructors Constructor Description AbstractDateTimeDV()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
append(StringBuffer message, double value)
protected void
append(StringBuffer message, int value, int nch)
protected void
append2(StringBuffer message, double value)
int
compare(Object value1, Object value2)
protected short
compareDates(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date1, org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date2, boolean strict)
Compare algorithm described in dateDime (3.2.7).protected short
compareOrder(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date1, org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date2)
Given normalized values, determines order-relation between give date/time objects.protected String
dateToString(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
protected int
findUTCSign(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(String buffer, int start, int end, org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
Parses date CCYY-MM-DDprotected Duration
getDuration(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
protected BigDecimal
getFractionalSecondsAsBigDecimal(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
protected void
getTime(String buffer, int start, int end, org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
Parses time hh:mm:ss.sss and time zone if anyprotected void
getTimeZone(String buffer, org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data, int sign, int end)
Parses time zone: 'Z' or {+,-} followed by hh:mmprotected XMLGregorianCalendar
getXMLGregorianCalendar(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
protected int
getYearMonth(String buffer, int start, int end, org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
Parses date CCYY-MMprotected int
indexOf(String buffer, int start, int end, char ch)
Computes index of given char within StringBufferboolean
isIdentical(Object value1, Object value2)
protected boolean
isNextCharUTCSign(String buffer, int start, int end)
Returnstrue
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 monthprotected int
mod(int a, int b, int quotient)
protected int
modulo(int temp, int low, int high)
protected void
normalize(org.smooks.engine.delivery.sax.ng.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 valueprotected 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.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
Shared code from Date and YearMonth datatypes.protected void
resetDateObj(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
Resets object representation of date/timeprotected void
saveUnnormalized(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
protected void
validateDateTime(org.smooks.engine.delivery.sax.ng.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.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.TypeValidator
checkExtraRules, getActualValue, getDataLength, getDigit, getFractionDigits, getTotalDigits, isDigit
-
-
-
-
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 DatatypeFactory datatypeFactory
-
-
Method Detail
-
getAllowedFacets
public short getAllowedFacets()
- Specified by:
getAllowedFacets
in classTypeValidator
-
isIdentical
public boolean isIdentical(Object value1, Object value2)
- Overrides:
isIdentical
in classTypeValidator
-
compare
public int compare(Object value1, Object value2)
- Overrides:
compare
in classTypeValidator
-
compareDates
protected short compareDates(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date1, org.smooks.engine.delivery.sax.ng.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 valuedate2
- normalized date representation of the second valuestrict
-- Returns:
- less, greater, less_equal, greater_equal, equal
-
compareOrder
protected short compareOrder(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date1, org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date2)
Given normalized values, determines order-relation between give date/time objects.- Parameters:
date1
- date/time objectdate2
- 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(String buffer, int start, int end, org.smooks.engine.delivery.sax.ng.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
-- Throws:
RuntimeException
-
getDate
protected int getDate(String buffer, int start, int end, org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date) throws RuntimeException
Parses date CCYY-MM-DD- Parameters:
buffer
-start
- start positionend
- end positiondate
-- Throws:
RuntimeException
-
getYearMonth
protected int getYearMonth(String buffer, int start, int end, org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date) throws RuntimeException
Parses date CCYY-MM- Parameters:
buffer
-start
- start positionend
- end positiondate
-- Throws:
RuntimeException
-
parseTimeZone
protected void parseTimeZone(String buffer, int start, int end, org.smooks.engine.delivery.sax.ng.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
-- Throws:
RuntimeException
-
getTimeZone
protected void getTimeZone(String buffer, org.smooks.engine.delivery.sax.ng.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
-- Throws:
RuntimeException
-
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
-
validateDateTime
protected void validateDateTime(org.smooks.engine.delivery.sax.ng.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(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(String buffer, int start, int end)
Returnstrue
if the character at start is 'Z', '+' or '-'.
-
parseInt
protected int parseInt(String buffer, int start, int end) throws NumberFormatException
Given start and end position, parses string value- Parameters:
buffer
- string to parsestart
- start positionend
- end position- Returns:
- return integer representation of characters
- Throws:
NumberFormatException
-
parseIntYear
protected int parseIntYear(String buffer, int end)
-
normalize
protected void normalize(org.smooks.engine.delivery.sax.ng.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.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
- Parameters:
date
-
-
resetDateObj
protected void resetDateObj(org.smooks.engine.delivery.sax.ng.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 String dateToString(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData date)
-
append
protected final void append(StringBuffer message, int value, int nch)
-
append
protected final void append(StringBuffer message, double value)
-
append2
protected final void append2(StringBuffer message, double value)
-
parseSecond
protected double parseSecond(String buffer, int start, int end) throws NumberFormatException
- Throws:
NumberFormatException
-
getXMLGregorianCalendar
protected XMLGregorianCalendar getXMLGregorianCalendar(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
-
getDuration
protected Duration getDuration(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
-
getFractionalSecondsAsBigDecimal
protected final BigDecimal getFractionalSecondsAsBigDecimal(org.smooks.engine.delivery.sax.ng.org.apache.xerces.impl.dv.xs.AbstractDateTimeDV.DateTimeData data)
-
-