/**
* The contents of this file are subject to the Mozilla Public License Version 1.1
* (the "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.mozilla.org/MPL/
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
* specific language governing rights and limitations under the License.
*
* The Original Code is "TSComponentOne.java". Description:
* "Represents an HL7 timestamp, which is related to the HL7 TS type."
*
* The Initial Developer of the Original Code is University Health Network. Copyright (C)
* 2005. All Rights Reserved.
*
* Contributor(s): ______________________________________.
*
* Alternatively, the contents of this file may be used under the terms of the
* GNU General Public License (the �GPL�), in which case the provisions of the GPL are
* applicable instead of those above. If you wish to allow use of your version of this
* file only under the terms of the GPL and not to allow others to use your version
* of this file under the MPL, indicate your decision by deleting the provisions above
* and replace them with the notice and other provisions required by the GPL License.
* If you do not delete the provisions above, a recipient may use your version of
* this file under either the MPL or the GPL.
*/
package ca.uhn.hl7v2.model.primitive;
import java.util.Calendar;
import java.util.Date;
import ca.uhn.hl7v2.model.AbstractPrimitive;
import ca.uhn.hl7v2.model.DataTypeException;
import ca.uhn.hl7v2.model.Message;
/**
* Represents an HL7 timestamp, which is related to the HL7 TS type. In version 2.5,
* TS is a composite type. The first component is type DTM, which corresponds to this class
* (actually model.v25.datatype.DTM inherits from this class at time of writing). In HL7 versions
* 2.2-2.4, it wasn't perfectly clear whether TS was composite or primitive. HAPI interprets
* it as composite, with the first component having a type that isn't defined by HL7, and we call
* this type TSComponentOne. In v2.1, TS is primitive, and corresponds one-to-one with this class.
*
* @author Neal Acharya
* @author Bryan Tripp
* @version $Revision: 1.2 $ updated on $Date: 2011/02/21 17:55:08 $ by $Author: jamesagnew $
*/
public abstract class TSComponentOne extends AbstractPrimitive {
private CommonTS myDetail;
/**
* @param theMessage message to which this Type belongs
*/
public TSComponentOne(Message theMessage) {
super(theMessage);
}
private CommonTS getDetail() throws DataTypeException {
if (myDetail == null) {
myDetail = new CommonTS(getValue());
}
return myDetail;
}
/**
* @see AbstractPrimitive#setValue(java.lang.String)
* @throws DataTypeException if the value is incorrectly formatted and either validation is
* enabled for this primitive or detail setters / getters have been called, forcing further
* parsing.
*/
public void setValue(String theValue) throws DataTypeException {
super.setValue(theValue);
if (myDetail != null) {
myDetail.setValue(theValue);
}
}
/**
* @see AbstractPrimitive#getValue
*/
public String getValue() {
String result = super.getValue();
if (myDetail != null) {
result = myDetail.getValue();
}
return result;
}
/**
* @see CommonTS#setDatePrecision(int, int, int)
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public void setDatePrecision(int yr, int mnth, int dy) throws DataTypeException {
getDetail().setDatePrecision(yr,mnth,dy);
}
/**
* @see CommonTS#setDateMinutePrecision(int, int, int, int, int)
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public void setDateMinutePrecision(int yr, int mnth, int dy, int hr, int min) throws DataTypeException {
getDetail().setDateMinutePrecision(yr,mnth,dy,hr,min);
}
/**
* @see CommonTS#setDateSecondPrecision(int, int, int, int, int, float)
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public void setDateSecondPrecision(int yr, int mnth, int dy, int hr, int min, float sec) throws DataTypeException {
getDetail().setDateSecondPrecision(yr,mnth,dy,hr,min,sec);
}
/**
* @see CommonTS#setOffset(int)
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public void setOffset(int signedOffset) throws DataTypeException {
getDetail().setOffset(signedOffset);
}
/**
* Returns the year as an integer.
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public int getYear() throws DataTypeException {
return getDetail().getYear();
}
/**
* Returns the month as an integer.
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public int getMonth() throws DataTypeException {
return getDetail().getMonth();
}
/**
* Returns the day as an integer.
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public int getDay() throws DataTypeException {
return getDetail().getDay();
}
/**
* Returns the hour as an integer.
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public int getHour() throws DataTypeException {
return getDetail().getHour();
}
/**
* Returns the minute as an integer.
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public int getMinute() throws DataTypeException {
return getDetail().getMinute();
}
/**
* Returns the second as an integer.
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public int getSecond() throws DataTypeException {
return getDetail().getSecond();
}
/**
* Returns the fractional second value as a float.
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public float getFractSecond() throws DataTypeException {
return getDetail().getFractSecond();
}
/**
* Returns the GMT offset value as an integer.
* @throws DataTypeException if the value is incorrectly formatted. If validation is enabled, this
* exception should be thrown at setValue(), but if not, detailed parsing may be deferred until
* this method is called.
*/
public int getGMTOffset() throws DataTypeException {
return getDetail().getGMTOffset();
}
/**
* Convenience setter which sets the value using a {@link Calendar} object.
*
* Note: Sets fields using precision up to the millisecond, including timezone offset
*
* @param theCalendar The calendar object from which to retrieve values
* @since 1.1
*/
public void setValue(Calendar theCalendar) throws DataTypeException {
getDetail().setValue(theCalendar);
}
/**
* Convenience setter which sets the value using a {@link Calendar} object.
*
* Note: Sets fields using precision up to the millisecond, and sets the timezone offset to
* the current system offset
*
* @param theDate The calendar object from which to retrieve values
* @since 1.1
*/
public void setValue(Date theDate) throws DataTypeException {
getDetail().setValue(theDate);
}
/**
* Convenience setter which sets the value using a {@link Calendar} object.
*
* Note: Sets fields using precision up to the minute
*
* @param theCalendar The calendar object from which to retrieve values
* @since 1.1
*/
public void setValueToMinute(Calendar theCalendar) throws DataTypeException {
getDetail().setValueToMinute(theCalendar);
}
/**
* Convenience setter which sets the value using a {@link Date} object.
*
* Note: Sets fields using precision up to the minute
*
* @param theCalendar The calendar object from which to retrieve values
* @since 1.1
*/
public void setValueToMinute(Date theDate) throws DataTypeException {
getDetail().setValueToMinute(theDate);
}
/**
* Convenience setter which sets the value using a {@link Calendar} object.
*
* Note: Sets fields using precision up to the second
*
* @param theCalendar The calendar object from which to retrieve values
* @since 1.1
*/
public void setValueToSecond(Calendar theCalendar) throws DataTypeException {
getDetail().setValueToSecond(theCalendar);
}
/**
* Convenience setter which sets the value using a {@link Date} object.
*
* Note: Sets fields using precision up to the second
*
* @param theCalendar The calendar object from which to retrieve values
* @since 1.1
*/
public void setValueToSecond(Date theDate) throws DataTypeException {
getDetail().setValueToSecond(theDate);
}
/**
* Return the value as a calendar object
* @since 1.1
* @throws DataTypeException If the current underlying string representation can not be parsed into a valid date/time
*/
public Calendar getValueAsCalendar() throws DataTypeException {
return getDetail().getValueAsCalendar();
}
/**
* Return the value as a date object
* @since 1.1
* @throws DataTypeException If the current underlying string representation can not be parsed into a valid date/time
*/
public Date getValueAsDate() throws DataTypeException {
return getDetail().getValueAsDate();
}
/** Returns the name of the type (used in XML encoding and profile checking) */
// public String getName() {
// return "NM"; //seems to be called an NM in XML representation prior to 2.5
// }
}