Class LocationAreaId

  • All Implemented Interfaces:
    DataObject, FastSerializable, Serializable

    public final class LocationAreaId
    extends AbstractLazyEncodedByteArray
    implements FastSerializable
    Class LocationAreaId represents an unambiguous identification of a location area within the area covered by the GPRS system. It represents the ASN.1 OCTET STRING type MAP-CommonDataTypes.LAIFixedLength.

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

     LocationAreaId ::= SEQUENCE {
         mobileCountryCode DigitString,
         mobileNetworkCode DigitString,
         locationAreaCode  INTEGER
     }
    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 24.008 V10.1.0 (2010-12) §10.5.1.3 p383
    87654321
    Octet 2Mobile country code digit 2Mobile country code digit 1
    Octet 3Mobile network code digit 3 if exists, else 1111Mobile country code digit 3
    Octet 4Mobile network code digit 2Mobile network code digit 1
    Octet 5Location area code MSB
    Octet 6Location area code LSB

    The octet numbering in the above table is that used in the cited standard for the octets encoded here.

    Each digit of the Mobile Country Code (MCC) and Mobile Network Code (MNC) fields is encoded into a semi-octet. The length of the Mobile Network Code (MNC) depends on the Mobile Country Code (MCC). If the MNC has only 2 digits, then the filler (1111) value is used where the 3rd digit would have been encoded. Unless overridden by a particular StringCodec, the encoding to semi-octets is as tabulated below.

    Decoded character0123456789
    Encoded hexadecimal0123456789ABCDEF
    See Also:
    Serialized Form
    • Field Detail

      • MOBILECOUNTRYCODE_CODEC

        public static final BCDStringCodec<LocationAreaId> MOBILECOUNTRYCODE_CODEC
        BCD string codec for field MobileCountryCode.
      • MOBILENETWORKCODE_CODEC

        public static final BCDStringCodec<LocationAreaId> MOBILENETWORKCODE_CODEC
        BCD string codec for field MobileNetworkCode.
    • Constructor Detail

      • LocationAreaId

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

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

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

        public LocationAreaId​(String mobileCountryCode,
                              String mobileNetworkCode,
                              int locationAreaCode)
        Constructs a new LocationAreaId object from given values for all fields.
        Parameters:
        mobileCountryCode - the mobile country code (MCC)
        mobileNetworkCode - the mobile network code (MNC)
        locationAreaCode - the location area code (LAC)
      • LocationAreaId

        public LocationAreaId​(String mobileCountryCode,
                              String mobileNetworkCode,
                              int locationAreaCode,
                              StringCodec<LocationAreaId> MobileCountryCode_codec,
                              StringCodec<LocationAreaId> MobileNetworkCode_codec)
        Constructs a new LocationAreaId object from given arguments, using the given codecs for encoding fields of type String.
        Parameters:
        mobileCountryCode - the mobile country code (MCC)
        mobileNetworkCode - the mobile network code (MNC)
        locationAreaCode - the location area code (LAC)
        MobileCountryCode_codec - StringCodec for mobileCountryCode
        MobileNetworkCode_codec - StringCodec for mobileNetworkCode
      • LocationAreaId

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

      • hasMobileCountryCode

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

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

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

        public LocationAreaId setLocationAreaCodePresent​(boolean flag)
                                                  throws IllegalStateException
        Sets the presence or absence of the field LocationAreaCode.
        Parameters:
        flag - whether the field should be marked as present
        Returns:
        this
        Throws:
        IllegalStateException - if this instance has been marked as read-only
      • getLocationAreaCode

        public int getLocationAreaCode()
                                throws DecodeException
        Gets the value of the location area code (LAC).
        Returns:
        int representation of the location area code (LAC)
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getMobileCountryCode

        public String getMobileCountryCode​(StringCodec<LocationAreaId> codec)
                                    throws DecodeException
        Gets the value of the mobile country code (MCC) using the given codec. If the field MobileCountryCode is not set, returns null. If the given codec is null, then uses the standard codec for this field.
        Parameters:
        codec - StringCodec to use for decoding
        Returns:
        String representation of the mobile country code (MCC)
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getMobileCountryCodeEncoded

        public byte[] getMobileCountryCodeEncoded()
        Gets a clone of the encoded value of the mobile country code (MCC).
        Returns:
        byte[] representation of the mobile country code (MCC)
      • setMobileCountryCodeEncoded

        public LocationAreaId setMobileCountryCodeEncoded​(byte[] encoded)
        Sets the encoded value of the mobile country code (MCC) to a clone of the given byte array.
        Parameters:
        encoded - byte[] representation of the mobile country code (MCC)
        Returns:
        this
      • getMobileNetworkCode

        public String getMobileNetworkCode​(StringCodec<LocationAreaId> codec)
                                    throws DecodeException
        Gets the value of the mobile network code (MNC) using the given codec. If the field MobileNetworkCode is not set, returns null. If the given codec is null, then uses the standard codec for this field.
        Parameters:
        codec - StringCodec to use for decoding
        Returns:
        String representation of the mobile network code (MNC)
        Throws:
        DecodeException - if encoded state cannot be decoded
      • getMobileNetworkCodeEncoded

        public byte[] getMobileNetworkCodeEncoded()
        Gets a clone of the encoded value of the mobile network code (MNC).
        Returns:
        byte[] representation of the mobile network code (MNC)
      • setMobileNetworkCodeEncoded

        public LocationAreaId setMobileNetworkCodeEncoded​(byte[] encoded)
        Sets the encoded value of the mobile network code (MNC) to a clone of the given byte array.
        Parameters:
        encoded - byte[] representation of the mobile network code (MNC)
        Returns:
        this
      • copyOf

        public static LocationAreaId copyOf​(LocationAreaId 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:
        LocationAreaId
      • 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:
        5, or 0 if encoded value is not long enough
      • getMobileCountryCodeCodec

        public StringCodec<LocationAreaId> getMobileCountryCodeCodec()
        Gets the codec used for field MobileCountryCode.
        Returns:
        StringCodec
      • getMobileNetworkCodeCodec

        public StringCodec<LocationAreaId> getMobileNetworkCodeCodec()
        Gets the codec used for field MobileNetworkCode.
        Returns:
        StringCodec
      • encode

        protected void encode()
                       throws EncodeException
        Computes the encoded form from the decoded form. throws EncodeException if MobileCountryCode is not 3 digits, or MobileNetworkCode is not 2 or 3 digits, or LocationAreaCode is not in range [0,65535]
        Specified by:
        encode in class AbstractLazyEncodedDataObject<byte[]>
        Throws:
        EncodeException - if encoding fails