public final class NSAPAddress extends AbstractLazyEncodedByteArray implements FastSerializable
The API offered by this class is as if the type were specified in ASN.1 as follows.
NSAPAddress ::= SEQUENCE { authorityAndFormatId DigitString (SIZE (2)) (FROM ("0" .. "9", "A" .. "F", "a" .. "f")), initialDomainId DigitString (SIZE (0 .. 15)) (FROM ("0" .. "9")), domainSpecificPart DigitOrCharString (SIZE (0 .. 38)) }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. For the initial domain identifier and decimal format domain specific part, digit encoding and decoding may be overridden by using suitable
StringCodec
s.
Data Encoding - based on ITU X.213 / ISO/IEC 8348:2002(E) Annex A | ||||||||
---|---|---|---|---|---|---|---|---|
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
1 octet | Authority and format identifier (AFI) digit 2 | Authority and format identifier (AFI) digit 1 | ||||||
m octets | Padded initial domain identifier (IDI) digits in semi-octets | |||||||
≤20-1-m octets | Domain specific part (DSP) in binary, decimal, character or national character format |
IDIs' maximum length of 15 octets (30 digits) is regardless of particular AFI. The maximum length of an NSAPAddress is 20 octets. The maximum length of the DSP is the space remaining when the lengths of the other fields are subtracted from the overall maximum.
The properties determined by an AFI are recorded by AuthorityAndFormatIds
.
Each digit of the AFI field is encoded into a semi-octet.
Unless overridden by a particular StringCodec
,
the encoding to semi-octets is as tabulated below.
Decoded character | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Encoded hexadecimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
Each digit of the IDI field is encoded into a semi-octet.
Unless overridden by a particular StringCodec
,
the encoding to semi-octets is as tabulated below.
Decoded character | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Encoded hexadecimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
If the DSP field is encoded using BCD,
then each digit of the DSP 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 | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Encoded hexadecimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
Modifier and Type | Field and Description |
---|---|
static BCDStringCodec<NSAPAddress> |
AUTHORITYANDFORMATID_CODEC
BCD string codec for field AuthorityAndFormatId.
|
static BCDStringCodec<NSAPAddress> |
DOMAINSPECIFICPART_CODEC_BCD
BCD string codec for field DomainSpecificPart.
|
static BinaryStringCodec<NSAPAddress> |
DOMAINSPECIFICPART_CODEC_BINARY
Binary string codec for field DomainSpecificPart.
|
static ISO646BCDStringCodec<NSAPAddress> |
DOMAINSPECIFICPART_CODEC_ISO646BCD
Printable ASCII/ISO646-US string codec for field DomainSpecificPart.
|
static BCDStringCodec<NSAPAddress> |
INITIALDOMAINID_CODEC
BCD string codec for field InitialDomainId.
|
isDecoded
encoded
FIELD_ABSENT, FIELD_UNINITIALISED
Constructor and Description |
---|
NSAPAddress()
Constructs a new NSAPAddress object with no fields set.
|
NSAPAddress(byte[] data)
Constructs a new NSAPAddress object from network-encoded data.
|
NSAPAddress(byte[] data,
int start,
int len)
Constructs a new NSAPAddress object from part of network-encoded data.
|
NSAPAddress(DataInput in)
Constructs a new NSAPAddress object from data deserialized from a stream that was written by
toStream(DataOutput) . |
NSAPAddress(String authorityAndFormatId,
String initialDomainId,
String domainSpecificPart)
Constructs a new NSAPAddress object from given values for all fields.
|
NSAPAddress(String authorityAndFormatId,
String initialDomainId,
String domainSpecificPart,
StringCodec<NSAPAddress> AuthorityAndFormatId_codec,
StringCodec<NSAPAddress> InitialDomainId_codec,
StringCodec<NSAPAddress> DomainSpecificPart_codec)
Constructs a new NSAPAddress 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.
|
NSAPAddress |
clone()
Constructs a copy of this object and everything reachable from it.
|
static NSAPAddress |
copyOf(NSAPAddress 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 |
getAuthorityAndFormatId()
Gets the value of Authority and format identifier.
|
String |
getAuthorityAndFormatId(StringCodec<NSAPAddress> codec)
Gets the value of Authority and format identifier using the given codec.
|
StringCodec<NSAPAddress> |
getAuthorityAndFormatIdCodec()
Gets the codec used for field AuthorityAndFormatId.
|
EncodedStringWithIndicators |
getAuthorityAndFormatIdEncoded()
Gets a clone of the encoded value of Authority and format identifier.
|
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 . |
String |
getDomainSpecificPart()
Gets the value of Domain specific part.
|
String |
getDomainSpecificPart(StringCodec<NSAPAddress> codec)
Gets the value of Domain specific part using the given codec.
|
StringCodec<NSAPAddress> |
getDomainSpecificPartCodec()
Gets the codec used for field DomainSpecificPart.
|
byte[] |
getDomainSpecificPartEncoded()
Gets a clone of the encoded value of Domain specific part.
|
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.
|
String |
getInitialDomainId()
Gets the value of Initial domain identifier.
|
String |
getInitialDomainId(StringCodec<NSAPAddress> codec)
Gets the value of Initial domain identifier using the given codec.
|
StringCodec<NSAPAddress> |
getInitialDomainIdCodec()
Gets the codec used for field InitialDomainId.
|
EncodedStringWithIndicators |
getInitialDomainIdEncoded()
Gets a clone of the encoded value of Initial domain identifier.
|
boolean |
hasAuthorityAndFormatId()
Tests whether the field AuthorityAndFormatId has a value.
|
boolean |
hasDomainSpecificPart()
Tests whether the field DomainSpecificPart has a value.
|
boolean |
hasInitialDomainId()
Tests whether the field InitialDomainId has a value.
|
NSAPAddress |
setAuthorityAndFormatId(String value)
Sets the value of Authority and format identifier.
|
NSAPAddress |
setAuthorityAndFormatId(String value,
StringCodec<NSAPAddress> codec)
Sets the value of Authority and format identifier using the given codec.
|
NSAPAddress |
setAuthorityAndFormatIdEncoded(EncodedStringWithIndicators encoded)
Sets the encoded value of Authority and format identifier to a clone of the given EncodedStringIndicators.
|
NSAPAddress |
setDomainSpecificPart(String value)
Sets the value of Domain specific part.
|
NSAPAddress |
setDomainSpecificPart(String value,
StringCodec<NSAPAddress> codec)
Sets the value of Domain specific part using the given codec.
|
NSAPAddress |
setDomainSpecificPartEncoded(byte[] encoded)
Sets the encoded value of Domain specific part to a clone of the given byte array.
|
NSAPAddress |
setInitialDomainId(String value)
Sets the value of Initial domain identifier.
|
NSAPAddress |
setInitialDomainId(String value,
StringCodec<NSAPAddress> codec)
Sets the value of Initial domain identifier using the given codec.
|
NSAPAddress |
setInitialDomainIdEncoded(EncodedStringWithIndicators encoded)
Sets the encoded value of Initial domain identifier to a clone of the given EncodedStringIndicators.
|
String |
toRPF()
Gets this NSAPAddress in Reference Publication Format (RPF).
|
void |
toStream(DataOutput out)
Serializes this object to a stream in a form suitable for reading by
NSAPAddress(DataInput) . |
checkDecode, checkModifyAndDecode
equals, hashCode, toString
checkModify, isReadOnly, setReadOnly
public static final BCDStringCodec<NSAPAddress> AUTHORITYANDFORMATID_CODEC
public static final BCDStringCodec<NSAPAddress> INITIALDOMAINID_CODEC
public static final BCDStringCodec<NSAPAddress> DOMAINSPECIFICPART_CODEC_BCD
public static final BinaryStringCodec<NSAPAddress> DOMAINSPECIFICPART_CODEC_BINARY
public static final ISO646BCDStringCodec<NSAPAddress> DOMAINSPECIFICPART_CODEC_ISO646BCD
public NSAPAddress()
public NSAPAddress(byte[] data)
data
- network-encoded dataNullPointerException
- if data is nullpublic NSAPAddress(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 NSAPAddress(String authorityAndFormatId, String initialDomainId, String domainSpecificPart)
authorityAndFormatId
- Authority and format identifierinitialDomainId
- Initial domain identifierdomainSpecificPart
- Domain specific partpublic NSAPAddress(String authorityAndFormatId, String initialDomainId, String domainSpecificPart, StringCodec<NSAPAddress> AuthorityAndFormatId_codec, StringCodec<NSAPAddress> InitialDomainId_codec, StringCodec<NSAPAddress> DomainSpecificPart_codec)
authorityAndFormatId
- Authority and format identifierinitialDomainId
- Initial domain identifierdomainSpecificPart
- Domain specific partAuthorityAndFormatId_codec
- StringCodec for authorityAndFormatIdInitialDomainId_codec
- StringCodec for initialDomainIdDomainSpecificPart_codec
- StringCodec for domainSpecificPartpublic NSAPAddress(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
NSAPAddress(DataInput)
.toStream
in interface FastSerializable
out
- the stream to write toIOException
- if an I/O error occurspublic boolean hasAuthorityAndFormatId() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasInitialDomainId() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic boolean hasDomainSpecificPart() 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 String getAuthorityAndFormatId() throws DecodeException
getAuthorityAndFormatId(null)
.DecodeException
- if encoded state cannot be decodedpublic String getInitialDomainId() throws DecodeException
getInitialDomainId(null)
.DecodeException
- if encoded state cannot be decodedpublic String getDomainSpecificPart() throws DecodeException
getDomainSpecificPart(null)
.DecodeException
- if encoded state cannot be decodedpublic NSAPAddress setAuthorityAndFormatId(String value) throws IllegalStateException
value
- String representation of Authority and format identifierIllegalStateException
public NSAPAddress setInitialDomainId(String value) throws IllegalStateException
value
- String representation of Initial domain identifierIllegalStateException
public NSAPAddress setDomainSpecificPart(String value) throws IllegalStateException
value
- String representation of Domain specific partIllegalStateException
public String getAuthorityAndFormatId(StringCodec<NSAPAddress> codec) throws DecodeException
codec
- StringCodec to use for decodingDecodeException
- if encoded state cannot be decodedpublic EncodedStringWithIndicators getAuthorityAndFormatIdEncoded()
public NSAPAddress setAuthorityAndFormatId(String value, StringCodec<NSAPAddress> codec) throws IllegalArgumentException
value
- String representation of Authority and format identifiercodec
- StringCodec to use for encodingIllegalArgumentException
public NSAPAddress setAuthorityAndFormatIdEncoded(EncodedStringWithIndicators encoded)
encoded
- EncodedStringWithIndicators representation of Authority and format identifierpublic String getInitialDomainId(StringCodec<NSAPAddress> codec) throws DecodeException
codec
- StringCodec to use for decodingDecodeException
- if encoded state cannot be decodedpublic EncodedStringWithIndicators getInitialDomainIdEncoded()
public NSAPAddress setInitialDomainId(String value, StringCodec<NSAPAddress> codec) throws IllegalArgumentException
value
- String representation of Initial domain identifiercodec
- StringCodec to use for encodingIllegalArgumentException
public NSAPAddress setInitialDomainIdEncoded(EncodedStringWithIndicators encoded)
encoded
- EncodedStringWithIndicators representation of Initial domain identifierpublic String getDomainSpecificPart(StringCodec<NSAPAddress> codec) throws DecodeException
codec
- StringCodec to use for decodingDecodeException
- if encoded state cannot be decodedpublic byte[] getDomainSpecificPartEncoded()
public NSAPAddress setDomainSpecificPart(String value, StringCodec<NSAPAddress> codec) throws IllegalArgumentException
value
- String representation of Domain specific partcodec
- StringCodec to use for encodingIllegalArgumentException
public NSAPAddress setDomainSpecificPartEncoded(byte[] encoded)
encoded
- byte[] representation of Domain specific partpublic static NSAPAddress copyOf(NSAPAddress from)
from
- the object from which to copypublic NSAPAddress 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 consideredpublic StringCodec<NSAPAddress> getAuthorityAndFormatIdCodec()
public StringCodec<NSAPAddress> getInitialDomainIdCodec()
public StringCodec<NSAPAddress> getDomainSpecificPartCodec()
protected void encode() throws EncodeException
encode
in class AbstractLazyEncodedDataObject<byte[]>
EncodeException
- if properties of AFI are unknownprotected void decode() throws DecodeException
decode
in class AbstractLazyEncodedDataObject<byte[]>
DecodeException
- if properties of AFI are unknownpublic String toRPF() throws DecodeException
DecodeException
- if properties of AFI are unknown