Class SMSSubmit.ValidityPeriod

  • All Implemented Interfaces:
    DataObject, Serializable
    Enclosing class:
    SMSSubmit

    public static final class SMSSubmit.ValidityPeriod
    extends AbstractLazyEncodedByteArray
    Representation of a ValidityPeriod. Contains data to be incorporated into a SMSSubmit message; it does not get transmitted on a network as is.

    The API offered by this class is as if the type were specified in ASN.1 as follows.

     ValidityPeriod ::= CHOICE {
         length                 INTEGER,
         timeStamp              SMSTimeStamp,
         enhancedValidityPeriod EnhancedValidityPeriod
     }
    The class takes care of encoding the field values into a byte-array and decoding field values from a byte-array, the encoded representation being as tabulated below.

    Data Encoding - based on 3GPP TS 23.040 V9.0.0 (2009-06) §9.2.3.12 pp68-69
    76543210
    1 octet000Validity period format discriminates...000
    Either1 octetLength
    or7 octetsTime stamp
    or7 octetsEnhanced validity period

    The Validity Period Format is a discriminant for how the following octets are decoded. On encoding, the discriminant is automatically set according to which alternative is encoded.
    See Also:
    Serialized Form
    • Constructor Detail

      • ValidityPeriod

        public ValidityPeriod()
        Constructs a new ValidityPeriod object with no fields set.
      • ValidityPeriod

        public ValidityPeriod​(byte[] data)
        Constructs a new ValidityPeriod object from network-encoded data. The data is not decoded and might not be decodable.
        Parameters:
        data - network-encoded data
        Throws:
        NullPointerException - if data is null
      • ValidityPeriod

        public ValidityPeriod​(byte[] data,
                              int start,
                              int len)
        Constructs a new ValidityPeriod object from part of network-encoded data. The part starts at index start and is len bytes long. The data is not decoded and might not be decodable.
        Parameters:
        data - network-encoded data
        start - starting offset of network-encoded data in byte array
        len - default length if not predictable
        Throws:
        NullPointerException - if data is null
        IllegalArgumentException - if len is negative
      • ValidityPeriod

        public ValidityPeriod​(DataInput in)
                       throws IOException
        Constructs a new ValidityPeriod object from data deserialized from a stream that was written by toStream(DataOutput).
        Parameters:
        in - the stream to read from
        Throws:
        EOFException - if reading is pre-empted by end-of-file
        IOException - if the data cannot be read
      • ValidityPeriod

        public ValidityPeriod​(int length)
        Constructs a new ValidityPeriod object from the given arguments.
        Parameters:
        length - length of relative validity period
      • ValidityPeriod

        public ValidityPeriod​(SMSTimeStamp timeStamp)
        Constructs a new ValidityPeriod object from the given arguments.
        Parameters:
        timeStamp - absolute time of validity period termination
      • ValidityPeriod

        public ValidityPeriod​(SMSSubmit.ValidityPeriod.EnhancedValidityPeriod enhancedValidityPeriod)
        Constructs a new ValidityPeriod object from the given arguments.
        Parameters:
        enhancedValidityPeriod - EnhancedValidityPeriod of validity period
    • Method Detail

      • toStream

        public void toStream​(DataOutput out)
                      throws IOException
        Serializes this object to a stream in a form suitable for reading by {@link #SMSSubmit.ValidityPeriod(DataInput)}.
        Parameters:
        out - the stream to write to
        Throws:
        IOException - if an I/O error occurs
      • isLengthChosen

        public boolean isLengthChosen()
                               throws DecodeException
        Tests whether the choice is length.
        Returns:
        true if chosen, false if not
        Throws:
        DecodeException - if encoded state cannot be decoded
      • isTimeStampChosen

        public boolean isTimeStampChosen()
                                  throws DecodeException
        Tests whether the choice is timeStamp.
        Returns:
        true if chosen, false if not
        Throws:
        DecodeException - if encoded state cannot be decoded
      • isEnhancedValidityPeriodChosen

        public boolean isEnhancedValidityPeriodChosen()
                                               throws DecodeException
        Tests whether the choice is enhancedValidityPeriod.
        Returns:
        true if chosen, false if not
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getLength

        public int getLength()
                      throws DecodeException
        Gets the value of length of relative validity period.
        Returns:
        int representation of length of relative validity period, if choice is length of relative validity period
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getTimeStamp

        public SMSTimeStamp getTimeStamp()
                                  throws DecodeException
        Gets the value of absolute time of validity period termination.
        Returns:
        SMSTimeStamp representation of absolute time of validity period termination, if choice is absolute time of validity period termination, else null
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getEnhancedValidityPeriod

        public SMSSubmit.ValidityPeriod.EnhancedValidityPeriod getEnhancedValidityPeriod()
                                                                                  throws DecodeException
        Gets the value of enhanced format of validity period.
        Returns:
        EnhancedValidityPeriod representation of enhanced format of validity period, if choice is enhanced format of validity period, else null
        Throws:
        DecodeException - if encoded state cannot be decoded
      • copyOf

        public static SMSSubmit.ValidityPeriod copyOf​(SMSSubmit.ValidityPeriod from)
        Creates a new object of this type, cloning the values of common fields from the given object of any subclass of the same base type.
        Parameters:
        from - the object from which to copy
        Returns:
        ValidityPeriod
      • getFieldAccessors

        public static FieldAccessor[] getFieldAccessors()
        Gets a new array of the accessors for fields of this type.
        Returns:
        FieldAccessor[]
      • getFieldsMap

        public Map<String,​Object> getFieldsMap​(boolean withAbsents)
        Gets a Map from :discriminant-name to field-value. If choice is not set, returns a Map from : to AbstractFieldsObject.FIELD_UNINITIALISED. For a field of primitive type, the field-value is boxed. For a field of String type, the encoded form is used if the String cannot be decoded. For a type that represents an OCTET STRING that cannot be decoded, a map from "encodedValue:" to the byte array value is returned.
        Specified by:
        getFieldsMap in class AbstractFieldsObject
        Parameters:
        withAbsents - the value of this parameter is ignored
        Returns:
        Map from :discriminant-name to field-value
      • encodedIsInvalid

        protected boolean encodedIsInvalid()
        Determines whether the encoded form is invalid.
        Returns:
        boolean
      • getEncodedForm

        public byte[] getEncodedForm()
                              throws EncodeException
        Gets the encoded form.
        Returns:
        encoded form
        Throws:
        EncodeException - if encoding fails
      • getContainedLength

        public static int getContainedLength​(byte[] data,
                                             int start,
                                             int len)
        Determines the length of the encoded value that commences at offset start in the given data. The value is not fully decoded and might not be decodable. If the encoded value ends with a filling field, then the given len is returned. If the encoded value is so currupt that its length cannot be determined, then 0 is returned.
        Parameters:
        data - network-encoded data
        start - index into data where value commences
        len - length in data to be considered
        Returns:
        length of encoded value, or 0 if not decodable
        Throws:
        NullPointerException - if data is null