Class SaxonDuration
- java.lang.Object
-
- javax.xml.datatype.Duration
-
- net.sf.saxon.value.SaxonDuration
-
public class SaxonDuration extends javax.xml.datatype.Duration
Saxon implementation of the JAXP class javax.xml.datatype.Duration. This is currently used only by the XQJ interface for XQuery: the normal representation of a duration in Saxon is the classDurationValue
.The JAXP specification for this class defines it in terms of XML Schema 1.0 semantics. This defines a structure with six independent components (year, month, day, hour, minute, second). This implementation is more aligned to the XPath 2.0 semantics of the data type, which essentially defines duration as an integer number of months plus a decimal number of seconds.
-
-
Constructor Summary
Constructors Constructor Description SaxonDuration(DurationValue duration)
Create a SaxonDuration that wraps a supplied DurationValue
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description javax.xml.datatype.Duration
add(javax.xml.datatype.Duration rhs)
Computes a new duration whose value isthis+rhs
.void
addTo(java.util.Calendar calendar)
Adds this duration to aCalendar
object.int
compare(javax.xml.datatype.Duration rhs)
Partial order relation comparison with thisDuration
instance.DurationValue
getDurationValue()
Get the underlying DurationValuejava.lang.Number
getField(javax.xml.datatype.DatatypeConstants.Field field)
Gets the value of a field.int
getSign()
Returns the sign of this duration in -1,0, or 1.javax.xml.namespace.QName
getXMLSchemaType()
Get the type of this duration, as one of the values xs:duration, xs:dayTimeDuration, or xs:yearMonthDuration.int
hashCode()
Returns a hash code consistent with the definition of the equals method.boolean
isSet(javax.xml.datatype.DatatypeConstants.Field field)
Checks if a field is set.javax.xml.datatype.Duration
multiply(java.math.BigDecimal factor)
Computes a new duration whose value isfactor
times longer than the value of this duration.javax.xml.datatype.Duration
negate()
Returns a newDuration
object whose value is-this
.javax.xml.datatype.Duration
normalizeWith(java.util.Calendar startTimeInstant)
Converts the years and months fields into the days field by using a specific time instant as the reference point.javax.xml.datatype.Duration
subtract(javax.xml.datatype.Duration rhs)
Computes a new duration whose value isthis-rhs
.
-
-
-
Constructor Detail
-
SaxonDuration
public SaxonDuration(DurationValue duration)
Create a SaxonDuration that wraps a supplied DurationValue- Parameters:
duration
- the value to be wrapped.
-
-
Method Detail
-
getDurationValue
public DurationValue getDurationValue()
Get the underlying DurationValue- Returns:
- the underlying DurationValue
-
getXMLSchemaType
public javax.xml.namespace.QName getXMLSchemaType()
Get the type of this duration, as one of the values xs:duration, xs:dayTimeDuration, or xs:yearMonthDuration. (Note that the XML Schema namespace URI is used, whereas the current implementation of the superclass uses a provisional URI allocated in a 2003 W3C working draft)- Overrides:
getXMLSchemaType
in classjavax.xml.datatype.Duration
- Returns:
- the type of this duration, as one of the values xs:duration, xs:dayTimeDuration, or xs:yearMonthDuration
-
getSign
public int getSign()
Returns the sign of this duration in -1,0, or 1.- Specified by:
getSign
in classjavax.xml.datatype.Duration
- Returns:
- -1 if this duration is negative, 0 if the duration is zero, and 1 if the duration is positive.
-
getField
public java.lang.Number getField(javax.xml.datatype.DatatypeConstants.Field field)
Gets the value of a field.Fields of a duration object may contain arbitrary large value. Therefore this method is designed to return a
Number
object.In case of YEARS, MONTHS, DAYS, HOURS, and MINUTES, the returned number will be a non-negative integer. In case of seconds, the returned number may be a non-negative decimal value.
The Saxon implementation of duration uses normalized values. This means that the YEARS and DAYS fields may be arbitrarily large, but other components will be limited in size: for example MINUTES will never exceed 60 and MONTHS will never exceed 12.
- Specified by:
getField
in classjavax.xml.datatype.Duration
- Parameters:
field
- one of the six Field constants (YEARS, MONTHS, DAYS, HOURS, MINUTES, or SECONDS.)- Returns:
- If the specified field is present, this method returns
a non-null non-negative
Number
object that represents its value. If it is not present, return null. For YEARS, MONTHS, DAYS, HOURS, and MINUTES, this method returns aBigInteger
object. For SECONDS, this method returns aBigDecimal
. - Throws:
java.lang.NullPointerException
- If thefield
isnull
.
-
isSet
public boolean isSet(javax.xml.datatype.DatatypeConstants.Field field)
Checks if a field is set. In this implementation, all fields are always set.- Specified by:
isSet
in classjavax.xml.datatype.Duration
- Parameters:
field
- one of the six Field constants (YEARS, MONTHS, DAYS, HOURS, MINUTES, or SECONDS.)- Returns:
- This implementation always returns true.
-
add
public javax.xml.datatype.Duration add(javax.xml.datatype.Duration rhs)
Computes a new duration whose value is
this+rhs
.This implementation follows the XPath semantics. This means that the operation will fail if the duration is not a yearMonthDuration or a dayTimeDuration
- Specified by:
add
in classjavax.xml.datatype.Duration
- Parameters:
rhs
-Duration
to add to thisDuration
- Returns:
- non-null valid Duration object.
- Throws:
java.lang.NullPointerException
- If the rhs parameter is null.java.lang.IllegalStateException
- If the durations are not both dayTimeDurations, or both yearMonthDurations.- See Also:
subtract(javax.xml.datatype.Duration)
-
subtract
public javax.xml.datatype.Duration subtract(javax.xml.datatype.Duration rhs)
Computes a new duration whose value is
this-rhs
.This implementation follows the XPath semantics. This means that the operation will fail if the duration is not a yearMonthDuration or a dayTimeDuration.
- Overrides:
subtract
in classjavax.xml.datatype.Duration
- Parameters:
rhs
-Duration
to subtract from thisDuration
- Returns:
- non-null valid Duration object.
- Throws:
java.lang.NullPointerException
- If the rhs parameter is null.java.lang.IllegalStateException
- If the durations are not both dayTimeDurations, or both yearMonthDurations.- See Also:
add(javax.xml.datatype.Duration)
-
addTo
public void addTo(java.util.Calendar calendar)
Adds this duration to aCalendar
object.Calls
Calendar.add(int, int)
in the order of YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, and MILLISECONDS if those fields are present. Because theCalendar
class uses int to hold values, there are cases where this method won't work correctly (for example if values of fields exceed the range of int.)Also, since this duration class is a Gregorian duration, this method will not work correctly if the given
Calendar
object is based on some other calendar systems.Any fractional parts of this
Duration
object beyond milliseconds will be simply ignored. For example, if this duration is "P1.23456S", then 1 is added to SECONDS, 234 is added to MILLISECONDS, and the rest will be unused.Note that because
Calendar.add(int, int)
is using int,Duration
with values beyond the range of int in its fields will cause overflow/underflow to the givenCalendar
.XMLGregorianCalendar.add(javax.xml.datatype.Duration)
provides the same basic operation as this method while avoiding the overflow/underflow issues.- Specified by:
addTo
in classjavax.xml.datatype.Duration
- Parameters:
calendar
- A calendar object whose value will be modified.- Throws:
java.lang.NullPointerException
- if the calendar parameter is null.
-
multiply
public javax.xml.datatype.Duration multiply(java.math.BigDecimal factor)
Computes a new duration whose value isfactor
times longer than the value of this duration.This implementation follows the XPath semantics. This means that it is defined only on yearMonthDuration and dayTimeDuration. Other cases produce an IllegalStateException.
- Specified by:
multiply
in classjavax.xml.datatype.Duration
- Parameters:
factor
- to multiply by- Returns:
- returns a non-null valid
Duration
object - Throws:
java.lang.IllegalStateException
- if operation produces fraction in the months field.java.lang.NullPointerException
- if thefactor
parameter isnull
.
-
negate
public javax.xml.datatype.Duration negate()
Returns a newDuration
object whose value is-this
.Since the
Duration
class is immutable, this method doesn't change the value of this object. It simply computes a new Duration object and returns it.- Specified by:
negate
in classjavax.xml.datatype.Duration
- Returns:
- always return a non-null valid
Duration
object.
-
normalizeWith
public javax.xml.datatype.Duration normalizeWith(java.util.Calendar startTimeInstant)
Converts the years and months fields into the days field by using a specific time instant as the reference point.
This implementation does not support this method
- Specified by:
normalizeWith
in classjavax.xml.datatype.Duration
- Parameters:
startTimeInstant
-Calendar
reference point.- Returns:
Duration
of years and months of thisDuration
as days.- Throws:
java.lang.NullPointerException
- If the startTimeInstant parameter is null.java.lang.UnsupportedOperationException
- Always thrown by this implementation.
-
compare
public int compare(javax.xml.datatype.Duration rhs)
Partial order relation comparison with this
Duration
instance.This implementation follows the XPath semantics. This means that the result is defined only for dayTimeDuration and yearMonthDuration values, and the result is never indeterminate.
Return:
DatatypeConstants.LESSER
if thisDuration
is shorter thanduration
parameterDatatypeConstants.EQUAL
if thisDuration
is equal toduration
parameterDatatypeConstants.GREATER
if thisDuration
is longer thanduration
parameterDatatypeConstants.INDETERMINATE
if a conclusive partial order relation cannot be determined
- Specified by:
compare
in classjavax.xml.datatype.Duration
- Parameters:
rhs
- duration to compare- Returns:
- the relationship between
this
Duration
andduration
parameter asDatatypeConstants.LESSER
,DatatypeConstants.EQUAL
,DatatypeConstants.GREATER
orDatatypeConstants.INDETERMINATE
. - Throws:
java.lang.UnsupportedOperationException
- If the underlying implementation cannot reasonably process the request, e.g. W3C XML Schema allows for arbitrarily large/small/precise values, the request may be beyond the implementations capability.java.lang.NullPointerException
- ifduration
isnull
.java.lang.IllegalArgumentException
- if the operands are not dayTimeDuration or yearMonthDuration values.- See Also:
Duration.isShorterThan(javax.xml.datatype.Duration)
,Duration.isLongerThan(javax.xml.datatype.Duration)
-
hashCode
public int hashCode()
Returns a hash code consistent with the definition of the equals method.- Specified by:
hashCode
in classjavax.xml.datatype.Duration
- See Also:
Object.hashCode()
-
-