ca.uhn.hl7v2.parser
Class PipeParser

java.lang.Object
  extended by ca.uhn.hl7v2.parser.Parser
      extended by ca.uhn.hl7v2.parser.PipeParser

public class PipeParser
extends Parser

An implementation of Parser that supports traditionally encoded (ie delimited with characters like |, ^, and ~) HL7 messages. Unexpected segments and fields are parsed into generic elements that are added to the message.

Author:
Bryan Tripp (bryan_tripp@sourceforge.net)

Field Summary
static java.lang.String DEFAULT_LEGACY_MODE_PROPERTY
          System property key.
 
Constructor Summary
PipeParser()
          Creates a new PipeParser
PipeParser(ModelClassFactory theFactory)
          Creates a new PipeParser
 
Method Summary
protected  java.lang.String doEncode(Message source)
          Formats a Message object into an HL7 message string using this parser's default encoding ("VB").
protected  java.lang.String doEncode(Message source, java.lang.String encoding)
          Formats a Message object into an HL7 message string using the given encoding.
 java.lang.String doEncode(Segment structure, EncodingCharacters encodingCharacters)
          Encodes a particular segment and returns the encoded structure
 java.lang.String doEncode(Type type, EncodingCharacters encodingCharacters)
          Encodes a particular type and returns the encoded structure
protected  Message doParse(java.lang.String message, java.lang.String version)
          Parses a message string and returns the corresponding Message object.
static java.lang.String encode(Group source, EncodingCharacters encodingChars)
          Returns given group serialized as a pipe-encoded string - this method is called by encode(Message source, String encoding).
 java.lang.String encode(Message source)
          Formats a Message object into an HL7 message string using this parser's default encoding.
static java.lang.String encode(Segment source, EncodingCharacters encodingChars)
           
static java.lang.String encode(Type source, EncodingCharacters encodingChars)
          Encodes the given Type, using the given encoding characters.
 java.lang.String getAckID(java.lang.String message)
          For response messages, returns the value of MSA-2 (the message ID of the message sent by the sending system).
 Segment getCriticalResponseData(java.lang.String message)
           Returns a minimal amount of data from a message string, including only the data needed to send a response to the remote system.
 java.lang.String getDefaultEncoding()
           
 java.lang.String getEncoding(java.lang.String message)
          Returns a String representing the encoding of the given message, if the encoding is recognized.
 java.lang.String getMessageStructure(java.lang.String message)
          Deprecated. this method should not be public
 java.lang.String getVersion(java.lang.String message)
          Returns the version ID (MSH-12) from the given message, without fully parsing the message.
 boolean isLegacyMode()
           Returns true if legacy mode is on.
 void parse(Message message, java.lang.String string)
          Parses a particular message and returns the encoded structure
 void parse(Segment destination, java.lang.String segment, EncodingCharacters encodingChars)
          Parses a segment string and populates the given Segment object.
 void parse(Segment destination, java.lang.String segment, EncodingCharacters encodingChars, java.lang.Integer theRepetition)
          Parses a segment string and populates the given Segment object.
 Message parse(java.lang.String message)
          Parses a message string and returns the corresponding Message object.
 void parse(Type destinationField, java.lang.String data, EncodingCharacters encodingCharacters)
          Fills a field with values from an unparsed string representing the field.
 void setLegacyMode(boolean legacyMode)
          Defaults to false
static java.lang.String[] split(java.lang.String composite, java.lang.String delim)
          Splits the given composite string into an array of components using the given delimiter.
static java.lang.String stripLeadingWhitespace(java.lang.String in)
          Removes leading whitespace from the given string.
 boolean supportsEncoding(java.lang.String encoding)
          Returns true if and only if the given encoding is supported by this Parser.
 
Methods inherited from class ca.uhn.hl7v2.parser.Parser
encode, getFactory, getMessageStructureForEvent, getMessageStructures, getValidationContext, getValidVersions, instantiateMessage, makeControlMSH, setValidationContext, validVersion
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_LEGACY_MODE_PROPERTY

public static final java.lang.String DEFAULT_LEGACY_MODE_PROPERTY
System property key. If value is "true", legacy mode will default to true

See Also:
isLegacyMode(), Constant Field Values
Constructor Detail

PipeParser

public PipeParser()
Creates a new PipeParser


PipeParser

public PipeParser(ModelClassFactory theFactory)
Creates a new PipeParser

Parameters:
theFactory - custom factory to use for model class lookup
Method Detail

getEncoding

public java.lang.String getEncoding(java.lang.String message)
Returns a String representing the encoding of the given message, if the encoding is recognized. For example if the given message appears to be encoded using HL7 2.x XML rules then "XML" would be returned. If the encoding is not recognized then null is returned. That this method returns a specific encoding does not guarantee that the message is correctly encoded (e.g. well formed XML) - just that it is not encoded using any other encoding than the one returned.

Specified by:
getEncoding in class Parser

getDefaultEncoding

public java.lang.String getDefaultEncoding()
Specified by:
getDefaultEncoding in class Parser
Returns:
the preferred encoding of this Parser

supportsEncoding

public boolean supportsEncoding(java.lang.String encoding)
Returns true if and only if the given encoding is supported by this Parser.

Specified by:
supportsEncoding in class Parser

getMessageStructure

public java.lang.String getMessageStructure(java.lang.String message)
                                     throws HL7Exception,
                                            EncodingNotSupportedException
Deprecated. this method should not be public

Parameters:
message -
Returns:
Throws:
HL7Exception
EncodingNotSupportedException

doParse

protected Message doParse(java.lang.String message,
                          java.lang.String version)
                   throws HL7Exception,
                          EncodingNotSupportedException
Parses a message string and returns the corresponding Message object. Unexpected segments added at the end of their group.

Specified by:
doParse in class Parser
Parameters:
message - a String that contains an HL7 message
version - the name of the HL7 version to which the message belongs (eg "2.5")
Returns:
a HAPI Message object parsed from the given String
Throws:
HL7Exception - if the message is not correctly formatted.
EncodingNotSupportedException - if the message encoded is not supported by this parser.

parse

public void parse(Segment destination,
                  java.lang.String segment,
                  EncodingCharacters encodingChars)
           throws HL7Exception
Parses a segment string and populates the given Segment object. Unexpected fields are added as Varies' at the end of the segment.

Specified by:
parse in class Parser
Parameters:
theRepetition - The repetition number of this segment within its group
Throws:
HL7Exception - if the given string does not contain the given segment or if the string is not encoded properly

parse

public void parse(Segment destination,
                  java.lang.String segment,
                  EncodingCharacters encodingChars,
                  java.lang.Integer theRepetition)
           throws HL7Exception
Parses a segment string and populates the given Segment object. Unexpected fields are added as Varies' at the end of the segment.

Parameters:
theRepetition - The repetition number of this segment within its group
Throws:
HL7Exception - if the given string does not contain the given segment or if the string is not encoded properly

parse

public void parse(Type destinationField,
                  java.lang.String data,
                  EncodingCharacters encodingCharacters)
           throws HL7Exception
Fills a field with values from an unparsed string representing the field.

Specified by:
parse in class Parser
Parameters:
destinationField - the field Type
data - the field string (including all components and subcomponents; not including field delimiters)
encodingCharacters - the encoding characters used in the message
Throws:
HL7Exception - If there is a problem encoding

split

public static java.lang.String[] split(java.lang.String composite,
                                       java.lang.String delim)
Splits the given composite string into an array of components using the given delimiter.


doEncode

public java.lang.String doEncode(Segment structure,
                                 EncodingCharacters encodingCharacters)
                          throws HL7Exception
Encodes a particular segment and returns the encoded structure

Specified by:
doEncode in class Parser
Parameters:
structure - The structure to encode
encodingCharacters - The encoding characters
Returns:
The encoded segment
Throws:
HL7Exception - If there is a problem encoding

doEncode

public java.lang.String doEncode(Type type,
                                 EncodingCharacters encodingCharacters)
                          throws HL7Exception
Encodes a particular type and returns the encoded structure

Specified by:
doEncode in class Parser
Parameters:
type - The type to encode
encodingCharacters - The encoding characters
Returns:
The encoded type
Throws:
HL7Exception - If there is a problem encoding

encode

public static java.lang.String encode(Type source,
                                      EncodingCharacters encodingChars)
Encodes the given Type, using the given encoding characters. It is assumed that the Type represents a complete field rather than a component.


doEncode

protected java.lang.String doEncode(Message source,
                                    java.lang.String encoding)
                             throws HL7Exception,
                                    EncodingNotSupportedException
Formats a Message object into an HL7 message string using the given encoding.

Specified by:
doEncode in class Parser
Parameters:
source - a Message object from which to construct an encoded message string
encoding - the name of the HL7 encoding to use (eg "XML"; most implementations support only one encoding)
Returns:
the encoded message
Throws:
HL7Exception - if the data fields in the message do not permit encoding (e.g. required fields are null)
EncodingNotSupportedException - if the requested encoding is not supported by this parser.

doEncode

protected java.lang.String doEncode(Message source)
                             throws HL7Exception
Formats a Message object into an HL7 message string using this parser's default encoding ("VB").

Specified by:
doEncode in class Parser
Parameters:
source - a Message object from which to construct an encoded message string
Returns:
the encoded message
Throws:
HL7Exception - if the data fields in the message do not permit encoding (e.g. required fields are null)

encode

public static java.lang.String encode(Group source,
                                      EncodingCharacters encodingChars)
                               throws HL7Exception
Returns given group serialized as a pipe-encoded string - this method is called by encode(Message source, String encoding).

Throws:
HL7Exception

encode

public static java.lang.String encode(Segment source,
                                      EncodingCharacters encodingChars)

stripLeadingWhitespace

public static java.lang.String stripLeadingWhitespace(java.lang.String in)
Removes leading whitespace from the given string. This method was created to deal with frequent problems parsing messages that have been hand-written in windows. The intuitive way to delimit segments is to hit at the end of each segment, but this creates both a carriage return and a line feed, so to the parser, the first character of the next segment is the line feed.


getCriticalResponseData

public Segment getCriticalResponseData(java.lang.String message)
                                throws HL7Exception

Returns a minimal amount of data from a message string, including only the data needed to send a response to the remote system. This includes the following fields:

This method is intended for use when there is an error parsing a message, (so the Message object is unavailable) but an error message must be sent back to the remote system including some of the information in the inbound message. This method parses only that required information, hopefully avoiding the condition that caused the original error. The other fields in the returned MSH segment are empty.

Specified by:
getCriticalResponseData in class Parser
Returns:
an MSH segment
Throws:
HL7Exception

getAckID

public java.lang.String getAckID(java.lang.String message)
For response messages, returns the value of MSA-2 (the message ID of the message sent by the sending system). This value may be needed prior to main message parsing, so that (particularly in a multi-threaded scenario) the message can be routed to the thread that sent the request. We need this information first so that any parse exceptions are thrown to the correct thread. Returns null if MSA-2 can not be found (e.g. if the message is not a response message).

Specified by:
getAckID in class Parser

setLegacyMode

public void setLegacyMode(boolean legacyMode)
Defaults to false

See Also:
isLegacyMode()

encode

public java.lang.String encode(Message source)
                        throws HL7Exception
Formats a Message object into an HL7 message string using this parser's default encoding.

Overrides:
encode in class Parser
Parameters:
source - a Message object from which to construct an encoded message string
Returns:
the encoded message
Throws:
HL7Exception - if the data fields in the message do not permit encoding (e.g. required fields are null)

parse

public Message parse(java.lang.String message)
              throws HL7Exception,
                     EncodingNotSupportedException
Parses a message string and returns the corresponding Message object.

Overrides:
parse in class Parser
Parameters:
message - a String that contains an HL7 message
Returns:
a HAPI Message object parsed from the given String
Throws:
HL7Exception - if the message is not correctly formatted.
EncodingNotSupportedException - if the message encoded is not supported by this parser.

isLegacyMode

public boolean isLegacyMode()

Returns true if legacy mode is on.

Prior to release 1.0, when an unexpected segment was encountered in a message, HAPI would recurse to the deepest nesting in the last group it encountered after the current position in the message, and deposit the segment there. This could lead to unusual behaviour where all segments afterward would not be in an expected spot within the message.

This should normally be set to false, but any code written before the release of HAPI 1.0 which depended on this behaviour might need legacy mode to be set to true.

Defaults to false. Note that this method only overrides behaviour of the parse(java.lang.String) and encode(ca.uhn.hl7v2.model.Message) methods


getVersion

public java.lang.String getVersion(java.lang.String message)
                            throws HL7Exception
Returns the version ID (MSH-12) from the given message, without fully parsing the message. The version is needed prior to parsing in order to determine the message class into which the text of the message should be parsed.

Specified by:
getVersion in class Parser
Throws:
HL7Exception - if the version field can not be found.

parse

public void parse(Message message,
                  java.lang.String string)
           throws HL7Exception
Description copied from class: Parser
Parses a particular message and returns the encoded structure

Specified by:
parse in class Parser
Parameters:
message - The message to encode
string - The string to parse
Throws:
HL7Exception - If there is a problem encoding


Copyright © 2001-2011 University Health Network. All Rights Reserved.