Class NSAPAddress
- java.lang.Object
-
- com.opencloud.util.AbstractDataObject
-
- com.opencloud.util.AbstractFieldsObject
-
- AbstractEncodedDataObject<T>
-
- AbstractLazyEncodedDataObject<byte[]>
-
- AbstractLazyEncodedByteArray
-
- com.opencloud.slee.resources.in.datatypes.map.nsap.NSAPAddress
-
- All Implemented Interfaces:
DataObject
,FastSerializable
,Serializable
public final class NSAPAddress extends AbstractLazyEncodedByteArray implements FastSerializable
Class NSAPAddress encapsulates a Network Service Access Point (NSAP) Address. It represents some octets within the ASN.1 OCTET STRING type ISDN-SubaddressString.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 suitableStringCodec
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
The authority and format identifier (AFI) determines:- the length of the initial domain identifier (IDI) field;
- the digit used for any leading padding of the IDI needed to bring it up to the fixed length;
- and the format of the domain specific part (DSP).
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 - See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field 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.-
Fields inherited from class com.opencloud.slee.resources.cgin.AbstractLazyEncodedDataObject
isDecoded
-
Fields inherited from class com.opencloud.slee.resources.cgin.AbstractEncodedDataObject
encoded
-
Fields inherited from class com.opencloud.util.AbstractFieldsObject
FIELD_ABSENT, FIELD_UNINITIALISED
-
-
Constructor Summary
Constructors Constructor 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 bytoStream(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.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method 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 offsetstart
in the givendata
.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 byNSAPAddress(DataInput)
.-
Methods inherited from class com.opencloud.slee.resources.cgin.AbstractLazyEncodedDataObject
checkDecode, checkModifyAndDecode
-
Methods inherited from class com.opencloud.util.AbstractFieldsObject
equals, hashCode, toString
-
Methods inherited from class com.opencloud.util.AbstractDataObject
checkModify, isReadOnly, setReadOnly
-
-
-
-
Field Detail
-
AUTHORITYANDFORMATID_CODEC
public static final BCDStringCodec<NSAPAddress> AUTHORITYANDFORMATID_CODEC
BCD string codec for field AuthorityAndFormatId.
-
INITIALDOMAINID_CODEC
public static final BCDStringCodec<NSAPAddress> INITIALDOMAINID_CODEC
BCD string codec for field InitialDomainId.
-
DOMAINSPECIFICPART_CODEC_BCD
public static final BCDStringCodec<NSAPAddress> DOMAINSPECIFICPART_CODEC_BCD
BCD string codec for field DomainSpecificPart.
-
DOMAINSPECIFICPART_CODEC_BINARY
public static final BinaryStringCodec<NSAPAddress> DOMAINSPECIFICPART_CODEC_BINARY
Binary string codec for field DomainSpecificPart.
-
DOMAINSPECIFICPART_CODEC_ISO646BCD
public static final ISO646BCDStringCodec<NSAPAddress> DOMAINSPECIFICPART_CODEC_ISO646BCD
Printable ASCII/ISO646-US string codec for field DomainSpecificPart.
-
-
Constructor Detail
-
NSAPAddress
public NSAPAddress()
Constructs a new NSAPAddress object with no fields set.
-
NSAPAddress
public NSAPAddress(byte[] data)
Constructs a new NSAPAddress 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
-
NSAPAddress
public NSAPAddress(byte[] data, int start, int len)
Constructs a new NSAPAddress object from part of network-encoded data. The part starts at indexstart
and islen
bytes long. The data is not decoded and might not be decodable.- Parameters:
data
- network-encoded datastart
- starting offset of network-encoded data in byte arraylen
- default length if not predictable- Throws:
NullPointerException
- if data is nullIllegalArgumentException
- if len is negative
-
NSAPAddress
public NSAPAddress(String authorityAndFormatId, String initialDomainId, String domainSpecificPart)
Constructs a new NSAPAddress object from given values for all fields.- Parameters:
authorityAndFormatId
- Authority and format identifierinitialDomainId
- Initial domain identifierdomainSpecificPart
- Domain specific part
-
NSAPAddress
public 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.- Parameters:
authorityAndFormatId
- Authority and format identifierinitialDomainId
- Initial domain identifierdomainSpecificPart
- Domain specific partAuthorityAndFormatId_codec
- StringCodec for authorityAndFormatIdInitialDomainId_codec
- StringCodec for initialDomainIdDomainSpecificPart_codec
- StringCodec for domainSpecificPart
-
NSAPAddress
public NSAPAddress(DataInput in) throws IOException
Constructs a new NSAPAddress object from data deserialized from a stream that was written bytoStream(DataOutput)
.- Parameters:
in
- the stream to read from- Throws:
EOFException
- if reading is pre-empted by end-of-fileIOException
- if the data cannot be read
-
-
Method Detail
-
toStream
public void toStream(DataOutput out) throws IOException
Serializes this object to a stream in a form suitable for reading byNSAPAddress(DataInput)
.- Specified by:
toStream
in interfaceFastSerializable
- Parameters:
out
- the stream to write to- Throws:
IOException
- if an I/O error occurs
-
hasAuthorityAndFormatId
public boolean hasAuthorityAndFormatId() throws DecodeException
Tests whether the field AuthorityAndFormatId has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
hasInitialDomainId
public boolean hasInitialDomainId() throws DecodeException
Tests whether the field InitialDomainId has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
hasDomainSpecificPart
public boolean hasDomainSpecificPart() throws DecodeException
Tests whether the field DomainSpecificPart has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
checkFieldsSet
public void checkFieldsSet() throws EncodeException
Checks that all mandatory fields are present. Should be called immediately before all calls to encode().- Specified by:
checkFieldsSet
in classAbstractLazyEncodedDataObject<byte[]>
- Throws:
EncodeException
- if any mandatory field is not present
-
getAuthorityAndFormatId
public String getAuthorityAndFormatId() throws DecodeException
Gets the value of Authority and format identifier. Equivalent togetAuthorityAndFormatId(null)
.- Returns:
- String representation of Authority and format identifier
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getInitialDomainId
public String getInitialDomainId() throws DecodeException
Gets the value of Initial domain identifier. Equivalent togetInitialDomainId(null)
.- Returns:
- String representation of Initial domain identifier
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getDomainSpecificPart
public String getDomainSpecificPart() throws DecodeException
Gets the value of Domain specific part. Equivalent togetDomainSpecificPart(null)
.- Returns:
- String representation of Domain specific part
- Throws:
DecodeException
- if encoded state cannot be decoded
-
setAuthorityAndFormatId
public NSAPAddress setAuthorityAndFormatId(String value) throws IllegalStateException
Sets the value of Authority and format identifier.- Parameters:
value
- String representation of Authority and format identifier- Returns:
- this
- Throws:
IllegalStateException
-
setInitialDomainId
public NSAPAddress setInitialDomainId(String value) throws IllegalStateException
Sets the value of Initial domain identifier.- Parameters:
value
- String representation of Initial domain identifier- Returns:
- this
- Throws:
IllegalStateException
-
setDomainSpecificPart
public NSAPAddress setDomainSpecificPart(String value) throws IllegalStateException
Sets the value of Domain specific part.- Parameters:
value
- String representation of Domain specific part- Returns:
- this
- Throws:
IllegalStateException
-
getAuthorityAndFormatId
public String getAuthorityAndFormatId(StringCodec<NSAPAddress> codec) throws DecodeException
Gets the value of Authority and format identifier using the given codec. If the field AuthorityAndFormatId 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 Authority and format identifier
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getAuthorityAndFormatIdEncoded
public EncodedStringWithIndicators getAuthorityAndFormatIdEncoded()
Gets a clone of the encoded value of Authority and format identifier.- Returns:
- EncodedStringWithIndicators representation of Authority and format identifier
-
setAuthorityAndFormatId
public NSAPAddress setAuthorityAndFormatId(String value, StringCodec<NSAPAddress> codec) throws IllegalArgumentException
Sets the value of Authority and format identifier using the given codec. If the given codec is null, uses the standard codec.- Parameters:
value
- String representation of Authority and format identifiercodec
- StringCodec to use for encoding- Returns:
- this
- Throws:
IllegalArgumentException
-
setAuthorityAndFormatIdEncoded
public NSAPAddress setAuthorityAndFormatIdEncoded(EncodedStringWithIndicators encoded)
Sets the encoded value of Authority and format identifier to a clone of the given EncodedStringIndicators.- Parameters:
encoded
- EncodedStringWithIndicators representation of Authority and format identifier- Returns:
- this
-
getInitialDomainId
public String getInitialDomainId(StringCodec<NSAPAddress> codec) throws DecodeException
Gets the value of Initial domain identifier using the given codec. If the field InitialDomainId 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 Initial domain identifier
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getInitialDomainIdEncoded
public EncodedStringWithIndicators getInitialDomainIdEncoded()
Gets a clone of the encoded value of Initial domain identifier.- Returns:
- EncodedStringWithIndicators representation of Initial domain identifier
-
setInitialDomainId
public NSAPAddress setInitialDomainId(String value, StringCodec<NSAPAddress> codec) throws IllegalArgumentException
Sets the value of Initial domain identifier using the given codec. If the given codec is null, uses the standard codec.- Parameters:
value
- String representation of Initial domain identifiercodec
- StringCodec to use for encoding- Returns:
- this
- Throws:
IllegalArgumentException
-
setInitialDomainIdEncoded
public NSAPAddress setInitialDomainIdEncoded(EncodedStringWithIndicators encoded)
Sets the encoded value of Initial domain identifier to a clone of the given EncodedStringIndicators.- Parameters:
encoded
- EncodedStringWithIndicators representation of Initial domain identifier- Returns:
- this
-
getDomainSpecificPart
public String getDomainSpecificPart(StringCodec<NSAPAddress> codec) throws DecodeException
Gets the value of Domain specific part using the given codec. If the field DomainSpecificPart is not set, returns null. If the given codec is null, then uses the standard codec for this field. The standard codec is determined by the values of other fields, so beware that changes to those other fields can affect the decoding done by this getter.- Parameters:
codec
- StringCodec to use for decoding- Returns:
- String representation of Domain specific part
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getDomainSpecificPartEncoded
public byte[] getDomainSpecificPartEncoded()
Gets a clone of the encoded value of Domain specific part.- Returns:
- byte[] representation of Domain specific part
-
setDomainSpecificPart
public NSAPAddress setDomainSpecificPart(String value, StringCodec<NSAPAddress> codec) throws IllegalArgumentException
Sets the value of Domain specific part using the given codec. If the given codec is null, uses the standard codec. The standard codec is determined by the values of other fields, so ensure that those other fields are set before calling this setter.- Parameters:
value
- String representation of Domain specific partcodec
- StringCodec to use for encoding- Returns:
- this
- Throws:
IllegalArgumentException
-
setDomainSpecificPartEncoded
public NSAPAddress setDomainSpecificPartEncoded(byte[] encoded)
Sets the encoded value of Domain specific part to a clone of the given byte array.- Parameters:
encoded
- byte[] representation of Domain specific part- Returns:
- this
-
copyOf
public 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.- Parameters:
from
- the object from which to copy- Returns:
- NSAPAddress
-
clone
public NSAPAddress clone()
Constructs a copy of this object and everything reachable from it.- Specified by:
clone
in interfaceDataObject
- Specified by:
clone
in classAbstractDataObject
- Returns:
- copy of object
-
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 classAbstractFieldsObject
- 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 offsetstart
in the givendata
. 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.- Parameters:
data
- network-encoded datastart
- index into data where value commenceslen
- length in data to be considered- Returns:
- len, or 0 if encoded value is not long enough
-
getAuthorityAndFormatIdCodec
public StringCodec<NSAPAddress> getAuthorityAndFormatIdCodec()
Gets the codec used for field AuthorityAndFormatId.- Returns:
- StringCodec
-
getInitialDomainIdCodec
public StringCodec<NSAPAddress> getInitialDomainIdCodec()
Gets the codec used for field InitialDomainId.- Returns:
- StringCodec
-
getDomainSpecificPartCodec
public StringCodec<NSAPAddress> getDomainSpecificPartCodec()
Gets the codec used for field DomainSpecificPart. This depends on the current value of field AuthorityAndFormatId.- Returns:
- StringCodec, or null if AuthorityAndFormatId is uninitialised
-
encode
protected void encode() throws EncodeException
Computes the encoded form from the decoded form.- Specified by:
encode
in classAbstractLazyEncodedDataObject<byte[]>
- Throws:
EncodeException
- if properties of AFI are unknown
-
decode
protected void decode() throws DecodeException
Computes the decoded form from the encoded form.- Specified by:
decode
in classAbstractLazyEncodedDataObject<byte[]>
- Throws:
DecodeException
- if properties of AFI are unknown
-
toRPF
public String toRPF() throws DecodeException
Gets this NSAPAddress in Reference Publication Format (RPF). For example, the RPF for an NSAP address with an AFI value of 39, an IDI value of 840, and a binary-syntax DSP value of 01001100 11100101 would be 39840+4CE5.- Returns:
- String containing this NSAPAddress in RPF
- Throws:
DecodeException
- if properties of AFI are unknown
-
-