Class CellGlobalId

  • All Implemented Interfaces:
    DataObject, FastSerializable, Serializable

    public final class CellGlobalId
    extends AbstractLazyEncodedByteArray
    implements FastSerializable
    Class CellGlobalId represents the global address of a cell's location. It represents the ASN.1 OCTET STRING type MAP-CommonDataTypes.CellGlobalIdOrServiceAreaIdFixedLength.

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

     CellGlobalId ::= SEQUENCE {
         mobileCountryCode DigitString,
         mobileNetworkCode DigitString,
         locationAreaCode  INTEGER,
         cellId            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 23-003 V10.0.0 (2010-12) §4.3.1 p23
    87654321
    Octet 0Mobile country code digit 2Mobile country code digit 1
    Octet 1Mobile network code digit 3 if exists, else 1111Mobile country code digit 3
    Octet 2Mobile network code digit 2Mobile network code digit 1
    Octet 3Location area code MSB
    Octet 4Location area code LSB
    Octet 5Cell Id MSB
    Octet 6Cell Id LSB

    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<CellGlobalId> MOBILECOUNTRYCODE_CODEC
        BCD string codec for field MobileCountryCode.
      • MOBILENETWORKCODE_CODEC

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

      • CellGlobalId

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

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

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

        public CellGlobalId​(String mobileCountryCode,
                            String mobileNetworkCode,
                            int locationAreaCode,
                            int cellId)
        Constructs a new CellGlobalId 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)
        cellId - the cell identification (CI)
      • CellGlobalId

        public CellGlobalId​(String mobileCountryCode,
                            String mobileNetworkCode,
                            int locationAreaCode,
                            int cellId,
                            StringCodec<CellGlobalId> MobileCountryCode_codec,
                            StringCodec<CellGlobalId> MobileNetworkCode_codec)
        Constructs a new CellGlobalId 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)
        cellId - the cell identification (CI)
        MobileCountryCode_codec - StringCodec for mobileCountryCode
        MobileNetworkCode_codec - StringCodec for mobileNetworkCode
      • CellGlobalId

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

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

        public CellGlobalId setCellIdPresent​(boolean flag)
                                      throws IllegalStateException
        Sets the presence or absence of the field CellId.
        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
      • getCellId

        public int getCellId()
                      throws DecodeException
        Gets the value of the cell identification (CI).
        Returns:
        int representation of the cell identification (CI)
        Throws:
        DecodeException - if encoded state cannot be decoded
      • setLocationAreaCode

        public CellGlobalId setLocationAreaCode​(int value)
                                         throws IllegalStateException
        Sets the value of the location area code (LAC).
        Parameters:
        value - int representation of the location area code (LAC)
        Returns:
        this
        Throws:
        IllegalStateException
      • getMobileCountryCode

        public String getMobileCountryCode​(StringCodec<CellGlobalId> 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 CellGlobalId 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<CellGlobalId> 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 CellGlobalId 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 CellGlobalId copyOf​(CellGlobalId 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:
        CellGlobalId
      • 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
      • getMobileCountryCodeCodec

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

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

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