001package ca.uhn.hl7v2.util;
002
003import ca.uhn.hl7v2.HL7Exception;
004
005/**
006 * <p>Maps local codes to interface codes and vice versa.  The default implementation
007 * of CodeMapper is FileCodeMapper.  An instance of FileCodeMapper can be obtained  
008 * by calling <code>CodeMapper.getInstance()</code>.  See FileCodeMapper for instructions
009 * on how to set up code map files.  </p>
010 * <p>Please note that this class is not intended for the purpose of enumerating valid codes. 
011 * If that is what you are looking for please see <code>ca.uhn.hl7v2.TableRepository</code></p>
012 * @author Bryan Tripp  
013 */
014public abstract class CodeMapper {
015
016    private static CodeMapper codeMapper = null;
017    
018    /**
019     * Returns a singleton instance of CodeMapper.  This is currently 
020     * a FileCodeMapper by default.  
021     */
022    public synchronized static CodeMapper getInstance() throws HL7Exception {
023        if (codeMapper == null) {
024            //create new file code mapper 
025            codeMapper = new FileCodeMapper();
026        }
027        return codeMapper;
028    }
029    
030    /** 
031     * A convenience method that returns a local code from an underlying 
032     * CodeMapper instance by calling <code>CodeMapper.getInstance().getLocalCode(...)</code>
033     */
034    public static String getLocal(String interfaceName, int hl7Table, String interfaceCode) throws HL7Exception {
035        return CodeMapper.getInstance().getLocalCode(interfaceName, hl7Table, interfaceCode);
036    }
037
038    /** 
039     * A convenience method that returns an interface code from an underlying 
040     * CodeMapper instance by calling <code>CodeMapper.getInstance().getInterfaceCode(...)</code>
041     */
042    public static String getInt(String interfaceName, int hl7Table, String localCode) throws HL7Exception {
043        return CodeMapper.getInstance().getInterfaceCode(interfaceName, hl7Table, localCode);
044    }
045    
046    /**
047     * Returns the interface code for the given local code, for use in the context 
048     * of the given interface.  
049     */
050    public abstract String getInterfaceCode(String interfaceName, int hl7Table, String localCode) throws HL7Exception;
051     
052    /**
053     * Returns the local code for the given interface code as it appears in  
054     * the given interface.  
055     */
056    public abstract String getLocalCode(String interfaceName, int hl7Table, String interfaceCode) throws HL7Exception;
057    
058    /**
059     * Determines what happens if no matching code is found during a lookup.  If set to true, 
060     * an HL7Exception is thrown if there is no match.  If false, null is returned.  The default
061     * is false. 
062     */
063    public abstract void throwExceptionIfNoMatch(boolean throwException);
064    
065    /**
066     * If values are cached in such a way that they are not guaranteed to be current, a call 
067     * to this method refreshes the values.  
068     */
069    public abstract void refreshCache() throws HL7Exception; 
070    
071    /* may add these functions later to allow consistent maintenance e.g via a UI ... 
072    public abstract String[] getInterfaceNames();
073    public abstract void addInterface(String name);
074    public abstract void addCodeMap(String interface, int hl7table, String localCode, String interfaceCode);
075    */
076}