Class SMSSubmit.ValidityPeriod.EnhancedValidityPeriod

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

    public static final class SMSSubmit.ValidityPeriod.EnhancedValidityPeriod
    extends AbstractLazyEncodedByteArray
    Representation of an EnhancedValidityPeriod. Contains data to be incorporated into a SMSSubmit.ValidityPeriod; 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.

     EnhancedValidityPeriod ::= SEQUENCE {
         singleShotSM     BOOLEAN,
         enhancedDuration EnhancedDuration
     }
    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.3 pp68-69
    76543210
    1 octetextSingle shot SM?Reserved (0)Enhanced validity period format discriminates...
    Either1 octetLength
    5 octetsSpare (0)
    or1 octetSeconds
    5 octetsSpare (0)
    or1 octetHours unitsHours tens
    1 octetMinutes unitsMinutes tens
    1 octetSeconds unitsSeconds tens
    3 octetsSpare (0)

    The Enhanced Validity Period Format is a discriminant for how the following octets are decoded. This discriminant and the alternatives are encoded from and decoded to a value of a separate CHOICE-like nested type called EnhancedDuration.
    See Also:
    Serialized Form
    • Constructor Detail

      • EnhancedValidityPeriod

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

        public EnhancedValidityPeriod​(byte[] data)
        Constructs a new EnhancedValidityPeriod 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
      • EnhancedValidityPeriod

        public EnhancedValidityPeriod​(byte[] data,
                                      int start,
                                      int len)
        Constructs a new EnhancedValidityPeriod 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
      • EnhancedValidityPeriod

        public EnhancedValidityPeriod​(boolean singleShotSM,
                                      SMSSubmit.ValidityPeriod.EnhancedValidityPeriod.EnhancedDuration enhancedDuration)
        Constructs a new EnhancedValidityPeriod object from given values for all fields.
        Parameters:
        singleShotSM - whether the SC is required to make up to one delivery attempt
        enhancedDuration - the enhanced duration
      • EnhancedValidityPeriod

        public EnhancedValidityPeriod​(DataInput in)
                               throws IOException
        Constructs a new EnhancedValidityPeriod 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
      • EnhancedValidityPeriod

        public EnhancedValidityPeriod​(boolean singleShotSM)
        Constructs a new EnhancedValidityPeriod object from the given arguments.
        Parameters:
        singleShotSM - whether to make up to one delivery attempt
    • 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.EnhancedValidityPeriod(DataInput)}.
        Parameters:
        out - the stream to write to
        Throws:
        IOException - if an I/O error occurs
      • hasSingleShotSM

        public boolean hasSingleShotSM()
                                throws DecodeException
        Tests whether the field SingleShotSM has a value.
        Returns:
        whether the field has a value
        Throws:
        DecodeException - if encoded state cannot be decoded
      • hasEnhancedDuration

        public boolean hasEnhancedDuration()
                                    throws DecodeException
        Tests whether the field EnhancedDuration has a value.
        Returns:
        whether the field has a value
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getSingleShotSM

        public boolean getSingleShotSM()
                                throws DecodeException
        Gets the value of whether the SC is required to make up to one delivery attempt.
        Returns:
        boolean representation of whether the SC is required to make up to one delivery attempt
        Throws:
        DecodeException - if encoded state cannot be decoded
      • 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 field-name to field-value for the fields of a sequence. For a field of primitive type, the field-value is boxed. For an absent optional field, the field-value is AbstractFieldsObject.FIELD_ABSENT. For an uninitialised mandatory field, the field-value is AbstractFieldsObject.FIELD_UNINITIALISED. 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 - whether to put absent optional fields into Map
        Returns:
        Map from field-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. Values of this type are of a fixed length, so that length is returned if the data is long enough, otherwise 0 is returned.
        Parameters:
        data - network-encoded data
        start - index into data where value commences
        len - length in data to be considered
        Returns:
        7, or 0 if encoded value is not long enough