net.sf.saxon.value

Class DurationValue

Implemented Interfaces:
ConversionResult, GroundedValue, Item, PullEvent, Serializable, SequenceIterable, Serializable, ValueRepresentation
Known Direct Subclasses:
DayTimeDurationValue, YearMonthDurationValue

public class DurationValue
extends AtomicValue

A value of type xs:duration

Field Summary

protected int
microseconds
protected int
months
protected boolean
negative
protected long
seconds

Fields inherited from class net.sf.saxon.value.AtomicValue

typeLabel

Fields inherited from class net.sf.saxon.value.Value

EMPTY_CLASS_ARRAY, INDETERMINATE_ORDERING

Fields inherited from interface net.sf.saxon.om.ValueRepresentation

EMPTY_VALUE_ARRAY

Constructor Summary

DurationValue()
Private constructor for internal use
DurationValue(boolean positive, int years, int months, int days, int hours, int minutes, long seconds, int microseconds)
Constructor for xs:duration taking the components of the duration.
DurationValue(boolean positive, int years, int months, int days, int hours, int minutes, long seconds, int microseconds, AtomicType type)
Constructor for xs:duration taking the components of the duration, plus a user-specified type which must be a subtype of xs:duration.

Method Summary

DurationValue
add(DurationValue other)
Add two durations
protected static ValidationFailure
badDuration(String msg, CharSequence s)
ConversionResult
convertPrimitive(BuiltInAtomicType requiredType, boolean validate, XPathContext context)
Convert to target data type
Object
convertToJava(Class target, XPathContext context)
Convert to Java object (for passing to external functions)
AtomicValue
copyAsSubType(AtomicType typeLabel)
Create a copy of this atomic value, with a different type label
DecimalValue
divide(DurationValue other)
Divide a duration by a another duration
boolean
equals(Object other)
Test if the two durations are of equal length.
AtomicValue
getComponent(int component)
Get a component of the normalized value
int
getDays()
Get the days component
int
getHours()
Get the hours component
double
getLengthInSeconds()
Get length of duration in seconds, assuming an average length of month.
int
getMicroseconds()
Get the microseconds component
int
getMinutes()
Get the minutes component
int
getMonths()
Get the months component
BuiltInAtomicType
getPrimitiveType()
Determine the primitive type of the value.
Comparable
getSchemaComparable()
Get a Comparable value that implements the XML Schema ordering comparison semantics for this value.
static Comparable
getSchemaComparable(DurationValue value)
Get a Comparable value that implements the XML Schema ordering comparison semantics for this value.
int
getSeconds()
Get the seconds component
String
getStringValue()
Convert the value to a string, using the serialization rules.
CharSequence
getStringValueCS()
Convert to string
Object
getXPathComparable(boolean ordered, StringCollator collator, XPathContext context)
Get an object value that implements the XPath equality and ordering comparison semantics for this value.
int
getYears()
Get the year component
int
hashCode()
static ConversionResult
makeDuration(CharSequence s)
Static factory method: create a duration value from a supplied string, in ISO 8601 format [-]PnYnMnDTnHnMnS
DurationValue
multiply(double factor)
Multiply a duration by a number
DurationValue
negate()
Negate a duration (same as subtracting from zero, but it preserves the type of the original duration)
DurationValue
normalizeDuration()
Deprecated. since 9.0 - the method does nothing
protected void
normalizeZeroDuration()
Ensure that a zero duration is considered positive
int
signum()
Return the signum of the value
protected static int
simpleInteger(String s)
Parse a simple unsigned integer
DurationValue
subtract(DurationValue other)
Subtract two durations

Methods inherited from class net.sf.saxon.value.AtomicValue

asAtomic, checkPermittedContents, convert, convert, convertPrimitive, copyAsSubType, effectiveBooleanValue, equals, getCardinality, getComponent, getItemType, getLength, getPrimitiveType, getSchemaComparable, getStringValue, getStringValueCS, getTypeLabel, getTypedValue, getXPathComparable, isNaN, itemAt, iterate, process, setTypeLabel, subsequence, toString

Methods inherited from class net.sf.saxon.value.Value

asItem, asItem, asIterator, asValue, checkPermittedContents, convertJavaObjectToXPath, convertToJava, convertToJava, effectiveBooleanValue, equals, fromItem, getCanonicalLexicalRepresentation, getCardinality, getItemType, getIterator, getLength, getSchemaComparable, getStringValue, getStringValueCS, itemAt, iterate, iterate, makeQNameValue, process, reduce, stringToNumber, toString

Field Details

microseconds

protected int microseconds

months

protected int months

negative

protected boolean negative

seconds

protected long seconds

Constructor Details

DurationValue

protected DurationValue()
Private constructor for internal use

DurationValue

public DurationValue(boolean positive,
                     int years,
                     int months,
                     int days,
                     int hours,
                     int minutes,
                     long seconds,
                     int microseconds)
            throws IllegalArgumentException
Constructor for xs:duration taking the components of the duration. There is no requirement that the values are normalized, for example it is acceptable to specify months=18. The values of the individual components must all be non-negative.
Parameters:
positive - true if the duration is positive, false if negative. For a negative duration the components are all supplied as positive integers (or zero).
years - the number of years
months - the number of months
days - the number of days
hours - the number of hours
minutes - the number of minutes
seconds - the number of seconds
microseconds - the number of microseconds

DurationValue

public DurationValue(boolean positive,
                     int years,
                     int months,
                     int days,
                     int hours,
                     int minutes,
                     long seconds,
                     int microseconds,
                     AtomicType type)
Constructor for xs:duration taking the components of the duration, plus a user-specified type which must be a subtype of xs:duration. There is no requirement that the values are normalized, for example it is acceptable to specify months=18. The values of the individual components must all be non-negative.
Parameters:
positive - true if the duration is positive, false if negative. For a negative duration the components are all supplied as positive integers (or zero).
years - the number of years
months - the number of months
days - the number of days
hours - the number of hours
minutes - the number of minutes
seconds - the number of seconds (long to allow copying)
microseconds - the number of microseconds
type - the user-defined subtype of xs:duration. Note that this constructor cannot be used to create an instance of xs:dayTimeDuration or xs:yearMonthDuration.

Method Details

add

public DurationValue add(DurationValue other)
            throws XPathException
Add two durations
Parameters:
other - the duration to be added to this one
Returns:
the sum of the two durations

badDuration

protected static ValidationFailure badDuration(String msg,
                                               CharSequence s)

convertPrimitive

public ConversionResult convertPrimitive(BuiltInAtomicType requiredType,
                                         boolean validate,
                                         XPathContext context)
Convert to target data type
Overrides:
convertPrimitive in interface AtomicValue
Parameters:
requiredType - an integer identifying the required atomic type
validate - if set to false, the caller asserts that the value is known to be valid
context - the XPath dynamic context
Returns:
an AtomicValue, a value of the required type; or a ValidationFailure if the value cannot be converted.

convertToJava

public Object convertToJava(Class target,
                            XPathContext context)
            throws XPathException
Convert to Java object (for passing to external functions)
Overrides:
convertToJava in interface Value

copyAsSubType

public AtomicValue copyAsSubType(AtomicType typeLabel)
Create a copy of this atomic value, with a different type label
Overrides:
copyAsSubType in interface AtomicValue
Parameters:
typeLabel - the type label of the new copy. The caller is responsible for checking that the value actually conforms to this type.

divide

public DecimalValue divide(DurationValue other)
            throws XPathException
Divide a duration by a another duration
Parameters:
other - the duration to divide by
Returns:
the result of the division

equals

public boolean equals(Object other)
Test if the two durations are of equal length.
Overrides:
equals in interface AtomicValue

getComponent

public AtomicValue getComponent(int component)
            throws XPathException
Get a component of the normalized value
Overrides:
getComponent in interface AtomicValue

getDays

public int getDays()
Get the days component
Returns:
the number of days in the normalized duration; always positive

getHours

public int getHours()
Get the hours component
Returns:
the number of hours in the normalized duration; always positive

getLengthInSeconds

public double getLengthInSeconds()
Get length of duration in seconds, assuming an average length of month. (Note, this defines a total ordering on durations which is different from the partial order defined in XML Schema; XPath 2.0 currently avoids defining an ordering at all. But the ordering here is consistent with the ordering of the two duration subtypes in XPath 2.0.)
Returns:
the duration in seconds, as a double

getMicroseconds

public int getMicroseconds()
Get the microseconds component
Returns:
the number of microseconds in the normalized duration; always positive

getMinutes

public int getMinutes()
Get the minutes component
Returns:
the number of minutes in the normalized duration; always positive

getMonths

public int getMonths()
Get the months component
Returns:
the number of months in the normalized duration; always positive

getPrimitiveType

public BuiltInAtomicType getPrimitiveType()
Determine the primitive type of the value. This delivers the same answer as getItemType().getPrimitiveItemType(). The primitive types are the 19 primitive types of XML Schema, plus xs:integer, xs:dayTimeDuration and xs:yearMonthDuration, and xs:untypedAtomic. For external objects, the result is AnyAtomicType.
Overrides:
getPrimitiveType in interface AtomicValue

getSchemaComparable

public Comparable getSchemaComparable()
Get a Comparable value that implements the XML Schema ordering comparison semantics for this value. This implementation handles the ordering rules for durations in XML Schema. It is overridden for the two subtypes DayTimeDuration and YearMonthDuration.
Overrides:
getSchemaComparable in interface AtomicValue
Returns:
a suitable Comparable

getSchemaComparable

public static Comparable getSchemaComparable(DurationValue value)
Get a Comparable value that implements the XML Schema ordering comparison semantics for this value. This implementation handles the ordering rules for durations in XML Schema.
Parameters:
value - the duration for which a comparison key is required
Returns:
a suitable Comparable

getSeconds

public int getSeconds()
Get the seconds component
Returns:
the number of whole seconds in the normalized duration; always positive

getStringValue

public String getStringValue()
Convert the value to a string, using the serialization rules. For atomic values this is the same as a cast; for sequence values it gives a space-separated list. This method is refined for AtomicValues so that it never throws an Exception.
Specified by:
getStringValue in interface Item
getStringValue in interface ValueRepresentation
Overrides:
getStringValue in interface AtomicValue

getStringValueCS

public CharSequence getStringValueCS()
Convert to string
Specified by:
getStringValueCS in interface Item
getStringValueCS in interface ValueRepresentation
Overrides:
getStringValueCS in interface AtomicValue
Returns:
ISO 8601 representation.

getXPathComparable

public Object getXPathComparable(boolean ordered,
                                 StringCollator collator,
                                 XPathContext context)
Get an object value that implements the XPath equality and ordering comparison semantics for this value. If the ordered parameter is set to true, the result will be a Comparable and will support a compareTo() method with the semantics of the XPath lt/gt operator, provided that the other operand is also obtained using the getXPathComparable() method. In all cases the result will support equals() and hashCode() methods that support the semantics of the XPath eq operator, again provided that the other operand is also obtained using the getXPathComparable() method. A context argument is supplied for use in cases where the comparison semantics are context-sensitive, for example where they depend on the implicit timezone or the default collation.
Overrides:
getXPathComparable in interface AtomicValue
Parameters:
ordered - true if an ordered comparison is required. In this case the result is null if the type is unordered; in other cases the returned value will be a Comparable.
collator - collation used for comparing string values
context - the XPath dynamic evaluation context, used in cases where the comparison is context sensitive @return an Object whose equals() and hashCode() methods implement the XPath comparison semantics with respect to this atomic value. If ordered is specified, the result will either be null if no ordering is defined, or will be a Comparable

getYears

public int getYears()
Get the year component
Returns:
the number of years in the normalized duration; always positive

hashCode

public int hashCode()

makeDuration

public static ConversionResult makeDuration(CharSequence s)
Static factory method: create a duration value from a supplied string, in ISO 8601 format [-]PnYnMnDTnHnMnS
Parameters:
s - a string in the lexical space of xs:duration
Returns:
the constructed xs:duration value, or a ValidationFailure if the supplied string is lexically invalid.

multiply

public DurationValue multiply(double factor)
            throws XPathException
Multiply a duration by a number
Parameters:
factor - the number to multiply by
Returns:
the result of the multiplication

negate

public DurationValue negate()
Negate a duration (same as subtracting from zero, but it preserves the type of the original duration)
Returns:
the original duration with its sign reversed, retaining its type

normalizeDuration

public DurationValue normalizeDuration()

Deprecated. since 9.0 - the method does nothing

Normalize the duration, so that months<12, hours<24, minutes<60, seconds<60. Since durations are now always normalized, this method has become a no-op, but is retained for backwards compatibility
Returns:
the duration unchanged

normalizeZeroDuration

protected void normalizeZeroDuration()
Ensure that a zero duration is considered positive

signum

public int signum()
Return the signum of the value
Returns:
-1 if the duration is negative, zero if it is zero-length, +1 if it is positive

simpleInteger

protected static int simpleInteger(String s)
Parse a simple unsigned integer
Parameters:
s - the string containing the sequence of digits. No sign or whitespace is allowed.
Returns:
the integer. Return -1 if the string is not a sequence of digits or exceeds 2^31

subtract

public DurationValue subtract(DurationValue other)
            throws XPathException
Subtract two durations
Parameters:
other - the duration to be subtracted from this one
Returns:
the difference of the two durations