public final class SMSAddress extends AbstractLazyEncodedByteArray implements FastSerializable
The API offered by this class is as if the type were specified in ASN.1 as follows.
SMSAddress ::= SEQUENCE { nature Nature, numberingPlan NumberingPlan, address DigitOrCharString }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.1.2.5 pp47-49 | ||||||||
---|---|---|---|---|---|---|---|---|
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
Octet 0 | Address length | |||||||
Octet 1 | 1 | Nature of address | Numbering plan | |||||
Octet 2.. | Address value |
If the address is encoded using BCD,
then 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.
Unless overridden by a particular StringCodec
,
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 |
SMSAddress.Nature
Nature of Address indicator constants.
|
static class |
SMSAddress.NumberingPlan
Enumeration of Numbering Plan indicator constants.
|
Modifier and Type | Field and Description |
---|---|
static BCDStringCodec<SMSAddress> |
ADDRESS_CODEC_BCD
BCD string codec for field Address.
|
static GSM7PACKEDStringCodec<SMSAddress> |
ADDRESS_CODEC_GSM7PACKED
GSM7PACKED string codec for field Address.
|
isDecoded
encoded
FIELD_ABSENT, FIELD_UNINITIALISED
Constructor and Description |
---|
SMSAddress()
Constructs a new SMSAddress object with no fields set.
|
SMSAddress(byte[] data)
Constructs a new SMSAddress object from network-encoded data.
|
SMSAddress(byte[] data,
int start,
int len)
Constructs a new SMSAddress object from part of network-encoded data.
|
SMSAddress(DataInput in)
Constructs a new SMSAddress object from data deserialized from a stream that was written by
toStream(DataOutput) . |
SMSAddress(SMSAddress.Nature nature,
SMSAddress.NumberingPlan numberingPlan,
String address)
Constructs a new SMSAddress object from given values for all fields.
|
SMSAddress(SMSAddress.Nature nature,
SMSAddress.NumberingPlan numberingPlan,
String address,
StringCodec<SMSAddress> Address_codec)
Constructs a new SMSAddress object from given arguments,
using the given codecs for encoding fields of type String.
|
Modifier and Type | Method and Description |
---|---|
void |
checkFieldsSet()
Checks that all mandatory fields are present.
|
SMSAddress |
clone()
Constructs a copy of this object and everything reachable from it.
|
static SMSAddress |
copyOf(SMSAddress 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.
|
protected void |
encode()
Computes the encoded form from the decoded form.
|
protected boolean |
encodedIsInvalid()
Determines whether the encoded form is invalid.
|
String |
getAddress()
Gets the value of the address.
|
String |
getAddress(StringCodec<SMSAddress> codec)
Gets the value of the address using the given codec.
|
StringCodec<SMSAddress> |
getAddressCodec()
Gets the codec used for field Address.
|
EncodedStringWithIndicators |
getAddressEncoded()
Gets a clone of the encoded value of the address.
|
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.
|
SMSAddress.Nature |
getNature()
Gets the value of the nature of address indicator.
|
SMSAddress.NumberingPlan |
getNumberingPlan()
Gets the value of the numbering plan indicator.
|
boolean |
hasAddress()
Tests whether the field Address has a value.
|
boolean |
hasNature()
Tests whether the field Nature has a value.
|
boolean |
hasNumberingPlan()
Tests whether the field NumberingPlan has a value.
|
SMSAddress |
setAddress(String value)
Sets the value of the address.
|
SMSAddress |
setAddress(String value,
StringCodec<SMSAddress> codec)
Sets the value of the address using the given codec.
|
SMSAddress |
setAddressEncoded(EncodedStringWithIndicators encoded)
Sets the encoded value of the address to a clone of the given EncodedStringIndicators.
|
SMSAddress |
setNature(SMSAddress.Nature value)
Sets the value of the nature of address indicator.
|
SMSAddress |
setNumberingPlan(SMSAddress.NumberingPlan value)
Sets the value of the numbering plan indicator.
|
void |
toStream(DataOutput out)
Serializes this object to a stream in a form suitable for reading by
SMSAddress(DataInput) . |
checkDecode, checkModifyAndDecode
equals, hashCode, toString
checkModify, isReadOnly, setReadOnly
public static final BCDStringCodec<SMSAddress> ADDRESS_CODEC_BCD
public static final GSM7PACKEDStringCodec<SMSAddress> ADDRESS_CODEC_GSM7PACKED
public SMSAddress()
public SMSAddress(byte[] data)
data
- network-encoded dataNullPointerException
- if data is nullpublic SMSAddress(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 SMSAddress(SMSAddress.Nature nature, SMSAddress.NumberingPlan numberingPlan, String address)
nature
- the nature of address indicatornumberingPlan
- the numbering plan indicatoraddress
- the addresspublic SMSAddress(SMSAddress.Nature nature, SMSAddress.NumberingPlan numberingPlan, String address, StringCodec<SMSAddress> Address_codec)
nature
- the nature of address indicatornumberingPlan
- the numbering plan indicatoraddress
- the addressAddress_codec
- StringCodec for addresspublic SMSAddress(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 void toStream(DataOutput out) throws IOException
SMSAddress(DataInput)
.toStream
in interface FastSerializable
out
- the stream to write toIOException
- if an I/O error occurspublic boolean hasNature() 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 SMSAddress.Nature getNature() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic SMSAddress.NumberingPlan getNumberingPlan() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic String getAddress() throws DecodeException
getAddress(null)
.DecodeException
- if encoded state cannot be decodedpublic SMSAddress setNature(SMSAddress.Nature value) throws IllegalStateException
value
- Nature representation of the nature of address indicatorIllegalStateException
public SMSAddress setNumberingPlan(SMSAddress.NumberingPlan value) throws IllegalStateException
value
- NumberingPlan representation of the numbering plan indicatorIllegalStateException
public SMSAddress setAddress(String value) throws IllegalStateException
value
- String representation of the addressIllegalStateException
public String getAddress(StringCodec<SMSAddress> codec) throws DecodeException
codec
- StringCodec to use for decodingDecodeException
- if encoded state cannot be decodedpublic EncodedStringWithIndicators getAddressEncoded()
public SMSAddress setAddress(String value, StringCodec<SMSAddress> codec) throws IllegalArgumentException
value
- String representation of the addresscodec
- StringCodec to use for encodingIllegalArgumentException
public SMSAddress setAddressEncoded(EncodedStringWithIndicators encoded)
encoded
- EncodedStringWithIndicators representation of the addresspublic static SMSAddress copyOf(SMSAddress from)
from
- the object from which to copypublic SMSAddress 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.
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.data
- network-encoded datastart
- index into data where value commenceslen
- length in data to be consideredNullPointerException
- if data is nullpublic StringCodec<SMSAddress> getAddressCodec()
protected void encode() throws EncodeException
encode
in class AbstractLazyEncodedDataObject<byte[]>
EncodeException
- if address cannot be encodedprotected void decode() throws DecodeException
decode
in class AbstractLazyEncodedDataObject<byte[]>
DecodeException
- if less than 2 octets to be decoded, or encoded address length requires more octets than are to be decoded