Class DurationValue

All Implemented Interfaces:
Serializable, Expression, Item, ValueRepresentation
Direct Known Subclasses:
MonthDurationValue, SecondsDurationValue

public class DurationValue extends AtomicValue
A value of type xs:duration
See Also:
  • Field Details

    • negative

      protected boolean negative
    • years

      protected int years
    • months

      protected int months
    • days

      protected int days
    • hours

      protected int hours
    • minutes

      protected int minutes
    • seconds

      protected int seconds
    • microseconds

      protected int microseconds
    • normalized

      protected boolean normalized
  • 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, int seconds, int microseconds)
    • DurationValue

      public DurationValue(CharSequence s) throws XPathException
      Constructor: create a duration value from a supplied string, in ISO 8601 format [-]PnYnMnDTnHnMnS
      Throws:
      XPathException
  • Method Details

    • normalizeZeroDuration

      protected void normalizeZeroDuration()
    • badDuration

      protected void badDuration(String msg, CharSequence s) throws XPathException
      Throws:
      XPathException
    • convertPrimitive

      public AtomicValue convertPrimitive(BuiltInAtomicType requiredType, boolean validate, XPathContext context)
      Convert to target data type
      Specified by:
      convertPrimitive in class 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 -
      Returns:
      an AtomicValue, a value of the required type; or a ValidationErrorValue if the value cannot be converted.
    • normalizeDuration

      public DurationValue normalizeDuration()
      Normalize the duration, so that monthsinvalid input: '<'12, hoursinvalid input: '<'24, minutesinvalid input: '<'60, secondsinvalid input: '<'60. At present we do this when converting to a string. It's possible that it should be done immediately on constructing the duration (so that component extraction functions get the normalized value). We're awaiting clarification of the spec (bugzilla 3369)
      Returns:
      a new, normalized duration
    • 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
    • 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
      Specified by:
      getStringValue in interface ValueRepresentation
      Specified by:
      getStringValue in class AtomicValue
      Returns:
      the string value of the item
      See Also:
    • getStringValueCS

      public CharSequence getStringValueCS()
      Convert to string
      Specified by:
      getStringValueCS in interface Item
      Specified by:
      getStringValueCS in interface ValueRepresentation
      Overrides:
      getStringValueCS in class AtomicValue
      Returns:
      ISO 8601 representation.
      See Also:
    • 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.)
    • getItemType

      public ItemType getItemType(TypeHierarchy th)
      Determine the data type of the exprssion
      Specified by:
      getItemType in interface Expression
      Overrides:
      getItemType in class Value
      Parameters:
      th -
      Returns:
      Type.DURATION,
    • convertToJava

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

      public AtomicValue getComponent(int component) throws XPathException
      Get a component of the normalized value
      Overrides:
      getComponent in class AtomicValue
      Throws:
      XPathException
    • equals

      public boolean equals(Object other)
      Test if the two durations are of equal length. Note: this function is defined in XPath 2.0, but its semantics are currently unclear.
      Overrides:
      equals in class Value
      Throws:
      ClassCastException - if the other value is not an xs:duration or subtype thereof
    • hashCode

      public int hashCode()
      Description copied from class: Value
      Return a hash code to support the equals() function
      Overrides:
      hashCode in class Value
    • add

      public DurationValue add(DurationValue other) throws XPathException
      Add two durations
      Throws:
      XPathException
    • subtract

      public DurationValue subtract(DurationValue other) throws XPathException
      Subtract two durations
      Throws:
      XPathException
    • negate

      public DurationValue negate()
      Negate a duration (same as subtracting from zero, but it preserves the type of the original duration)
    • multiply

      public DurationValue multiply(double factor) throws XPathException
      Multiply a duration by a number
      Throws:
      XPathException
    • divide

      public DecimalValue divide(DurationValue other) throws XPathException
      Divide a duration by a another duration
      Throws:
      XPathException