001/**
002 * The contents of this file are subject to the Mozilla Public License Version 1.1
003 * (the "License"); you may not use this file except in compliance with the License.
004 * You may obtain a copy of the License at http://www.mozilla.org/MPL/
005 * Software distributed under the License is distributed on an "AS IS" basis,
006 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
007 * specific language governing rights and limitations under the License.
008 *
009 * The Original Code is "DT.java".  Description:
010 * "Note: The class description below has been excerpted from the Hl7 2.3.0 documentation"
011 *
012 * The Initial Developer of the Original Code is University Health Network. Copyright (C)
013 * 2005.  All Rights Reserved.
014 *
015 * Contributor(s): ______________________________________.
016 *
017 * Alternatively, the contents of this file may be used under the terms of the
018 * GNU General Public License (the "GPL"), in which case the provisions of the GPL are
019 * applicable instead of those above.  If you wish to allow use of your version of this
020 * file only under the terms of the GPL and not to allow others to use your version
021 * of this file under the MPL, indicate your decision by deleting  the provisions above
022 * and replace  them with the notice and other provisions required by the GPL License.
023 * If you do not delete the provisions above, a recipient may use your version of
024 * this file under either the MPL or the GPL.
025 */
026package ca.uhn.hl7v2.model.primitive;
027
028import ca.uhn.hl7v2.model.AbstractPrimitive;
029import ca.uhn.hl7v2.model.DataTypeException;
030import ca.uhn.hl7v2.model.Message;
031
032/**
033 * Represents an HL7 DT (date) datatype.   
034 * 
035 * @author <a href="mailto:neal.acharya@uhn.on.ca">Neal Acharya</a>
036 * @author <a href="mailto:bryan.tripp@uhn.on.ca">Bryan Tripp</a>
037 * @version $Revision: 1.1 $ updated on $Date: 2007-02-19 02:24:51 $ by $Author: jamesagnew $
038 */
039public abstract class DT extends AbstractPrimitive {
040
041    private CommonDT myDetail;
042    
043    /**
044     * @param theMessage message to which this Type belongs
045     */
046    public DT(Message theMessage) {
047        super(theMessage);
048    }
049    
050    private CommonDT getDetail() throws DataTypeException {
051        if (myDetail == null) {
052            myDetail = new CommonDT(getValue());
053        }
054        return myDetail;
055    }
056    
057    /**
058     * @see AbstractPrimitive#setValue(java.lang.String)
059     * @throws DataTypeException if the value is incorrectly formatted and either validation is 
060     *      enabled for this primitive or detail setters / getters have been called, forcing further
061     *      parsing.   
062     */
063    public void setValue(String theValue) throws DataTypeException {
064        super.setValue(theValue);
065        
066        if (myDetail != null) {
067            myDetail.setValue(theValue);
068        }
069    }
070    
071    /**
072     * @see AbstractPrimitive#getValue
073     */
074    public String getValue() {
075        String result = super.getValue();
076        
077        if (myDetail != null) {
078            result = myDetail.getValue();
079        }
080        
081        return result;
082    }
083
084    /**
085     * @see CommonDT#setYearPrecision(int)
086     * @throws DataTypeException if the value is incorrectly formatted.  If validation is enabled, this 
087     *      exception should be thrown at setValue(), but if not, detailed parsing may be deferred until 
088     *      this method is called.  
089     */
090    public void setYearPrecision(int yr) throws DataTypeException {
091        getDetail().setYearPrecision(yr);       
092    }
093    
094    /**
095     * @see CommonDT#setYearMonthPrecision(int, int)
096     * @throws DataTypeException if the value is incorrectly formatted.  If validation is enabled, this 
097     *      exception should be thrown at setValue(), but if not, detailed parsing may be deferred until 
098     *      this method is called.  
099     */
100    public void setYearMonthPrecision(int yr, int mnth) throws DataTypeException {
101        getDetail().setYearMonthPrecision(yr,mnth);         
102    }
103    
104    /**
105     * @see CommonDT#setYearMonthDayPrecision(int, int, int)
106     * @throws DataTypeException if the value is incorrectly formatted.  If validation is enabled, this 
107     *      exception should be thrown at setValue(), but if not, detailed parsing may be deferred until 
108     *      this method is called.  
109     */
110    public void setYearMonthDayPrecision(int yr, int mnth, int dy) throws DataTypeException {
111        getDetail().setYearMonthDayPrecision(yr,mnth,dy);        
112    }
113    
114    /**
115     * Returns the year as an integer.
116     * @throws DataTypeException if the value is incorrectly formatted.  If validation is enabled, this 
117     *      exception should be thrown at setValue(), but if not, detailed parsing may be deferred until 
118     *      this method is called.  
119     */
120    public int getYear() throws DataTypeException {
121        return getDetail().getYear();
122    }
123    
124    /**
125     * Returns the month as an integer.
126     * @throws DataTypeException if the value is incorrectly formatted.  If validation is enabled, this 
127     *      exception should be thrown at setValue(), but if not, detailed parsing may be deferred until 
128     *      this method is called.  
129     */
130    public int getMonth() throws DataTypeException {
131        return getDetail().getMonth();
132    }
133    
134    /**
135     * Returns the day as an integer.
136     * @throws DataTypeException if the value is incorrectly formatted.  If validation is enabled, this 
137     *      exception should be thrown at setValue(), but if not, detailed parsing may be deferred until 
138     *      this method is called.  
139     */
140    public int getDay() throws DataTypeException {
141        return getDetail().getDay();
142    }
143}