public final class YearMonthDay extends AbstractLazyEncodedByteArray implements FastSerializable
The API offered by this class is as if the type were specified in ASN.1 as follows.
YearMonthDay ::= SEQUENCE { year INTEGER, month INTEGER, day INTEGER }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. The digits are encoded separately in BCD. An INAP date has only two digits in the year, whereas a CAP date has four digits in the year.
Data Encoding - based on comment in ASN.1 module Core-INAP-CS1-DataTypes | ||||||||
---|---|---|---|---|---|---|---|---|
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
Octet 0 | Year units | Year tens | ||||||
Octet 1 | Month units | Month tens | ||||||
Octet 2 | Day units | Day tens |
Data Encoding - based on comment in ASN.1 module CAP-DataTypes | ||||||||
---|---|---|---|---|---|---|---|---|
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
Octet 0 | Year hundreds | Year thousands | ||||||
Octet 1 | Year units | Year tens | ||||||
Octet 2 | Month units | Month tens | ||||||
Octet 3 | Day units | Day tens |
Note that the INAP form does not store millennium or century information. When encoding to INAP, the millennium and century digits are ignored. When decoding from INAP, a millennium and century are selected so that the resulting year lies in the range [1970,2069]; if a different range is needed, then use the returned year modulo 100 to obtain the raw value.
isDecoded
encoded
FIELD_ABSENT, FIELD_UNINITIALISED
Constructor and Description |
---|
YearMonthDay()
Constructs a new YearMonthDay object with no fields set.
|
YearMonthDay(byte[] data)
Constructs a new YearMonthDay object from network-encoded data.
|
YearMonthDay(byte[] data,
int start,
int len)
Constructs a new YearMonthDay object from part of network-encoded data.
|
YearMonthDay(DataInput in)
Constructs a new YearMonthDay object from data deserialized from a stream that was written by
toStream(DataOutput) . |
YearMonthDay(int year,
int month,
int day)
Constructs a new YearMonthDay object from given values for all fields.
|
Modifier and Type | Method and Description |
---|---|
void |
checkFieldsSet()
Checks that all mandatory fields are present.
|
YearMonthDay |
clone()
Constructs a copy of this object and everything reachable from it.
|
static YearMonthDay |
copyOf(YearMonthDay 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.
|
byte[] |
getCapEncodedForm()
Gets the CAP encoded form of this YearMonthDay instance.
|
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 . |
int |
getDay()
Gets the value of the day of the month, in range [1,31].
|
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.
|
byte[] |
getInapEncodedForm()
Gets the INAP encoded form of this YearMonthDay instance.
|
int |
getMonth()
Gets the value of the month, in range [1,12].
|
int |
getYear()
Gets the value of the year, in range [0,9999].
|
boolean |
hasDay()
Tests whether the field Day has a value.
|
boolean |
hasMonth()
Tests whether the field Month has a value.
|
boolean |
hasYear()
Tests whether the field Year has a value.
|
YearMonthDay |
setDay(int value)
Sets the value of the day of the month, in range [1,31].
|
YearMonthDay |
setDayPresent(boolean flag)
Sets the presence or absence of the field Day.
|
YearMonthDay |
setMonth(int value)
Sets the value of the month, in range [1,12].
|
YearMonthDay |
setMonthPresent(boolean flag)
Sets the presence or absence of the field Month.
|
YearMonthDay |
setYear(int value)
Sets the value of the year, in range [0,9999].
|
YearMonthDay |
setYearPresent(boolean flag)
Sets the presence or absence of the field Year.
|
void |
toStream(DataOutput out)
Serializes this object to a stream in a form suitable for reading by
YearMonthDay(DataInput) . |
checkDecode, checkModifyAndDecode
equals, hashCode, toString
checkModify, isReadOnly, setReadOnly
public YearMonthDay()
public YearMonthDay(byte[] data)
data
- network-encoded dataNullPointerException
- if data is nullpublic YearMonthDay(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 YearMonthDay(int year, int month, int day)
year
- the year, in range [0,9999]month
- the month, in range [1,12]day
- the day of the month, in range [1,31]public YearMonthDay(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
YearMonthDay(DataInput)
.toStream
in interface FastSerializable
out
- the stream to write toIOException
- if an I/O error occurspublic boolean hasYear() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic YearMonthDay setYearPresent(boolean flag) throws IllegalStateException
flag
- whether the field should be marked as presentIllegalStateException
- if this instance has been marked as read-onlypublic boolean hasMonth() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic YearMonthDay setMonthPresent(boolean flag) throws IllegalStateException
flag
- whether the field should be marked as presentIllegalStateException
- if this instance has been marked as read-onlypublic boolean hasDay() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic YearMonthDay setDayPresent(boolean flag) throws IllegalStateException
flag
- whether the field should be marked as presentIllegalStateException
- if this instance has been marked as read-onlypublic void checkFieldsSet() throws EncodeException
checkFieldsSet
in class AbstractLazyEncodedDataObject<byte[]>
EncodeException
- if any mandatory field is not presentpublic int getYear() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic int getMonth() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic int getDay() throws DecodeException
DecodeException
- if encoded state cannot be decodedpublic YearMonthDay setYear(int value) throws IllegalStateException
value
- int representation of the year, in range [0,9999]IllegalStateException
public YearMonthDay setMonth(int value) throws IllegalStateException
value
- int representation of the month, in range [1,12]IllegalStateException
public YearMonthDay setDay(int value) throws IllegalStateException
value
- int representation of the day of the month, in range [1,31]IllegalStateException
public static YearMonthDay copyOf(YearMonthDay from)
from
- the object from which to copypublic YearMonthDay 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 byte[] getInapEncodedForm()
public byte[] getCapEncodedForm()
protected void encode() throws EncodeException
encode
in class AbstractLazyEncodedDataObject<byte[]>
EncodeException
- if Year is not in range [0,9999], or Month is not in range [1,12], or Day is not in range [1,31]protected void decode() throws DecodeException
decode
in class AbstractLazyEncodedDataObject<byte[]>
DecodeException
- if less than 3 or more than 4 octets to be decoded