Class GenericDigits
- java.lang.Object
-
- com.opencloud.util.AbstractDataObject
-
- com.opencloud.util.AbstractFieldsObject
-
- AbstractEncodedDataObject<T>
-
- AbstractLazyEncodedDataObject<byte[]>
-
- AbstractLazyEncodedByteArray
-
- com.opencloud.slee.resources.in.datatypes.cc.GenericDigits
-
- All Implemented Interfaces:
DataObject
,FastSerializable
,Serializable
- Direct Known Subclasses:
GenericDigitsWithStarHash
public class GenericDigits extends AbstractLazyEncodedByteArray implements FastSerializable
Class GenericDigits contains an address string and indicators of how that string is encoded and what that string represents. It represents some uses of the ASN.1 OCTET STRING type Core-INAP-CS1-DataTypes.Digits (others being represented by GenericNumber).The API offered by this class is as if the type were specified in ASN.1 as follows.
GenericDigits ::= SEQUENCE { encodingScheme EncodingScheme, typeOfDigits TypeOfDigits, 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 ITU-T Q.763 (12/1999) §3.24 p33 8 7 6 5 4 3 2 1 Octet 1 Encoding scheme Type of digits Octet 2.. Digits
The length of the data encoding depends on the encoding scheme and the length of the address. The octet numbering in the above table is that used in the cited standard. Q.763 names but doesn't explain the different encoding schemes, so this class offers our best guess of what's intended, as follows.Under encoding scheme BCD_ODD, the address should be a digit string with an odd number of digits, and the digits are encoded into semi-octets.
Under encoding scheme BCD_EVEN, the address should be a digit string with an even number of digits, and the digits are encoded into semi-octets.
Under encoding scheme IA5, the address should be a character string, and the characters are encoded into octets.
Under encoding scheme BINARY, the address should be a character string containing only digits, and the digits are encoded into octets (subtracting digit '0' from each character).The encoding to semi-octets by encoding schemes BCD_ODD and BCD_EVEN, unless overridden by a particular
StringCodec
, 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 In INAP, type of digits is determinable from the context, and so it's redundant. However the ISUP format doesn't allow the exclusion of this subfield, therefore the value is network operator specific.
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
GenericDigits.EncodingScheme
Encoding scheme constants.static class
GenericDigits.TypeOfDigits
Type of digits constants.
-
Field Summary
Fields Modifier and Type Field Description static BCDStringCodec<GenericDigits>
ADDRESS_CODEC_BCD
BCD string codec for field Address.static BinaryStringCodec<GenericDigits>
ADDRESS_CODEC_BINARY
Binary string codec for field Address.static IA5StringCodec<GenericDigits>
ADDRESS_CODEC_IA5
ASCII/ISO646-US string codec for field Address.protected EncodedStringWithIndicators
Address_value
Encoded form of field Address.protected GenericDigits.EncodingScheme
EncodingScheme_value
Value of field EncodingScheme.protected GenericDigits.TypeOfDigits
TypeOfDigits_value
Value of field TypeOfDigits.-
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 GenericDigits()
Constructs a new GenericDigits object with no fields set.GenericDigits(byte[] data)
Constructs a new GenericDigits object from network-encoded data.GenericDigits(byte[] data, int start, int len)
Constructs a new GenericDigits object from part of network-encoded data.GenericDigits(GenericDigits.EncodingScheme encodingScheme, GenericDigits.TypeOfDigits typeOfDigits, String address)
Constructs a new GenericDigits object from given values for all fields.GenericDigits(GenericDigits.EncodingScheme encodingScheme, GenericDigits.TypeOfDigits typeOfDigits, String address, StringCodec<GenericDigits> Address_codec)
Constructs a new GenericDigits object from given arguments, using the given codecs for encoding fields of type String.GenericDigits(DataInput in)
Constructs a new GenericDigits object from data deserialized from a stream that was written bytoStream(DataOutput)
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
checkFieldsSet()
Checks that all mandatory fields are present.GenericDigits
clone()
Constructs a copy of this object and everything reachable from it.static GenericDigits
copyOf(GenericDigits 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<GenericDigits> codec)
Gets the value of the address using the given codec.StringCodec<GenericDigits>
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 offsetstart
in the givendata
.byte[]
getEncodedForm()
Gets the encoded form.GenericDigits.EncodingScheme
getEncodingScheme()
Gets the value of the encoding scheme.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.GenericDigits.TypeOfDigits
getTypeOfDigits()
Gets the value of the type of digits.boolean
hasAddress()
Tests whether the field Address has a value.boolean
hasEncodingScheme()
Tests whether the field EncodingScheme has a value.boolean
hasTypeOfDigits()
Tests whether the field TypeOfDigits has a value.GenericDigits
setAddress(String value)
Sets the value of the address.GenericDigits
setAddress(String value, StringCodec<GenericDigits> codec)
Sets the value of the address using the given codec.GenericDigits
setAddressEncoded(EncodedStringWithIndicators encoded)
Sets the encoded value of the address to a clone of the given EncodedStringIndicators.GenericDigits
setEncodingScheme(GenericDigits.EncodingScheme value)
Sets the value of the encoding scheme.GenericDigits
setTypeOfDigits(GenericDigits.TypeOfDigits value)
Sets the value of the type of digits.void
toStream(DataOutput out)
Serializes this object to a stream in a form suitable for reading byGenericDigits(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
-
ADDRESS_CODEC_BCD
public static final BCDStringCodec<GenericDigits> ADDRESS_CODEC_BCD
BCD string codec for field Address.
-
ADDRESS_CODEC_BINARY
public static final BinaryStringCodec<GenericDigits> ADDRESS_CODEC_BINARY
Binary string codec for field Address.
-
ADDRESS_CODEC_IA5
public static final IA5StringCodec<GenericDigits> ADDRESS_CODEC_IA5
ASCII/ISO646-US string codec for field Address.
-
EncodingScheme_value
protected GenericDigits.EncodingScheme EncodingScheme_value
Value of field EncodingScheme.
-
TypeOfDigits_value
protected GenericDigits.TypeOfDigits TypeOfDigits_value
Value of field TypeOfDigits.
-
Address_value
protected EncodedStringWithIndicators Address_value
Encoded form of field Address.
-
-
Constructor Detail
-
GenericDigits
public GenericDigits()
Constructs a new GenericDigits object with no fields set.
-
GenericDigits
public GenericDigits(byte[] data)
Constructs a new GenericDigits 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
-
GenericDigits
public GenericDigits(byte[] data, int start, int len)
Constructs a new GenericDigits 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
-
GenericDigits
public GenericDigits(GenericDigits.EncodingScheme encodingScheme, GenericDigits.TypeOfDigits typeOfDigits, String address)
Constructs a new GenericDigits object from given values for all fields.- Parameters:
encodingScheme
- the encoding schemetypeOfDigits
- the type of digitsaddress
- the address
-
GenericDigits
public GenericDigits(GenericDigits.EncodingScheme encodingScheme, GenericDigits.TypeOfDigits typeOfDigits, String address, StringCodec<GenericDigits> Address_codec)
Constructs a new GenericDigits object from given arguments, using the given codecs for encoding fields of type String.- Parameters:
encodingScheme
- the encoding schemetypeOfDigits
- the type of digitsaddress
- the addressAddress_codec
- StringCodec for address
-
GenericDigits
public GenericDigits(DataInput in) throws IOException
Constructs a new GenericDigits 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 byGenericDigits(DataInput)
.- Specified by:
toStream
in interfaceFastSerializable
- Parameters:
out
- the stream to write to- Throws:
IOException
- if an I/O error occurs
-
hasEncodingScheme
public boolean hasEncodingScheme() throws DecodeException
Tests whether the field EncodingScheme has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
hasTypeOfDigits
public boolean hasTypeOfDigits() throws DecodeException
Tests whether the field TypeOfDigits has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
hasAddress
public boolean hasAddress() throws DecodeException
Tests whether the field Address 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
-
getEncodingScheme
public GenericDigits.EncodingScheme getEncodingScheme() throws DecodeException
Gets the value of the encoding scheme.- Returns:
- EncodingScheme representation of the encoding scheme
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getTypeOfDigits
public GenericDigits.TypeOfDigits getTypeOfDigits() throws DecodeException
Gets the value of the type of digits.- Returns:
- TypeOfDigits representation of the type of digits
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getAddress
public String getAddress() throws DecodeException
Gets the value of the address. Equivalent togetAddress(null)
.- Returns:
- String representation of the address
- Throws:
DecodeException
- if encoded state cannot be decoded
-
setEncodingScheme
public GenericDigits setEncodingScheme(GenericDigits.EncodingScheme value) throws IllegalStateException
Sets the value of the encoding scheme.- Parameters:
value
- EncodingScheme representation of the encoding scheme- Returns:
- this
- Throws:
IllegalStateException
-
setTypeOfDigits
public GenericDigits setTypeOfDigits(GenericDigits.TypeOfDigits value) throws IllegalStateException
Sets the value of the type of digits.- Parameters:
value
- TypeOfDigits representation of the type of digits- Returns:
- this
- Throws:
IllegalStateException
-
setAddress
public GenericDigits setAddress(String value) throws IllegalStateException
Sets the value of the address.- Parameters:
value
- String representation of the address- Returns:
- this
- Throws:
IllegalStateException
-
getAddress
public String getAddress(StringCodec<GenericDigits> codec) throws DecodeException
Gets the value of the address using the given codec. If the field Address 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 the address
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getAddressEncoded
public EncodedStringWithIndicators getAddressEncoded()
Gets a clone of the encoded value of the address.- Returns:
- EncodedStringWithIndicators representation of the address
-
setAddress
public GenericDigits setAddress(String value, StringCodec<GenericDigits> codec) throws IllegalArgumentException
Sets the value of the address 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 the addresscodec
- StringCodec to use for encoding- Returns:
- this
- Throws:
IllegalArgumentException
-
setAddressEncoded
public GenericDigits setAddressEncoded(EncodedStringWithIndicators encoded)
Sets the encoded value of the address to a clone of the given EncodedStringIndicators.- Parameters:
encoded
- EncodedStringWithIndicators representation of the address- Returns:
- this
-
copyOf
public static GenericDigits copyOf(GenericDigits 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:
- GenericDigits
-
clone
public GenericDigits 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
-
getAddressCodec
public StringCodec<GenericDigits> getAddressCodec()
Gets the codec used for field Address. This depends on the current value of field EncodingScheme.- Returns:
- StringCodec
-
encode
protected void encode()
Computes the encoded form from the decoded form.- Specified by:
encode
in classAbstractLazyEncodedDataObject<byte[]>
- Throws:
EncodeException
- if EncodingScheme is unknown
-
decode
protected void decode() throws DecodeException
Computes the decoded form from the encoded form.- Specified by:
decode
in classAbstractLazyEncodedDataObject<byte[]>
- Throws:
DecodeException
- if less than 1 octet to be decoded
-
-