001 package org.vmdb.hl7;
002
003 import java.util.*;
004
005 /**
006 * <p><Title:> Abstract Base Class for HL7 Loop Structures. </p>
007 * <p>Description: HL7 Network Connectivity For VMDB. </p>
008 * <p>Copyright: Copyright (c) 2002-2003. </p>
009 * <p>Company: Veterinary Medical Database (VMDB). </p>
010 * <p>A "Loop" is not really part of the HL7 specification, but it is
011 * a very useful concept from X12 and is necessary to properly implement repeatable
012 * groups of segments in XML. The Loop does not appear in the HL7 2.4 representation
013 * except as {...} groupings in the specification. It appears in the XML
014 * representation as <PATIENT_RESULT>...</PATIENT_RESULT> type tag pairs with segment
015 * tag pairs embedded within.</p>
016 * <p>For "formal" description of any given "loop" see HL7 v2.xml documentation
017 * that has recently become an official ANSI standard.</p>
018 * @author Michael K. Martin
019 * @version 1.0
020 */
021
022 public abstract class HL7Loop extends HL7SegmentContainer{
023 private static Hashtable hLoopTypes;
024
025 static {
026 try {
027 hLoopTypes = new Hashtable();
028 hLoopTypes.put( "PATIENT_RESULT", Class.forName("org.vmdb.hl7.PATIENT_RESULTLoop") );
029 hLoopTypes.put( "PATIENT", Class.forName("org.vmdb.hl7.PATIENTLoop") );
030 hLoopTypes.put( "PATIENT_VISIT", Class.forName("org.vmdb.hl7.PATIENT_VISITLoop") );
031 hLoopTypes.put( "ORDER_OBSERVATION", Class.forName("org.vmdb.hl7.ORDER_OBSERVATIONLoop") );
032 hLoopTypes.put( "OBSERVATION", Class.forName("org.vmdb.hl7.OBSERVATIONLoop") );
033 } catch( Exception e ) {
034 e.printStackTrace();
035 }
036 }
037
038 /** Temporary fix. Really needs to insert the Message Structure, whatever
039 * that is.
040 * @return String with Message Structure plus loop name to match schema
041 */
042 public String getName() {
043 return "ORU_R01." + super.getName();
044 }
045
046 // Lie to the program since I don't expect to run out of message.
047 public boolean messageComplete() {
048 return true;
049 }
050
051 public static boolean isLoop( String sRule ) {
052 return hLoopTypes.containsKey( sRule );
053 }
054
055 public static Class getLoopClass( String sRule ) {
056 Class cLoop = null;
057 Object o = hLoopTypes.get( sRule );
058 if( o != null ) {
059 cLoop = (Class)o;
060 }
061 return cLoop;
062 }
063
064 } // End class HL7LOOP