001    package org.vmdb.hl7;
002    
003    /**
004     * <p><Title:> Date/Time Range (DR) Element. </p>
005     * <p>Description: HL7 Network Connectivity For VMDB. </p>
006     * <p>Copyright: Copyright (c) 2002-2003. </p>
007     * <p>Company: Veterinary Medical Database (VMDB). </p>
008     * @author Michael K. Martin
009     * @version 1.0
010     */
011    
012    public class DRElement extends HL7Element {
013       private String sNm = "DR";
014       private String sRl = "TS TS";
015    
016       /**
017        * Construct a Date/Time Range Element using the default name and type constants.
018        * @param iLevel One of the constants for specifying level as FIELD, COMPONENT, or
019        * SUBCOMPONENT.  Default FIELD.
020        */
021       public DRElement( int iLevel ) {
022          super( iLevel );
023          setName( sNm );
024          setRule( sRl );
025       }
026    
027       /**
028        * Construct a Date/Time Range Element using the default name and type constants
029        * at the default level FIELD.
030        */
031       public DRElement() {
032          super( FIELD );
033          setName( sNm );
034          setRule( sRl );
035       }
036    
037       /**
038        * Set the actual ISO formatted start datetime string.<br><br>
039        * TODO: Add a convenience method to set this from normal strings or date variables
040        * @param sDateTime String is ISO format start date/time.
041        */
042       public void setStartDateTime( String sDateTime ) {
043          TSElement e = new TSElement( iLevel + 1 );
044          e.setName( "DR.1" );
045          e.setDateTime( sDateTime );
046          try {
047             setComponent( e, 1 );
048          } catch( MalformedFieldException mfe ) {
049             mfe.printStackTrace();
050          }
051       }
052    
053       /**
054        * Set start datetime string and precision.<br><br>
055        * Note: From the HL7 documentation,
056        * "In prior versions of HL7, an optional second component indicates the degree of
057        * precision of the time stamp (Y = year, L = month, D = day, H = hour,
058        * M = minute, S = second). This optional second component is retained only for
059        * purposes of backward compatibility."
060        * @param sDateTime String is ISO format start date/time.
061        * @param sPrecision String with the precision of the start date/time
062        */
063       public void setStartDateTime( String sDateTime, String sPrecision ) {
064          TSElement e = new TSElement( iLevel + 1 );
065          e.setName( "DR.1" );
066          e.setDateTime( sDateTime );
067          e.setPrecision( sPrecision );
068          try {
069             setComponent( e, 1 );
070          } catch( MalformedFieldException mfe ) {
071             mfe.printStackTrace();
072          }
073       }
074    
075       /**
076        * Get the start date/time as a TS Element object
077        * @return TSElement with start date/time set.
078        */
079       public TSElement getStartDateTime() {
080          return (TSElement)getComponent( 1 );
081       }
082    
083       /**
084        * Set the actual ISO formatted end datetime string.<br><br>
085        * TODO: Add a convenience method to set this from normal strings or date variables
086        * @param sDateTime String is ISO format end date/time.
087        */
088       public void setEndDateTime( String sDateTime ) {
089          TSElement e = new TSElement( iLevel + 1 );
090          e.setName( "DR.1" );
091          e.setDateTime( sDateTime );
092          try {
093             setComponent( e, 1 );
094          } catch( MalformedFieldException mfe ) {
095             mfe.printStackTrace();
096          }
097       }
098    
099       /**
100        * Set end datetime string and precision.<br><br>
101        * Note: From the HL7 documentation,
102        * "In prior versions of HL7, an optional second component indicates the degree of
103        * precision of the time stamp (Y = year, L = month, D = day, H = hour,
104        * M = minute, S = second). This optional second component is retained only for
105        * purposes of backward compatibility."
106        * @param sDateTime String is ISO format end date/time.
107        * @param sPrecision String with the precision of the end date/time
108        */
109       public void setEndDateTime( String sDateTime, String sPrecision ) {
110          TSElement e = new TSElement( iLevel + 1 );
111          e.setName( "DR.2" );
112          e.setDateTime( sDateTime );
113          e.setPrecision( sPrecision );
114          try {
115             setComponent( e, 2 );
116          } catch( MalformedFieldException mfe ) {
117             mfe.printStackTrace();
118          }
119       }
120    
121       /**
122        * Get the end date/time as a TS Element object
123        * @return TSElement with end date/time set.
124        */
125       public TSElement getEndDateTime() {
126          return (TSElement)getComponent( 2 );
127       }
128    
129    } // End class DRElement
130