public final class CalledPartyBCDNumber extends AbstractLazyEncodedByteArray implements FastSerializable
The API offered by this class is as if the type were specified in ASN.1 as follows.
CalledPartyBCDNumber ::= SEQUENCE { sMSAddress NULL OPTIONAL, numberType NumberType OPTIONAL, sMSNumberType SMSNumberType OPTIONAL, numberingPlan NumberingPlan, address DigitString }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 V4.17.0 (2007-09) §10.5.4.7 p363 and 3GPP TS 23.040 V9.0.0 (2009-06) §9.1.2.5 p48 | ||||||||
---|---|---|---|---|---|---|---|---|
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
Octet 3 | 1 ext | Type of number | Numbering plan identification | |||||
Octet 3+1 | Address digit 2 | Address digit 1 | ||||||
... | ... | ... | ||||||
Octet 3+n | Filler (1111) or Address digit 2n | Address digit 2n-1 |
Field sMSAddress, when present, indicates that an alphanumeric encoding of address is permitted: it determines whether numberType or sMSNumberType is in the encoded form - either one or the other - it doesn't prevent values being set for the other, and both fields participate in the Map returned by getFieldsMap(), hence equals(), hashCode() and toString() are affected by both.
If sMSAddress is present and sMSNumberType is ALPHANUMERIC,
then address is encoded using the GSM7PACKED codec.
Otherwise, unless overridden by a particular StringCodec
,
each digit of the address field is encoded into a semi-octet,
and if there is an odd number of digits then the last semi-octet is assigned a filler.
The filler is 0xF and the encoding to semi-octets is as tabulated below.
Decoded character | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | * | # | a | b | c | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Encoded hexadecimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
Modifier and Type | Class and Description |
---|---|
static class |
CalledPartyBCDNumber.NumberingPlan
Enumeration of numbering plan indicator constants.
|
static class |
CalledPartyBCDNumber.NumberType
Enumeration of type-of-number indicator constants.
|
static class |
CalledPartyBCDNumber.SMSNumberType
Enumeration of type-of-number indicator constants including alphanumeric.
|
Modifier and Type | Field and Description |
---|---|
static BCDStringCodec<CalledPartyBCDNumber> |
ADDRESS_CODEC_BCD
BCD string codec for field Address.
|
static GSM7PACKEDStringCodec<CalledPartyBCDNumber> |
ADDRESS_CODEC_GSM7PACKED
GSM7PACKED string codec for field Address.
|
isDecoded
encoded
FIELD_ABSENT, FIELD_UNINITIALISED
Constructor and Description |
---|
CalledPartyBCDNumber()
Constructs a new CalledPartyBCDNumber object with no fields set.
|
CalledPartyBCDNumber(byte[] data)
Constructs a new CalledPartyBCDNumber object from network-encoded data.
|
CalledPartyBCDNumber(byte[] data,
int start,
int len)
Constructs a new CalledPartyBCDNumber object from part of network-encoded data.
|
CalledPartyBCDNumber(CalledPartyBCDNumber.NumberType numberType,
CalledPartyBCDNumber.NumberingPlan numberingPlan,
String address)
Constructs a new CalledPartyBCDNumber object from given values for all fields.
|
CalledPartyBCDNumber(CalledPartyBCDNumber.NumberType numberType,
CalledPartyBCDNumber.NumberingPlan numberingPlan,
String address,
StringCodec<CalledPartyBCDNumber> Address_codec)
Constructs a new CalledPartyBCDNumber object from given arguments,
using the given codecs for encoding fields of type String.
|
CalledPartyBCDNumber(DataInput in)
Constructs a new CalledPartyBCDNumber object from data deserialized from a stream that was written by
toStream(DataOutput) . |
Modifier and Type | Method and Description |
---|---|
void |
checkFieldsSet()
Checks that all mandatory fields are present.
|
CalledPartyBCDNumber |
clone()
Constructs a copy of this object and everything reachable from it.
|
static CalledPartyBCDNumber |
copyOf(CalledPartyBCDNumber 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.
|
protected void |
decode()
Computes the decoded form from the encoded form.
|
static CalledPartyBCDNumber |
decodeSMSAddress(byte[] message)
Constructs a new CalledPartyBCDNumber for an SMS adress from the given data.
|
static CalledPartyBCDNumber |
decodeSMSAddress(byte[] message,
int start,
int len)
Constructs a new CalledPartyBCDNumber for an SMS address from the given data.
|
protected void |
encode()
Computes the encoded form from the decoded form.
|
protected boolean |
encodedIsInvalid()
Determines whether the encoded form is invalid.
|
static byte[] |
encodeSMSAddress(CalledPartyBCDNumber calledPartyBCDNumber)
Encodes the given CalledPartyBCDNumber for an SMS address.
|
String |
getAddress()
Gets the value of the number digits.
|
String |
getAddress(StringCodec<CalledPartyBCDNumber> codec)
Gets the value of the number digits using the given codec.
|
StringCodec<CalledPartyBCDNumber> |
getAddressCodec()
Gets the codec used for field Address.
|
byte[] |
getAddressEncoded()
Gets a clone of the encoded value of the number digits.
|
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 . |
byte[] |
getEncodedForm()
Gets the encoded form.
|
static FieldAccessor[] |
getFieldAccessors()
Gets a new array of the accessors for fields of this type.
|
Map<String,Object> |
getFieldsMap(boolean withAbsents)
Gets a Map from field-name to field-value for the fields of a sequence.
|
CalledPartyBCDNumber.NumberingPlan |
getNumberingPlan()
Gets the value of the numbering plan identification.
|
CalledPartyBCDNumber.NumberType |
getNumberType()
Gets the value of the type of number.
|
CalledPartyBCDNumber.SMSNumberType |
getSMSNumberType()
Gets the value of the type of SMS number.
|
boolean |
hasAddress()
Tests whether the field Address has a value.
|
boolean |
hasNumberingPlan()
Tests whether the field NumberingPlan has a value.
|
boolean |
hasNumberType()
Tests whether the field NumberType has a value.
|
boolean |
hasSMSAddress()
Tests whether the field SMSAddress has a value.
|
boolean |
hasSMSNumberType()
Tests whether the field SMSNumberType has a value.
|
static CalledPartyBCDNumber |
newInstanceSMSAddress()
Factory method that creates an instance for representing an SMS address.
|
CalledPartyBCDNumber |
setAddress(String value)
Sets the value of the number digits.
|
CalledPartyBCDNumber |
setAddress(String value,
StringCodec<CalledPartyBCDNumber> codec)
Sets the value of the number digits using the given codec.
|
CalledPartyBCDNumber |
setAddressEncoded(byte[] encoded)
Sets the encoded value of the number digits to a clone of the given byte array.
|
CalledPartyBCDNumber |
setNumberingPlan(CalledPartyBCDNumber.NumberingPlan value)
Sets the value of the numbering plan identification.
|
CalledPartyBCDNumber |
setNumberType(CalledPartyBCDNumber.NumberType value)
Sets the value of the type of number.
|
CalledPartyBCDNumber |
setSMSAddressPresent(boolean flag)
Sets the presence or absence of the field SMSAddress.
|
CalledPartyBCDNumber |
setSMSNumberType(CalledPartyBCDNumber.SMSNumberType value)
Sets the value of the type of SMS number.
|
void |
toStream(DataOutput out)
Serializes this object to a stream in a form suitable for reading by
CalledPartyBCDNumber(DataInput) . |
checkDecode, checkModifyAndDecode
equals, hashCode, toString
checkModify, isReadOnly, setReadOnly
public static final BCDStringCodec<CalledPartyBCDNumber> ADDRESS_CODEC_BCD
public static final GSM7PACKEDStringCodec<CalledPartyBCDNumber> ADDRESS_CODEC_GSM7PACKED
public CalledPartyBCDNumber()
public CalledPartyBCDNumber(byte[] data)
data
- network-encoded dataNullPointerException
- if data is nullpublic CalledPartyBCDNumber(byte[] data, int start, int len)
start
and is len
bytes long.
The data is not decoded and might not be decodable.data
- network-encoded datastart
- starting offset of network-encoded data in byte arraylen
- default length if not predictableNullPointerException
- if data is nullIllegalArgumentException
- if len is negativepublic CalledPartyBCDNumber(DataInput in) throws IOException
toStream(DataOutput)
.in
- the stream to read fromEOFException
- if reading is pre-empted by end-of-fileIOException
- if the data cannot be readpublic CalledPartyBCDNumber(CalledPartyBCDNumber.NumberType numberType, CalledPartyBCDNumber.NumberingPlan numberingPlan, String address)
numberType
- the type of numbernumberingPlan
- the numbering plan identificationaddress
- the number digitspublic CalledPartyBCDNumber(CalledPartyBCDNumber.NumberType numberType, CalledPartyBCDNumber.NumberingPlan numberingPlan, String address, StringCodec<CalledPartyBCDNumber> Address_codec)
numberType
- the type of numbernumberingPlan
- the numbering plan identificationaddress
- the number digitsAddress_codec
- StringCodec for addresspublic void toStream(DataOutput out) throws IOException
CalledPartyBCDNumber(DataInput)
.toStream
in interface FastSerializable
out
- the stream to write toIOException
- if an I/O error occurspublic boolean hasSMSAddress() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic CalledPartyBCDNumber setSMSAddressPresent(boolean flag) throws IllegalStateException
flag
- whether the field should be marked as presentIllegalStateException
- if this instance has been marked as read-onlypublic boolean hasNumberType() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasSMSNumberType() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasNumberingPlan() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasAddress() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic void checkFieldsSet() throws EncodeException
checkFieldsSet
in class AbstractLazyEncodedDataObject<byte[]>
EncodeException
- if any mandatory field is not presentpublic CalledPartyBCDNumber.NumberType getNumberType() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic CalledPartyBCDNumber.SMSNumberType getSMSNumberType() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic CalledPartyBCDNumber.NumberingPlan getNumberingPlan() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic String getAddress() throws DecodeException
getAddress(null)
.DecodeException
- if encoded state cannot be decodedpublic CalledPartyBCDNumber setNumberType(CalledPartyBCDNumber.NumberType value) throws IllegalStateException
value
- NumberType representation of the type of numberIllegalStateException
public CalledPartyBCDNumber setSMSNumberType(CalledPartyBCDNumber.SMSNumberType value) throws IllegalStateException
value
- SMSNumberType representation of the type of SMS numberIllegalStateException
public CalledPartyBCDNumber setNumberingPlan(CalledPartyBCDNumber.NumberingPlan value) throws IllegalStateException
value
- NumberingPlan representation of the numbering plan identificationIllegalStateException
public CalledPartyBCDNumber setAddress(String value) throws IllegalStateException
value
- String representation of the number digitsIllegalStateException
public String getAddress(StringCodec<CalledPartyBCDNumber> codec) throws DecodeException
codec
- StringCodec to use for decodingDecodeException
- if encoded state cannot be decodedpublic byte[] getAddressEncoded()
public CalledPartyBCDNumber setAddress(String value, StringCodec<CalledPartyBCDNumber> codec) throws IllegalArgumentException
value
- String representation of the number digitscodec
- StringCodec to use for encodingIllegalArgumentException
public CalledPartyBCDNumber setAddressEncoded(byte[] encoded)
encoded
- byte[] representation of the number digitspublic static CalledPartyBCDNumber copyOf(CalledPartyBCDNumber from)
from
- the object from which to copypublic CalledPartyBCDNumber clone()
clone
in interface DataObject
clone
in class AbstractDataObject
public static FieldAccessor[] getFieldAccessors()
public Map<String,Object> getFieldsMap(boolean withAbsents)
getFieldsMap
in class AbstractFieldsObject
withAbsents
- whether to put absent optional fields into Mapprotected boolean encodedIsInvalid()
public byte[] getEncodedForm() throws EncodeException
EncodeException
- if encoding failspublic static int getContainedLength(byte[] data, int start, int len)
start
in the given data
.
The value is not fully decoded and might not be decodable.
Values of this type are of variable length, so the given length
is returned if the data is long enough, otherwise 0 is returned.data
- network-encoded datastart
- index into data where value commenceslen
- length in data to be consideredprotected void encode()
encode
in class AbstractLazyEncodedDataObject<byte[]>
protected void decode() throws DecodeException
decode
in class AbstractLazyEncodedDataObject<byte[]>
DecodeException
- if less than one octet to be decodedpublic static CalledPartyBCDNumber newInstanceSMSAddress()
public static CalledPartyBCDNumber decodeSMSAddress(byte[] message, int start, int len)
message
- a bytearray containing the encoded datastart
- the offset within 'message' to begin decodinglen
- the number of valid bytes after 'offset' to decode (must be at least 1)NullPointerException
- if message is nullArrayIndexOutOfBoundsException
- if start or len are out of rangepublic static CalledPartyBCDNumber decodeSMSAddress(byte[] message)
decodeSMSAddress(message, 0, message.length)
message
- a bytearray containing the encoded dataNullPointerException
- if message is nullpublic static byte[] encodeSMSAddress(CalledPartyBCDNumber calledPartyBCDNumber) throws EncodeException
calledPartyBCDNumber
- the pdu to encodeEncodeException
- if calledPartyBCDNumber is not an SMS addresspublic StringCodec<CalledPartyBCDNumber> getAddressCodec()