Class 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 class DurationValue.

    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 is this+rhs.
      void addTo​(java.util.Calendar calendar)
      Adds this duration to a Calendar object.
      int compare​(javax.xml.datatype.Duration rhs)
      Partial order relation comparison with this Duration instance.
      DurationValue getDurationValue()
      Get the underlying DurationValue
      java.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 is factor times longer than the value of this duration.
      javax.xml.datatype.Duration negate()
      Returns a new Duration 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 is this-rhs.
      • Methods inherited from class javax.xml.datatype.Duration

        addTo, equals, getDays, getHours, getMinutes, getMonths, getSeconds, getTimeInMillis, getTimeInMillis, getYears, isLongerThan, isShorterThan, multiply, toString
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    • 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 class javax.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 class javax.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 class javax.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 a BigInteger object. For SECONDS, this method returns a BigDecimal.
        Throws:
        java.lang.NullPointerException - If the field is null.
      • 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 class javax.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 class javax.xml.datatype.Duration
        Parameters:
        rhs - Duration to add to this Duration
        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 class javax.xml.datatype.Duration
        Parameters:
        rhs - Duration to subtract from this Duration
        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 a Calendar object.

        Calls Calendar.add(int, int) in the order of YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, and MILLISECONDS if those fields are present. Because the Calendar 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 given Calendar. XMLGregorianCalendar.add(javax.xml.datatype.Duration) provides the same basic operation as this method while avoiding the overflow/underflow issues.

        Specified by:
        addTo in class javax.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 is factor 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 class javax.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 the factor parameter is null.
      • negate

        public javax.xml.datatype.Duration negate()
        Returns a new Duration 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 class javax.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 class javax.xml.datatype.Duration
        Parameters:
        startTimeInstant - Calendar reference point.
        Returns:
        Duration of years and months of this Duration 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 this Duration is shorter than duration parameter
        • DatatypeConstants.EQUAL if this Duration is equal to duration parameter
        • DatatypeConstants.GREATER if this Duration is longer than duration parameter
        • DatatypeConstants.INDETERMINATE if a conclusive partial order relation cannot be determined
        Specified by:
        compare in class javax.xml.datatype.Duration
        Parameters:
        rhs - duration to compare
        Returns:
        the relationship between this Durationand duration parameter as DatatypeConstants.LESSER, DatatypeConstants.EQUAL, DatatypeConstants.GREATER or DatatypeConstants.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 - if duration is null.
        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 class javax.xml.datatype.Duration
        See Also:
        Object.hashCode()