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 voidcheckFieldsSet()Checks that all mandatory fields are present.TimeAndTimezoneclone()Constructs a copy of this object and everything reachable from it.static TimeAndTimezonecopyOf(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 voiddecode()Computes the decoded form from the encoded form.protected voidencode()Computes the encoded form from the decoded form.protected booleanencodedIsInvalid()Determines whether the encoded form is invalid.static intgetContainedLength(byte[] data, int start, int len)Determines the length of the encoded value that commences at offsetstartin the givendata.intgetDay()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.intgetHour()Gets the value of the hour, in range [0,99] (but usually [0,23]).intgetMinute()Gets the value of the minute, in range [0,99] (but usually [0,59]).intgetMonth()Gets the value of the month, in range [0,99] (but usually [1,12]).intgetSecond()Gets the value of the second, in range [0,99] (but usually [0,59]).intgetTimezone()Gets the value of the timezone, in range [-79,79], as a multiple of 15 minutes difference from GMT/UTC.intgetYear()Gets the value of the year, in range [0,9999].booleanhasDay()Tests whether the field Day has a value.booleanhasHour()Tests whether the field Hour has a value.booleanhasMinute()Tests whether the field Minute has a value.booleanhasMonth()Tests whether the field Month has a value.booleanhasSecond()Tests whether the field Second has a value.booleanhasTimezone()Tests whether the field Timezone has a value.booleanhasYear()Tests whether the field Year has a value.TimeAndTimezonesetDay(int value)Sets the value of the day of the month, in range [0,99] (but usually [1,31]).TimeAndTimezonesetDayPresent(boolean flag)Sets the presence or absence of the field Day.TimeAndTimezonesetHour(int value)Sets the value of the hour, in range [0,99] (but usually [0,23]).TimeAndTimezonesetHourPresent(boolean flag)Sets the presence or absence of the field Hour.TimeAndTimezonesetMinute(int value)Sets the value of the minute, in range [0,99] (but usually [0,59]).TimeAndTimezonesetMinutePresent(boolean flag)Sets the presence or absence of the field Minute.TimeAndTimezonesetMonth(int value)Sets the value of the month, in range [0,99] (but usually [1,12]).TimeAndTimezonesetMonthPresent(boolean flag)Sets the presence or absence of the field Month.TimeAndTimezonesetSecond(int value)Sets the value of the second, in range [0,99] (but usually [0,59]).TimeAndTimezonesetSecondPresent(boolean flag)Sets the presence or absence of the field Second.TimeAndTimezonesetTimezone(int value)Sets the value of the timezone, in range [-79,79], as a multiple of 15 minutes difference from GMT/UTC.TimeAndTimezonesetTimezonePresent(boolean flag)Sets the presence or absence of the field Timezone.TimeAndTimezonesetYear(int value)Sets the value of the year, in range [0,9999].TimeAndTimezonesetYearPresent(boolean flag)Sets the presence or absence of the field Year.CalendartoCalendar()Gets a Calendar representing the time in this TimeAndTimezone.StringtoDateFormat()Gets a description of the Calendar returned bytoCalendar()inDateFormat's FULL format.voidtoStream(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 indexstartand islenbytes 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:
toStreamin interfaceFastSerializable- Parameters:
out- the stream to write to- Throws:
IOException- if an I/O error occurs
-
hasYear
public boolean hasYear() throws DecodeExceptionTests 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 DecodeExceptionTests 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 DecodeExceptionTests 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 DecodeExceptionTests 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 DecodeExceptionTests 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 DecodeExceptionTests 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 DecodeExceptionTests 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 EncodeExceptionChecks that all mandatory fields are present. Should be called immediately before all calls to encode().- Specified by:
checkFieldsSetin classAbstractLazyEncodedDataObject<byte[]>- Throws:
EncodeException- if any mandatory field is not present
-
getYear
public int getYear() throws DecodeExceptionGets 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 DecodeExceptionGets 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 DecodeExceptionGets 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 DecodeExceptionGets 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 DecodeExceptionGets 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 DecodeExceptionGets 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 DecodeExceptionGets 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:
clonein interfaceDataObject- Specified by:
clonein 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:
getFieldsMapin 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 EncodeExceptionGets 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 offsetstartin 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 EncodeExceptionComputes the encoded form from the decoded form.- Specified by:
encodein classAbstractLazyEncodedDataObject<byte[]>- Throws:
EncodeException- if address cannot be encoded
-
decode
protected void decode()
Computes the decoded form from the encoded form.- Specified by:
decodein classAbstractLazyEncodedDataObject<byte[]>- Throws:
DecodeException- if less or more than 8 octets to be decoded, or if the contained data is badly formatted
-
-