Class TimeAndTimezone
- java.lang.Object
-
- com.opencloud.util.AbstractDataObject
-
- com.opencloud.util.AbstractFieldsObject
-
- AbstractEncodedDataObject<T>
-
- AbstractLazyEncodedDataObject<byte[]>
-
- AbstractLazyEncodedByteArray
-
- com.opencloud.slee.resources.in.datatypes.cc.TimeAndTimezone
-
- All Implemented Interfaces:
DataObject
,FastSerializable
,Serializable
public final class TimeAndTimezone extends AbstractLazyEncodedByteArray implements FastSerializable
Class TimeAndTimezone represents times in the InitialDPArg of CAP2 and later versions.The API offered by this class is as if the type were defined in ASN.1 as follows.
TimeAndTimezone ::= SEQUENCE { year INTEGER (0..9999), month INTEGER (0..99), day INTEGER (0..99), hour INTEGER (0..99), minute INTEGER (0..99), second INTEGER (0..99), timezone INTEGER (-79..79) }
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 comment in ASN.1 module CAP-datatypes 7 6 5 4 3 2 1 0 Octet 0 Year century Year millenium Octet 1 Year units Year decade Octet 2 Month units Month tens Octet 3 Day units Day tens Octet 4 Hour units Hours tens Octet 5 Minute units Minutes tens Octet 6 Seconds units Seconds tens Octet 7 Timezone units Sign Timezone tens
The timezone digits are those of the number of quarter hours between local time and GMT, the Sign being that of this difference: 0 for positive, 1 for negative.- See Also:
- Serialized Form
-
-
Field Summary
-
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 TimeAndTimezone()
Constructs a new TimeAndTimezone object with no fields set.TimeAndTimezone(byte[] data)
Constructs a new TimeAndTimezone object from network-encoded data.TimeAndTimezone(byte[] data, int start, int len)
Constructs a new TimeAndTimezone object from part of network-encoded data.TimeAndTimezone(int year, int month, int day, int hour, int minute, int second, int timezone)
Constructs a new TimeAndTimezone object from given values for all fields.TimeAndTimezone(DataInput in)
Constructs a new TimeAndTimezone object from data deserialized from a stream that was written bytoStream(DataOutput)
.TimeAndTimezone(Calendar calendar)
Constructs a new TimeAndTimezone object from the given calendar.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
checkFieldsSet()
Checks that all mandatory fields are present.TimeAndTimezone
clone()
Constructs a copy of this object and everything reachable from it.static TimeAndTimezone
copyOf(TimeAndTimezone 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.static int
getContainedLength(byte[] data, int start, int len)
Determines the length of the encoded value that commences at offsetstart
in the givendata
.int
getDay()
Gets the value of the day of the month, in range [0,99] (but usually [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.int
getHour()
Gets the value of the hour, in range [0,99] (but usually [0,23]).int
getMinute()
Gets the value of the minute, in range [0,99] (but usually [0,59]).int
getMonth()
Gets the value of the month, in range [0,99] (but usually [1,12]).int
getSecond()
Gets the value of the second, in range [0,99] (but usually [0,59]).int
getTimezone()
Gets the value of the timezone, in range [-79,79], as a multiple of 15 minutes difference from GMT/UTC.int
getYear()
Gets the value of the year, in range [0,9999].boolean
hasDay()
Tests whether the field Day has a value.boolean
hasHour()
Tests whether the field Hour has a value.boolean
hasMinute()
Tests whether the field Minute has a value.boolean
hasMonth()
Tests whether the field Month has a value.boolean
hasSecond()
Tests whether the field Second has a value.boolean
hasTimezone()
Tests whether the field Timezone has a value.boolean
hasYear()
Tests whether the field Year has a value.TimeAndTimezone
setDay(int value)
Sets the value of the day of the month, in range [0,99] (but usually [1,31]).TimeAndTimezone
setDayPresent(boolean flag)
Sets the presence or absence of the field Day.TimeAndTimezone
setHour(int value)
Sets the value of the hour, in range [0,99] (but usually [0,23]).TimeAndTimezone
setHourPresent(boolean flag)
Sets the presence or absence of the field Hour.TimeAndTimezone
setMinute(int value)
Sets the value of the minute, in range [0,99] (but usually [0,59]).TimeAndTimezone
setMinutePresent(boolean flag)
Sets the presence or absence of the field Minute.TimeAndTimezone
setMonth(int value)
Sets the value of the month, in range [0,99] (but usually [1,12]).TimeAndTimezone
setMonthPresent(boolean flag)
Sets the presence or absence of the field Month.TimeAndTimezone
setSecond(int value)
Sets the value of the second, in range [0,99] (but usually [0,59]).TimeAndTimezone
setSecondPresent(boolean flag)
Sets the presence or absence of the field Second.TimeAndTimezone
setTimezone(int value)
Sets the value of the timezone, in range [-79,79], as a multiple of 15 minutes difference from GMT/UTC.TimeAndTimezone
setTimezonePresent(boolean flag)
Sets the presence or absence of the field Timezone.TimeAndTimezone
setYear(int value)
Sets the value of the year, in range [0,9999].TimeAndTimezone
setYearPresent(boolean flag)
Sets the presence or absence of the field Year.Calendar
toCalendar()
Gets a Calendar representing the time in this TimeAndTimezone.String
toDateFormat()
Gets a description of the Calendar returned bytoCalendar()
inDateFormat
's FULL format.void
toStream(DataOutput out)
Serializes this object to a stream in a form suitable for reading byTimeAndTimezone(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
-
-
-
-
Constructor Detail
-
TimeAndTimezone
public TimeAndTimezone()
Constructs a new TimeAndTimezone object with no fields set.
-
TimeAndTimezone
public TimeAndTimezone(byte[] data)
Constructs a new TimeAndTimezone 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
-
TimeAndTimezone
public TimeAndTimezone(byte[] data, int start, int len)
Constructs a new TimeAndTimezone 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
-
TimeAndTimezone
public TimeAndTimezone(int year, int month, int day, int hour, int minute, int second, int timezone)
Constructs a new TimeAndTimezone object from given values for all fields.- Parameters:
year
- the year, in range [0,9999]month
- the month, in range [0,99] (but usually [1,12])day
- the day of the month, in range [0,99] (but usually [1,31])hour
- the hour, in range [0,99] (but usually [0,23])minute
- the minute, in range [0,99] (but usually [0,59])second
- the second, in range [0,99] (but usually [0,59])timezone
- the timezone, in range [-79,79], as a multiple of 15 minutes difference from GMT/UTC
-
TimeAndTimezone
public TimeAndTimezone(DataInput in) throws IOException
Constructs a new TimeAndTimezone 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
-
TimeAndTimezone
public TimeAndTimezone(Calendar calendar)
Constructs a new TimeAndTimezone object from the given calendar.- Parameters:
calendar
- a time represented by a Calendar- Throws:
IllegalArgumentException
- if the Calendar is out of range (year before 0 or after 9999)
-
-
Method Detail
-
toStream
public void toStream(DataOutput out) throws IOException
Serializes this object to a stream in a form suitable for reading byTimeAndTimezone(DataInput)
.- Specified by:
toStream
in interfaceFastSerializable
- Parameters:
out
- the stream to write to- Throws:
IOException
- if an I/O error occurs
-
hasYear
public boolean hasYear() throws DecodeException
Tests whether the field Year has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
setYearPresent
public TimeAndTimezone setYearPresent(boolean flag) throws IllegalStateException
Sets the presence or absence of the field Year.- Parameters:
flag
- whether the field should be marked as present- Returns:
- this
- Throws:
IllegalStateException
- if this instance has been marked as read-only
-
hasMonth
public boolean hasMonth() throws DecodeException
Tests whether the field Month has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
setMonthPresent
public TimeAndTimezone setMonthPresent(boolean flag) throws IllegalStateException
Sets the presence or absence of the field Month.- Parameters:
flag
- whether the field should be marked as present- Returns:
- this
- Throws:
IllegalStateException
- if this instance has been marked as read-only
-
hasDay
public boolean hasDay() throws DecodeException
Tests whether the field Day has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
setDayPresent
public TimeAndTimezone setDayPresent(boolean flag) throws IllegalStateException
Sets the presence or absence of the field Day.- Parameters:
flag
- whether the field should be marked as present- Returns:
- this
- Throws:
IllegalStateException
- if this instance has been marked as read-only
-
hasHour
public boolean hasHour() throws DecodeException
Tests whether the field Hour has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
setHourPresent
public TimeAndTimezone setHourPresent(boolean flag) throws IllegalStateException
Sets the presence or absence of the field Hour.- Parameters:
flag
- whether the field should be marked as present- Returns:
- this
- Throws:
IllegalStateException
- if this instance has been marked as read-only
-
hasMinute
public boolean hasMinute() throws DecodeException
Tests whether the field Minute has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
setMinutePresent
public TimeAndTimezone setMinutePresent(boolean flag) throws IllegalStateException
Sets the presence or absence of the field Minute.- Parameters:
flag
- whether the field should be marked as present- Returns:
- this
- Throws:
IllegalStateException
- if this instance has been marked as read-only
-
hasSecond
public boolean hasSecond() throws DecodeException
Tests whether the field Second has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
setSecondPresent
public TimeAndTimezone setSecondPresent(boolean flag) throws IllegalStateException
Sets the presence or absence of the field Second.- Parameters:
flag
- whether the field should be marked as present- Returns:
- this
- Throws:
IllegalStateException
- if this instance has been marked as read-only
-
hasTimezone
public boolean hasTimezone() throws DecodeException
Tests whether the field Timezone has a value.- Returns:
- whether the field has a value
- Throws:
DecodeException
- if encoded state cannot be decoded
-
setTimezonePresent
public TimeAndTimezone setTimezonePresent(boolean flag) throws IllegalStateException
Sets the presence or absence of the field Timezone.- Parameters:
flag
- whether the field should be marked as present- Returns:
- this
- Throws:
IllegalStateException
- if this instance has been marked as read-only
-
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
-
getYear
public int getYear() throws DecodeException
Gets the value of the year, in range [0,9999].- Returns:
- int representation of the year, in range [0,9999]
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getMonth
public int getMonth() throws DecodeException
Gets the value of the month, in range [0,99] (but usually [1,12]).- Returns:
- int representation of the month, in range [0,99] (but usually [1,12])
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getDay
public int getDay() throws DecodeException
Gets the value of the day of the month, in range [0,99] (but usually [1,31]).- Returns:
- int representation of the day of the month, in range [0,99] (but usually [1,31])
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getHour
public int getHour() throws DecodeException
Gets the value of the hour, in range [0,99] (but usually [0,23]).- Returns:
- int representation of the hour, in range [0,99] (but usually [0,23])
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getMinute
public int getMinute() throws DecodeException
Gets the value of the minute, in range [0,99] (but usually [0,59]).- Returns:
- int representation of the minute, in range [0,99] (but usually [0,59])
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getSecond
public int getSecond() throws DecodeException
Gets the value of the second, in range [0,99] (but usually [0,59]).- Returns:
- int representation of the second, in range [0,99] (but usually [0,59])
- Throws:
DecodeException
- if encoded state cannot be decoded
-
getTimezone
public int getTimezone() throws DecodeException
Gets the value of the timezone, in range [-79,79], as a multiple of 15 minutes difference from GMT/UTC.- Returns:
- int representation of the timezone, in range [-79,79], as a multiple of 15 minutes difference from GMT/UTC
- Throws:
DecodeException
- if encoded state cannot be decoded
-
setYear
public TimeAndTimezone setYear(int value) throws IllegalStateException
Sets the value of the year, in range [0,9999].- Parameters:
value
- int representation of the year, in range [0,9999]- Returns:
- this
- Throws:
IllegalStateException
-
setMonth
public TimeAndTimezone setMonth(int value) throws IllegalStateException
Sets the value of the month, in range [0,99] (but usually [1,12]).- Parameters:
value
- int representation of the month, in range [0,99] (but usually [1,12])- Returns:
- this
- Throws:
IllegalStateException
-
setDay
public TimeAndTimezone setDay(int value) throws IllegalStateException
Sets the value of the day of the month, in range [0,99] (but usually [1,31]).- Parameters:
value
- int representation of the day of the month, in range [0,99] (but usually [1,31])- Returns:
- this
- Throws:
IllegalStateException
-
setHour
public TimeAndTimezone setHour(int value) throws IllegalStateException
Sets the value of the hour, in range [0,99] (but usually [0,23]).- Parameters:
value
- int representation of the hour, in range [0,99] (but usually [0,23])- Returns:
- this
- Throws:
IllegalStateException
-
setMinute
public TimeAndTimezone setMinute(int value) throws IllegalStateException
Sets the value of the minute, in range [0,99] (but usually [0,59]).- Parameters:
value
- int representation of the minute, in range [0,99] (but usually [0,59])- Returns:
- this
- Throws:
IllegalStateException
-
setSecond
public TimeAndTimezone setSecond(int value) throws IllegalStateException
Sets the value of the second, in range [0,99] (but usually [0,59]).- Parameters:
value
- int representation of the second, in range [0,99] (but usually [0,59])- Returns:
- this
- Throws:
IllegalStateException
-
setTimezone
public TimeAndTimezone setTimezone(int value) throws IllegalStateException
Sets the value of the timezone, in range [-79,79], as a multiple of 15 minutes difference from GMT/UTC.- Parameters:
value
- int representation of the timezone, in range [-79,79], as a multiple of 15 minutes difference from GMT/UTC- Returns:
- this
- Throws:
IllegalStateException
-
copyOf
public static TimeAndTimezone copyOf(TimeAndTimezone 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:
- TimeAndTimezone
-
clone
public TimeAndTimezone 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 a fixed length, so that 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:
- 8, or 0 if encoded value is not long enough
-
toDateFormat
public String toDateFormat()
Gets a description of the Calendar returned bytoCalendar()
inDateFormat
's FULL format. The exact output varies with Locale. It shows the timestamp in the timezone of the encoded TimeAndTimezone, hence FULL is needed to reveal that timezone.- Returns:
- a description of this object
-
toCalendar
public Calendar toCalendar()
Gets a Calendar representing the time in this TimeAndTimezone.- Returns:
- Calendar
-
encode
protected void encode() throws EncodeException
Computes the encoded form from the decoded form.- Specified by:
encode
in classAbstractLazyEncodedDataObject<byte[]>
- Throws:
EncodeException
- if address cannot be encoded
-
decode
protected void decode()
Computes the decoded form from the encoded form.- Specified by:
decode
in classAbstractLazyEncodedDataObject<byte[]>
- Throws:
DecodeException
- if less or more than 8 octets to be decoded, or if the contained data is badly formatted
-
-