Sun Adapter for TCP/IP HL7

com.stc.connector.hl7.framework.llp
Class MLLPV2

java.lang.Object
  extended by com.stc.connector.hl7.framework.llp.MLLP
      extended by com.stc.connector.hl7.framework.llp.MLLPV2

public class MLLPV2
extends MLLP

This class represents the MLLP structure.

 MLLP (Minimal Lower Layer Protocol):   
 
   [ SOB ][ HL7 Data ][ EOD ][ EOB]
 
 HLLP (Hybrid Lower Layer Protocol):   
 
   [ SOB ][ N | D ][ VER ][ CR ][ HL7 Data ][ LEN ][ BCC ][ EOD ][ EOB ]
 
 where:
 
    SOB: start of block (character)
    EOD: end of data    (character)
    EOB: end of block   (character)
    BCC: block checksum (character)
    CR : Carriage return(character)
    LEN: Length of HL7 Data (starting from SOB to end of HL7 data)
    N  : NAK block
    D  : Data block
    VER: HL7 version :: 21, 22, 23 (i.e., 2.1, 2.2, 2.3, ...)
 
 Assumptions:
 
     LEN : is 5 digit decimal (left zero filled) 
          -- largest value is 99999 bytes
 
     BCC : is 3 digit decimal (left zero filled)
           calculation algorithm is XOR.
          (999 means ignore BCC verification/calculation)
 
 NOTE:
 
     The values of the Start of Block [SOB],  
     End of Data [EOD] and End of Block [EOB], 
     must be UNIQUE.
 
 
The original specification is as follow:
 For HLLP (Hybrid Lower Layer Protocol):
 
 tvvddddcccccxxx
 
 Blocks consist of the following fields. Note that these are LLP 
 fields and are not the same as HL7 message fields.
 
  = Start Block character (1 byte)
      Configurable on a site specific basis. Unless there is a conflict, the
      value should be ASCII , i.e., <0x0B>. This should
      not be confused with the ASCII characters SOH or STX.
 t = Block Type (1 byte)
      'D' = data block
      'N' = NAK block
 vv = Protocol ID (2 bytes)
      The characters '2' '3' for this version
  = Carriage Return (1 byte)
      The ASCII carriage return character, i.e., <0x0D>.
 dddd = Data (variable number of bytes)
      In a data block, this is the data content of the block. The data can
      contain any displayable ASCII characters and the carriage return
      character, . Carriage returns that are not part of the HL7
      message may be inserted as described in "Carriage Return Stuffing."
      In a NAK block, this field contains a 1-byte reason code as follows:
          'C' - character count wrong in previous data block received
          'X' - checksum wrong in previous data block received
          'B' - data too long for input buffer in previous block received
          'G' - Error not covered elsewhere.
 ccccc = Block Size (5 bytes)
      Character count of all characters so far in the data block up to and
      including the last data character. For this version of the protocol this
      is 5 + the size of the dddd field. Note: HL7 message ends with a
       character. This character is considered as part of the data.
 xxx = Checksum (3 bytes)
      Exclusive-OR checksum of all characters in the block up to and
      including the last data character. The checksum is expressed as a
      decimal number in three ASCII digits.
      If the value of this field is 999, the checksum should not be
      computed. Processing will proceed as if it were correct. This feature
      is used for applications where the messages will be translated from
      one character set to another during transmission.
  = End Block character (1 byte)
      Configurable on a site specific basis. Unless there is a conflict, the
      value should be ASCII , i.e., <0x1C>. This should not be
      confused with the ASCII characters ETX or EOT.
  = Carriage Return (1 byte)
      The ASCII carriage return character, i.e., <0x0D>.
 
 
 For MLLP (Minimal Lower Layer Protocol):
 
 dddd
 
  = Start Block character (1 byte)
      ASCII , i.e., <0x0B>. This should not be confused with the ASCII characters
      SOH or STX.
 dddd = Data (variable number of bytes)
      This is the HL7 data content of the block. The data can contain any displayable
      ASCII characters and the carriage return character, .
  = End Block character (1 byte)
      ASCII , i.e., <0x1C>. This should not be confused with the ASCII characters
      ETX or EOT.
  = Carriage Return (1 byte)
      The ASCII carriage return character, i.e., <0x0D>.
 

Author:
Nagesh Samudrala

Nested Class Summary
static class MLLPV2.MLLPV2DBConnectionManager
           
 
Field Summary
static int STATUS_COMMIT_ACK_SENT
           
static int STATUS_HL7_ACK_SENT
           
static int STATUS_HL7_NAK_SENT
           
static int STATUS_NEW_MSG_RECEIVED
           
 
Fields inherited from class com.stc.connector.hl7.framework.llp.MLLP
version
 
Constructor Summary
MLLPV2(HL7LLPInfo llpInfo, MLLPV2CommonInterface hl7AppMessage, java.lang.String applicationName)
          Constructor for MLLPV2.
 
Method Summary
 byte[] extractHL7MessageBody(byte[] llpMessage)
          Method extractHL7MessageBody.
 javax.naming.InitialContext getTestCtx()
          The getTestCtx method is only used for MLLPv2 to get the Intial context.
 void setTestCtx(javax.naming.InitialContext testCtx)
          The setTestCtx method is only used for MLLPv2 to set the Intial context..
 boolean storeResponseMessageInLog(java.lang.String messageId, java.lang.String responseMessage, boolean isHL7NAK)
          Method storeResponseMessageInLog used only for MLLPV2 to store received Response ACK or NAK.
 
Methods inherited from class com.stc.connector.hl7.framework.llp.MLLP
constructLLPMessage
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

STATUS_NEW_MSG_RECEIVED

public static final int STATUS_NEW_MSG_RECEIVED
See Also:
Constant Field Values

STATUS_COMMIT_ACK_SENT

public static final int STATUS_COMMIT_ACK_SENT
See Also:
Constant Field Values

STATUS_HL7_ACK_SENT

public static final int STATUS_HL7_ACK_SENT
See Also:
Constant Field Values

STATUS_HL7_NAK_SENT

public static final int STATUS_HL7_NAK_SENT
See Also:
Constant Field Values
Constructor Detail

MLLPV2

public MLLPV2(HL7LLPInfo llpInfo,
              MLLPV2CommonInterface hl7AppMessage,
              java.lang.String applicationName)
Constructor for MLLPV2.

Parameters:
llpInfo -
hl7AppMessage -
Method Detail

getTestCtx

public javax.naming.InitialContext getTestCtx()
The getTestCtx method is only used for MLLPv2 to get the Intial context.

Returns:
testCtx - The Intial Context.

setTestCtx

public void setTestCtx(javax.naming.InitialContext testCtx)
The setTestCtx method is only used for MLLPv2 to set the Intial context..

Parameters:
testCtx - The Initial Context to set.

extractHL7MessageBody

public byte[] extractHL7MessageBody(byte[] llpMessage)
                             throws MLLPParsingtException
Method extractHL7MessageBody. It returns the pure hl7 data block and stores the message in the dataBase with messageID taken from HL7 Message.

Overrides:
extractHL7MessageBody in class MLLP
Parameters:
llpMessage -
Returns:
byte[]
Throws:
MLLPParsingtException

storeResponseMessageInLog

public boolean storeResponseMessageInLog(java.lang.String messageId,
                                         java.lang.String responseMessage,
                                         boolean isHL7NAK)
Method storeResponseMessageInLog used only for MLLPV2 to store received Response ACK or NAK.

Parameters:
messageId-The - messageID extract from the HL7 Message.
responseMessage-The - response message.
isHL7NAK-The - response message is NAK or not.
Returns:
boolean - true or false.

Sun Adapter for TCP/IP HL7